2017年12月16日
vmafmotion, libvmaf
フィルタの意味をはき違えていたのでタイトルと本文を訂正、修正した。
Netflixが使っている品質評価動きの評価に使われている VMAF(Video Multimethod Assessment Fusion)のモーションスコアを計算する。シーンチェンジ検出のscdet
フィルタと似た傾向になるのでシーンチェンジを調べるならscdet
フィルタの方が速い。
VMAFを計算するフィルタは2つあり、このvmafmotion
と./configure --enable-libvmaf
でライブラリをインストールして使えるlibvmaf
フィルタがある。前者は1つの映像の vmafモーションスコア(映像の変化)を計算し数値が 0 に近いほど前フレームからの変化が少ないことを示す。後者は2つの映像を比較した vmafスコア(品質評価)を計算し、ssim、psnr
フィルタよりも見た目の評価(主観的評価)に近しいものを目指している。
そのほかの動きを検出するフィルタ。
シーンチェンジの時間を調べるscdet
特定の映像フレームや音声サンプルを出力するselect, aselect
基本コマンド
vmafモーションスコアを計算しエンコードが終わると平均 vmafモーションスコアをコンソールに表示する
ffmpeg -i input -vf vmafmotion -an -f null -
さらにフレーム毎の vmafモーションスコアを log.txt のテキストファイルで出力する
ffmpeg -i input -vf vmafmotion=log.txt -an -f null -
再生しながらコンソールに表示する。
ffplay input -vf vmafmotion,metadata=print:key=lavfi.vmafmotion.score
drawtext
フィルタで映像にスコアを描写する。
ffplay input -vf vmafmotion,drawtext=y=40:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"vmafmotion ("%{metadata\:lavfi.vmafmotion.score})'
drawgraph
フィルタで映像の下にスコアを描写する。sで入力した映像と同じ幅を指定する。
ffplay -i input -vf split[0],vmafmotion,drawgraph=lavfi.vmafmotion.score:min=0:max=30:s=1920x256[1];[0][1]vstack
メタデータを映像化する drawgraph, adrawgraph
ffprobeでログを出力する。
ffprobe -v error -f lavfi -i movie=input.mp4,vmafmotion -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.vmafmotion.score -of csv > vmafmotion.csv
side_dataの行が不要ならgrepで削る。
ffprobe -v error -f lavfi -i movie=input.mp4,vmafmotion -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.vmafmotion.score -of csv > vmafmotion.csv
公式ドキュメント:FFmpeg Filters Documentation : vmafmotion
オプション
- stats_file[string]
すべてのフレームの vmaf モーションスコアを表示したログファイルを指定したパスに出力する。–で標準出力する
既定値:無指定(何も出力しない)