ループ回数を指定できる loop, aloop

ffmpeg で無限入力が可能にで追加されていたが、フィルタを掛けて加工することはできなかった。今回はフィルタ内でループするのでループ回数やループした部分にもフィルタが当てられる。

基本コマンド

1回ループして2回読み込む

asetptsを追加した。2017年10月4日
setptsを追加した。2019年2月20日。これより
ffmpeg -i input -filter_complex loop=1:32767:0,setpts=N/(FRAME_RATE*TB);aloop=1:2.14748e+009:0,asetpts=N/SR/TB

reverseフィルタと併用したループ例。
ffmpeg -f lavfi -i testsrc2=d=5.5 -vf trim=start=3.5:end=5.5,setpts=0.5*PTS-STARTPTS,split[out0][out1];[out0]reverse[r];[out1][r]concat,loop=2:250,setpts=N/25/TB avm.gif

映像と音声を逆再生にエンコードする
Make Boomerang w/ single FFmpeg Command | by Salih Çağlar Ispirli | Apr, 2022 | Mediumから引用。

公式ドキュメント:FFmpeg Filters Documentation : loop
公式ドキュメント:FFmpeg Filters Documentation : aloop

オプション

  • loop[int]
    ループ回数。-1 で無限
    既定値:0
    範囲:0からINT_MAXまで
  • size[int64]
    ループにどれだけバッファサイズを取るか
    loopならフレーム数。aloopならサンプル数
    既定値:0
    範囲:0から32767まで:loop
    範囲:0からINT_MAXまで:aloop
  • start[int64]
    ループするときにどの位置からループするか
    loopならフレーム数。aloopならサンプル数
    既定値:0
    範囲:0からI64_MAXまで

メタデータをコンソールに表示する metadata, ametadata

特定のフィルタで出力されるメタデータを扱うことができるmetadataフィルタの使い方。ametadataフィルタも同じオプションで使うことができる。こちらはコンソールに出力するに対してdrawgraphフィルタは映像にテキストやグラフで出力する。drawgraphフィルタと比べて出力範囲を指定しなくても良いので使いやすい。functionを使うことでメタデータの内容を条件で使い分けることができる。

メタデータを映像化する drawgraph, adrawgraph

基本コマンド

signalstatsフィルタからYDIFを表示している。
ffplay -i input -vf signalstats,metadata=print:key=lavfi.signalstats.YDIF:function=expr:expr='between(VALUE1\,0\,1)'

unsharpフィルタのY差分をssimで表示している。
ffplay -i input -vf split[a][b];[b]unsharp[B];[a][B]ssim,metadata=print:key=lavfi.ssim.Y

drawtextフィルタで映像に書き込む。
ffplay -i input -vf split[a][b];[b]unsharp[B];[a][B]ssim,drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='"SSIM="%{metadata\:lavfi.ssim.all}'

ebur128フィルタでM、S、Iを同時に表示するにはametadataフィルタを3つ並べる。
ffplay -i input -af ebur128=metadata=1,ametadata=print:key=lavfi.r128.M,ametadata=print:key=lavfi.r128.S,ametadata=print:key=lavfi.r128.I
ffplay -f lavfi -i amovie=input,ebur128=metadata=1,ametadata=print:key=lavfi.r128.M,ametadata=print:key=lavfi.r128.S,ametadata=print:key=lavfi.r128.I[out0];amovie=input[out1]

黒が50%未満を出力せずに、その前のフレームをコピーして出力する。blackframe=0で全フレームを対象に、metadataフィルタで対象フレームを選ぶ。コピーした重複フレームではなく可変フレームで出力するには-vsync vfrにする。
ffmpeg -i input -vf blackframe=0,metadata=select:key=lavfi.blackframe.pblack:value=50:function=less -vsync cfr -c:a copy output

idetフィルタのsingle.progressiveのログをテキストで出力する。
ffmpeg -i input -vf idet,metadata=print:key=lavfi.idet.single.progressive:file=single.progressive.txt -an -f null -

ffprobeでsitiフィルタのlavfi.siti.si,lavfi.siti.tiをcsvで出力する。
ffprobe -v error -f lavfi -i movie=input.mp4,siti -show_entries packet=pts_time -show_entries packet_tags=lavfi.siti.si,lavfi.siti.ti -read_intervals "%1" -of csv > siti.csv

ffprobe の使い方

メタデータを標準出力する。
metadata=mode=print:file=-
metadata=mode=print:file='pipe\:4'

公式ドキュメント:FFmpeg Filters Documentation : metadata, ametadata
公式wiki:FilteringGuide – FFmpeg : Filter Metadata

Continue reading “メタデータをコンソールに表示する metadata, ametadata”

音声統計データを表示する astats

音声統計データを表示するastatsの使い方。メタデータ対応しているので出力したログの加工が容易になる。

基本コマンド

ffmpeg -i input -af astats -vn -f null -

soxのstatsと同じような内容が表示される。
sox input.wav -n -S stats

SoX, SoXI, soxformat マニュアルページ日本語訳

Continue reading “音声統計データを表示する astats”

音量を脈打つように上げ下げできる apulsator

apulsatorはオートパンやトレモロの中間的なフィルタである。ffmpeg ではpantremoloで使える。左右のチャンネルの位相や波形をずらしたりする LFO (low frequency oscillator) を元に音量を変える。オフセットが 0 のときはトレモロと同じように左右のチャンネルを等しく変える。オフセットが 0.5 のときはオートパンのように周波数の半分の位相をずらす。オフセットが 1 のときは再び等しく変え、1 に近づくほどより早く右から左へのスピーカーに音が渡されずれが小さくなる。

