分離フィールドを交互に挟んだフレームにするseparatefields
フィルタ。フレーム数とフレームレートを2倍に、出力映像の縦解像度を半分にする。トップ、ボトムどちらのフィールドを先に出力するかは動画情報による。もし間違っているのならsetfield
フィルタを先に指定する。
基本コマンド
ffmpeg -i input -vf separatefields output
ffplay -i input -vf separatefields
分離フィールドを元の映像に戻すにはweave
フィルタを使う。
ffmpeg -i input -vf separatefields,weave output
ffplay -i input -vf separatefields,weave
各フィールドを縦に並べるにはselect
フィルタで偶数奇数に分割して、hstack
フィルタで縦に並べる。上のフレームが先に動けばトップフィールドファースト。下のフレームが先に動けばボトムフィールドファーストになる。
ffplay -i input -vf separatefields,select='1*mod(n-1\,2)+2*mod(n\,2)':n=2,vstack
上のままだとPTSが一致してないので揃えるならsetpts
フィルタを使う。
ffplay -i input -vf separatefields,select='1*mod(n-1\,2)+2*mod(n\,2)':n=2[1],setpts=PTS-STARTPTS[0v];[1]setpts=PTS-STARTPTS,[0v]vstack
il
フィルタでも同じことができる。PTSリセットが不要なのでこちらの方が扱いやすい。
ffplay -i input -vf il=l=d:c=d
元の映像を左に、フィールドを積み重ねた映像を右に並べる。
ffplay -i input -vf split[0],separatefields,select='1*mod(n-1\,2)+2*mod(n\,2)':n=2,vstack,[0]hstack
23プルダウンを逆テレシネする。
-vf "separatefields,shuffleframes=0 1 4 3 6 5 8 9 -1 -1,setfield=tff,weave,setpts=(N*1001)/(24000*TB),setparams=field_mode=prog" -r 24000/1001 -fps_mode vfr
末尾フレーム抜けを抑えるためにtpad
フィルタで末尾フレームをコピーして増やす。
-vf "tpad=stop=2:stop_mode=1,separatefields,shuffleframes=0 1 4 3 6 5 8 9 -1 -1,setfield=tff,weave,setpts=(N*1001)/(24000*TB),setparams=field_mode=prog" -r 24000/1001 -fps_mode vfr
公式ドキュメント:FFmpeg Filters Documentation : separatefields