ffmpeg 4.4から使える予定のフィルタ。2つの映像は同じ解像度、ピクセルフォーマットでなければならない。メタデータに出力できるのでffprobe連携しやすい。
ffprobe の使い方
framesyncに対応しているので片方の出力が終わったら終了するようにできる。
2ファイル入力するフィルタの挙動設定 framesync
基本コマンド
オプション設定はなし。出力値は0から1までの小数。変化が少ないほど0に近づく。
ffmpeg -i 調べたい動画 -i 元の動画 -filter_complex "[0:v]settb=1/AVTB,setpts=PTS-STARTPTS[0v];[1:v]settb=1/AVTB,setpts=PTS-STARTPTS[1v];[0v][1v]scale2ref=flags=bicubic,msad=shortest=1:repeatlast=0" -an -f null -
ffmpeg 5.1以降はts_sync_mode対応したのでsettb=1/AVTB,setpts=PTS-STARTPTS
が不要になった。
ffmpeg -i 調べたい動画 -i 元の動画 -filter_complex "scale2ref=flags=bicubic,msad=shortest=1:repeatlast=0:ts_sync_mode=1" -an -f null -
公式ドキュメント:FFmpeg Filters Documentation : msad
メタデータ出力内容。
lavfi.msad.msad.Y lavfi.msad.msad.U lavfi.msad.msad.V lavfi.msad.msad_avg
ffprobe連携例。出力時間は-read_intervalsで指定。
ffprobe -f lavfi -i movie=enc.mp4,settb=1/AVTB,setpts=PTS-STARTPTS[0];movie=orig.mp4,settb=1/AVTB,setpts=PTS-STARTPTS[1];[0][1]scale2ref=flags=bicubic,msad -show_entries packet_tags=lavfi.msad.msad_avg -read_intervals "%1" > msad_avg.txt