一部のフィルタで設定できる動画時間が異なるファイルの挙動設定を行うframesyncの設定方法。以前は個別のフィルタ毎に設定していたがこれのおかげで設定内容が統一された。
記事にしているフィルタ。
- YUV RGB を比較計算する blend
- 新しい映像の品質評価 libvmaf
- 映像の上に映像をのせる overlay
- 2つの映像の画質評価をする ssim
- 2つの映像の画質評価をする PSNR
- CLUTから色を置換するhaldclut
- 2つの映像の相関関係を調べるcorr
オプション
ts_sync_modeが2022年8月10日に追加された。track #9689。
- eof_action[int] 2ファイル目が終了したときの1ファイル目の挙動指定
- 0, repeat:最終フレームを繰り返す。既定値
- 1, endall:片方の入力が完了したら両方の入力を終わらせる
- 2, pass:1ファイル目が終了したら2ファイル目に切り替える
- shortest[boolean]
時間の短いファイルが最後まで処理したら終了する
既定値:0(終了しない) - repeatlast[boolean]
時間の短いファイルが最後まで処理し、時間の長いファイルが最後まで処理し終わるまで、時間の短いファイルの最終フレームを繰り返す
既定値:1(繰り返す) - ts_sync_mode[int]
タイムスタンプの同期方法。nearestは2入力目のファイルがmkv、またはwebmコンテナで、1入力目のファイルがそれら以外の時にタイムスタンプを合わせる。確認したのはmp4、mov、tsコンテナ。1入力目もmkv、またはwebmコンテナのときはdefaultのままでよい - 0, default:1入力目のフレームに最も近い、または等しいタイムスタンプを持つ2入力目のフレーム。既定値
- 1, nearest:1入力目のフレームに最も近い絶対値のタイムスタンプを持つ2入力目のフレーム
公式ドキュメント:
FFmpeg Filters Documentation : Options for filters with several inputs (framesync)
コマンド例
eof_actionの挙動について。以下のoverlay
フィルタは1ファイル目(黒)の映像に2ファイル目(白)の映像が上に載る。5番目以降のコマンド例はoverlay
フィルタの読み込み順を入れ換えている。
通常の使い方。2ファイル目(白)を最後まで読み込む。
ffmpeg -f lavfi -i color=c=black:d=2 -f lavfi -i color=c=white:d=4 -filter_complex [0][1]overlay,realtime -f sdl -
2ファイル目(白)を最後まで読み込む。上と同じ。
ffmpeg -f lavfi -i color=c=black:d=2 -f lavfi -i color=c=white:d=4 -filter_complex [0][1]overlay=eof_action=0,realtime -f sdl -
2コマンドとも2ファイル目(白)が開始2秒で止まる。
ffmpeg -f lavfi -i color=c=black:d=2 -f lavfi -i color=c=white:d=4 -filter_complex [0][1]overlay=eof_action=1,realtime -f sdl -
ffmpeg -f lavfi -i color=c=black:d=2 -f lavfi -i color=c=white:d=4 -filter_complex [0][1]overlay=eof_action=2,realtime -f sdl -
2秒まで1ファイル目(黒)でそれ以降は(黒)の最終フレームが4秒まで続く。
ffmpeg -f lavfi -i color=c=black:d=2 -f lavfi -i color=c=white:d=4 -filter_complex [1][0]overlay=eof_action=0,realtime -f sdl -
1ファイル目(黒)が2秒で止まる。
ffmpeg -f lavfi -i color=c=black:d=2 -f lavfi -i color=c=white:d=4 -filter_complex [1][0]overlay=eof_action=1,realtime -f sdl -
1ファイル目(黒)が2秒まで読み込み終わると2ファイル目(白)に切り替えてさらに4秒まで続く。
ffmpeg -f lavfi -i color=c=black:d=2 -f lavfi -i color=c=white:d=4 -filter_complex [1][0]overlay=eof_action=2,realtime -f sdl -
はじめまして。
いつもこちらの記事を参考にさせていただいています。
一箇所、公式ドキュメントに書いてある内容と誤認しうる箇所があったので、僭越ながらご指摘させていただきます。
> 両方のファイルを最後まで読み込む
endallオプションを使うと、「片方の入力が完了したら両方の入力を終わらせる」と公式ドキュメントには書いてあるようです。
> End both streams.
ffmpeg 4.2.2 にて公式ドキュメント通りの挙動を確認できましたので、念の為ご報告まで。
youkさん指摘ありがとうございます。
再度内容を確認し説明文を指摘されたように修正しました。
またなにか間違い、不明点などありましたら遠慮無く指摘くださいませ。