2以上の映像をPTSに即して連続した映像で出力するinterleave
フィルタの使い方。フィルタを使ってエンコードするときは出力オプションに-rで動画のフレームレートを指定する。select
フィルタを併用するとシーンチェンジやフレームタイプ別にフィルタを使い分けられる。
関連フィルタ:
フィールドを足したり引いたりする tinterlace
ピクチャーをインターリーブ、デインターリーブするil
基本コマンド
select
フィルタで偶数と奇数フレームに分けて合わせている。適宜null
フィルタを変更。このコマンドでは何も変化しない。
ffmpeg -i input -vf "split[0][1];[0]select='mod(n-1,2)',null[0a];[1]select='mod(n,2)',null[1a];[0a][1a]interleave=2" -r 24000/1001 output
ffplay -i input -vf "split[0][1];[0]select='mod(n-1,2)',null[0a];[1]select='mod(n,2)',null[1a];[0a][1a]interleave"
上と同じ方法を2出力にするとコマンドが短くなる。
ffplay -i input -vf "select='1*mod(n-1,2)+2*mod(n,2)':n=2,interleave"
ffplay -i input -vf "select='1*mod(n-1,2)+2*mod(n,2)':n=2[0][1];[0][1]interleave"
select
フィルタでフレームタイプ別にフィルタを当てる。Iフレームにはsab
フィルタ、Pフレームにはbm3d
フィルタ。Bフレームにはnlmeans
フィルタを当てる。
ffplay -i input -vf select='1*eq(pict_type,I)+2*eq(pict_type,P)+3*eq(pict_type,B)':n=3[i][p][b];[i][p][b]interleave=3
ffplay -i input -vf select='1*eq(pict_type,I)+2*eq(pict_type,P)+3*eq(pict_type,B)':n=3[i][p][b];[i]sab[i0];[p]bm3d=1[p0];[b]nlmeans[b0];[i0][p0][b0]interleave=3
boxblur
フィルタをランダムに当てる。n=2で2出力している。
ffplay -i input -vf select='if(gt(random(0),0.2),1,2)':n=2[1],boxblur=2:2,[1]interleave
- 強力な2次元デノイザ sab
- 非局所平均のデノイザ nlmeans
- 1フレームに複数のフレームを表示する tile
- ブロックマッチングアルゴリズムでデノイズするbm3d
- 特定の映像フレームや音声サンプルを出力する select, aselect
公式ドキュメント:FFmpeg Filters Documentation : interleave, ainterleave
オプション
入力数の指定
既定値:2
範囲:1 から INT_MAX まで
ファイルの時間が異なるときにどちらの出力を優先するか
- 0, longest:長い方。既定値
- 1, shortest:短い方
- 2, first:最初に入力した方