特定のフィルタで出力されるメタデータを扱うことができるmetadata
フィルタの使い方。ametadata
フィルタも同じオプションで使うことができる。こちらはコンソールに出力するに対してdrawgraph
フィルタは映像にテキストやグラフで出力する。drawgraph
フィルタと比べて出力範囲を指定しなくても良いので使いやすい。
メタデータを映像化する drawgraph, adrawgraph
基本コマンド
signalstats
フィルタからYDIF
を表示している。
ffplay -i input -vf signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0: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]
- ffmpeg で使える評価式
- ffmpeg でメタデータを加える
- 2つの映像の画質評価をする ssim
- YUV のデータを数値で表示する signalstats
- 適切な音量が調べられる ffmpeg の ebur128 の使い方
公式ドキュメント:FFmpeg Filters Documentation : metadata, ametadata
公式wiki:FilteringGuide – FFmpeg : Filter Metadata
オプション
- mode
出力モードの指定
print
だけ指定するとその条件のメタデータを表示する。function の条件で間に合わない場合にprint
以外のモードを組み合わせて最終的にprint
で VALUE1 を使いメタデータを表示する。サンプルコマンドを示した方がわかりやすいので後述。 - select
key
,value
を選択する(and 条件をつける)
メタデータは表示しない - add
key
,value
を追加する(or 条件をつける)
同じメタデータがあれば何もしない、つまり別のメタデータを追加する
メタデータは表示しない - modify
key
,value
の既存の値を変更する
メタデータは表示しない - delete
value
の値があれば削除する、なければkey
の値を削除する
メタデータは表示しない - print
メタデータを表示する - key
全てのモードで使われるが、print
モード以外では必須指定項目 - value
メタデータの値の指定。modify
,add
モードでは必須項目 - function
value
の比較方法 - same_str
文字の一致。浮動小数点はマッチしない - starts_with
数値(整数部分)や文字の先頭が一致すればマッチする
例:1 を指定すれば 1.xxx や 1x.xxx などがマッチする - less
以下 - equal
浮動小数点を含む数値の一致 - greater
以上 - expr
条件に評価式を使う
ffmpeg で使える評価式を参照 - expr
function で expr を指定すると使える
0 は何も出力せず、1 は全て出力する - VALUE1
print
以外のモードで選択した値を再利用する - VALUE2
value で指定した値 - file
ログをファイルで出力する
既定値は指定しないので指定したらファイル名を指定する
オプション解説
select
の例
YLOW
を 189 以上と 191 以下を組み合わせて両方を満たす条件の例。同じオプションなのでprint
は1つで良い。
ffplay -f lavfi -i movie=input,signalstats,metadata=select:key=lavfi.signalstats.YLOW,signalstats,metadata=select:key=lavfi.signalstats.YLOW:value=189:function=greater,signalstats,metadata=select:key=lavfi.signalstats.YLOW:value=191:function=less,signalstats,metadata=print:key=lavfi.signalstats.YLOW:function=expr:expr=VALUE1
YLOW
とYMIN
を組み合わせた例。別のオプションなのでprint
はそれぞれ必要。
ffplay -f lavfi -i movie=input,signalstats,metadata=select:key=lavfi.signalstats.YLOW:value=190:function=less,metadata=print:key=lavfi.signalstats.YLOW:function=expr:expr=VALUE1,metadata=select:key=lavfi.signalstats.YMIN:value=140:function=less,metadata=print:key=lavfi.signalstats.YMIN:function=expr:expr=VALUE1
add
の例
select
の条件にadd
をつけてYLOW
190以下とYMIN
140 以下のどちらかを満たす条件の例。。別のオプションなのでprint
はそれぞれ必要。
ffplay -f lavfi -i movie=input,signalstats,metadata=select:key=lavfi.signalstats.YLOW:value=190:function=less,metadata=print:key=lavfi.signalstats.YLOW:function=expr:expr=VALUE1,metadata=add:key=lavfi.signalstats.YMIN:value=140:function=less,signalstats,metadata=print:key=lavfi.signalstats.YMIN:function=expr:expr=VALUE1
modify
の例
YLOW
の条件結果の全てを140に書き換える。
ffplay -f lavfi -i movie=input,signalstats,metadata=select:key=lavfi.signalstats.YLOW:value=190:function=less,metadata=modify:key=lavfi.signalstats.YLOW:value=140,metadata=print:key=lavfi.signalstats.YLOW:function=expr:expr=VALUE1
delete
の例
YMIN
の条件を消してYMAX
の条件に切り替えた例。
ffplay -f lavfi -i movie=input,signalstats,metadata=select:key=lavfi.signalstats.YMIN:value=140:function=greater,metadata=delete:key=lavfi.signalstats.YMIN,metadata=select:key=lavfi.signalstats.YMAX:value=0:function=greater,metadata=print:key=lavfi.signalstats.YMAX:function=expr:expr=VALUE1
YMIN
の条件を消して再度YMIN
を指定しても出力されない。
ffplay -f lavfi -i movie=input,signalstats,metadata=select:key=lavfi.signalstats.YMIN:value=140:function=greater,metadata=delete:key=lavfi.signalstats.YMIN,metadata=select:key=lavfi.signalstats.YMIN:value=140:function=greater,metadata=print:key=lavfi.signalstats.YMIN:function=expr:expr=VALUE1