基本コマンド

ffplay input -af apulsator=level_in=1:level_out=1:mode=sine:1:amount=1:offset_l=0:offset_r=0.5:width=1:timing=hz:hz=2

ahistogramを併用するとずれ具合が見える化する
ffplay -f lavfi amovie=input,apulsator=level_in=1:level_out=1:mode=sine:1:amount=.8:offset_l=.6:offset_r=1:width=1:timing=bpm:hz=2,ahistogram=dmode=separate:r=25:s=hd720:scale=log:ascale=log:acount=1:rheight=.1:slide=replace[out0];amovie=input,apulsator=level_in=1:level_out=1:mode=sine:1:amount=.8:offset_l=.6:offset_r=1:width=1:timing=bpm:hz=2[out1]

音量のヒストグラムを映像化する ahistogram

公式ドキュメント:FFmpeg Filters Documentation : apulsator

Continue reading “音量を脈打つように上げ下げできる apulsator”

こもった音や割れた音に変える aemphasis

LPレコードやCDなどのフィルタカーブで強調された素材を作成または復元するaemphasisの使い方。音割れさせたりこもった音に変えたりできる。

基本コマンド

ffplay input -af aemphasis=level_in=1:level_out=1:mode=reproduction:type=cd

公式ドキュメント:FFmpeg Filters Documentation : aemphasis

Continue reading “こもった音や割れた音に変える aemphasis”

複数の周波数帯の音量を変えるanequalizer

指定したチャンネルの周波数帯の音量を変えられるanequalizerフィルタの使い方。似たフィルタが他にもありequalizerは同じように周波数帯のゲインを調整するがこちらのほうがわかりやすい。compandフィルタはDTMの設定になれている人向け。

基本コマンド

ステレオ音声を読み込み c0(FL)の周波数4000Hzの周辺200Hzを-10dBにする。c1(FR)は10dBにする。
ffmpeg -i input -af "anequalizer=c0 f=4000 w=200 g=-10|c1 f=4000 w=200 g=10" -c:v copy output
ffplay -i input -af "anequalizer=c0 f=4000 w=200 g=-10|c1 f=4000 w=200 g=10"

showspectrumpicフィルタを併用すると効果の具合が視覚的に分かる。
ffmpeg -i input -filter_complex "anequalizer=c0 f=4000 w=200 g=-20|c1 f=4000 w=200 g=20",showspectrumpic=s=1024x1024:mode=separate anequalizer.png

不可逆圧縮された音声のカットされた周波数が調べられる showspectrumpic

anequalizer と showspectrumpic を併用して効果を見える化

curves=1で映像化するが用途不明。
ffmpeg -i input -filter_complex "anequalizer=c0 f=4000 w=200 g=-10|c1 f=4000 w=200 g=-10:curves=1[v][a]" -map [v] -map [a] output
ffplay -f lavfi -i "amovie=input.mp4,anequalizer=c0 f=4000 w=200 g=-10|c1 f=4000 w=200 g=-10:curves=1:mgain=-60:fscale=0[out1]"

公式ドキュメント:FFmpeg Filters Documentation : anequalizer

Continue reading “複数の周波数帯の音量を変えるanequalizer”

2016年1月のニコ生統計

集計期間は週間のニコ生統計の1ヶ月分である。2015年の1月の2週目から取得漏れの R-18 放送を含めて Vita API で取得し始めたのでそれ以前と比べて取得放送数が増えている。

Continue reading “2016年1月のニコ生統計”

ニューラルネットワーク予測を使ってインターレース解除する nnedi

ニューラルネットワーク予測のエッジ補正からインターレースを解除するフィルタnnediの使い方。既存のインターレース解除フィルタyadif, w3fdif, bwdifに比べてかなり処理速度の遅いフィルタである。今までは AviSynth や Vapoursynth で使われているフィルタなのでそちらで検索すると使い方を調べることができる。rpowオプションは組み込まれていないのでアップスケールには使えない。

関連記事
ffmpeg でインターレース解除

基本コマンド

プレビューがもたつくかもしれない
ffmpeg -i input -vf nnedi=deint=all:field=a:planes=7:nsize=s32x4:nns=n32:qual=fast:etype=a:pscrn=new output
ffplay -i input -vf nnedi=deint=all:field=a:planes=7:nsize=s32x4:nns=n32:qual=fast:etype=a:pscrn=new

公式ドキュメント:FFmpeg Filters Documentation : nnedi

Continue reading “ニューラルネットワーク予測を使ってインターレース解除する nnedi”

不可逆圧縮された音声のカットされた周波数が調べられる showspectrumpic

音声データの周波数を調べて周波数と時間の2次元軸とした1枚画像を出力するshowspectrumpicの使い方。

リアルタイムに周波数を調べるにはshowspectrumフィルタを使う。
音声波形を表示する showspectrum, showwaves の使い方

基本コマンド

ffmpeg -i input -filter_complex showspectrumpic=s=1024x1024:mode=combined:color=intensity:scale=log:saturation=1:win_func=hann:orientation=vertical:gain=1:legend=1:start=0:stop=0 -y showspectrumpic.png

任意の周波数帯だけを表示するにはstart、stopの値を指定する。legend=1で経過時間を整数秒で表示するには12.8秒の倍数にするとよい。

公式ドキュメント
FFmpeg Filters Documentation : showspectrumpic

Continue reading “不可逆圧縮された音声のカットされた周波数が調べられる showspectrumpic”