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})'

文字を描写する drawtext

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

ffprobe の使い方

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

オプション

  • stats_file[string]
    すべてのフレームの vmaf モーションスコアを表示したログファイルを指定したパスに出力する。で標準出力する
    既定値:無指定(何も出力しない)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)