ffmpegで1からインターレースなmpeg2を作る方法
インターレースのmpeg2をffmpegを使って作る方法。
既存の動画を変換…するのではなく、自分で準備した連番画像から動画を作る。1フィールドごとに好きな画像を指定出来る。
通常のプログレッシブな動画は1フレームが最小単位だが、インターレースではフィールドが最小単位となる。
トップフィールド・ボトムフィールドを2つ合わせて1フレーム。
TV放送の59.94iというのは、1秒間にフィールドが59.94枚ある事を指す。
フィールドが2つで1フレームなので、フレーム単位では29.97fps。
誤差なのでこの記事では以下60iとする。
手順 1
元の画像を作る。1秒の動画を作りたい場合は、フィールド単位で60枚の画像を準備する。
1フレーム目のトップフィールド→1フレーム目のボトムフィールド→2フレーム目のトップフィールド の順番で作る。
ボトムフィールドはトップフィールドから1ピクセル下にズラした画像を作ること。
1920x1080の解像度のmpegを作りたいので、1フィールドは高さが半分になる。
つまり1920x540 の横長な画像を作る。
画像はfield-0000.png
から始まる連番とする。
手順 2
ffmpegのコマンドは順番にも意味があるので、コマンドの順番を入れ替える時は動作確認をする事。
以下のコマンドを入力。
ffmpeg -y -r 60 -i "field-%04d.png" -c:v mpeg2video -qscale:v 2 -vf tinterlace=0 -flags +ilme+ildct output.mpeg
パラメータの解説
-
-y
上書きを許可する。出力されるoutput.mpeg
のファイルが既に存在している時は上書きの確認を求められるが、それを常に許可にする。不要であれば削除しても問題ない -
-r 60
動画のフレームレート。フィールド単位のfpsを指定する。厳密に59.94fpsにしたい場合は-r 60000/1001
と割り算を書く。 -
-i "field-%04d.png"
入力ファイル名。連番は0から始まる必要がある。桁数を合わせるためにfield-1000.png
から始めると読み込むことは出来ない。 -
-c:v mpeg2video
動画コーデックがmpeg2videoであるという指定。 -
-qscale:v 2
動画の画質。mpeg2は非圧縮のオプションは無いのでどうしても圧縮がかかるので、クオリティベースの画質を設定。少ないほうが高画質。検証用なので高画質にした。不要であれば取り除いても良い。 -
-vf tinterlace=0
動画をインターレースにする要。1フレームごとにトップフィールド→ボトムフィールド→トップ と繰り返す動画を作る。日本語の解説 や 公式ドキュメントを参照。 -
-flags +ilme+ildct
詳細不明。flagsにilme
とildct
を付与するという意味。ffmpeg --help full
で確認出来るコマンドによると以下の通り-
ilme
は「interlaced motion estimation」 -
ildct
は「use interlaced DCT」DCTとは離散コサイン変換。非可逆圧縮の方式。
-
-
output.mpeg
出力ファイル名。拡張子も見ているようなので、mpegから変えない事を推奨。
これで1フィールド単位で好きな画像のmpeg2ファイルを作る事が出来た。
インターレースのmpeg2をフィールド単位で画像化する
2つのコマンドがある。1つの動画から、トップフレームを抽出するコマンドと、ボトムフレームを抽出するコマンドを別々に実行する。
ffmpeg -y -i input.mpeg -vf "il=chroma_mode=deinterleave:luma_mode=deinterleave,crop=iw:ih/2:0:0" filename-%04d-1-top.png
ffmpeg -y -i input.mpeg -vf "il=chroma_mode=deinterleave:luma_mode=deinterleave,crop=iw:ih/2:0:ih/2" filename-%04d-2-btm.png
パラメータの解説
-
il=chroma_mode=deinterleave:luma_mode=deinterleave
- 入力した動画をフィールドごとに上下二分割するコマンド。デフォルトだとフィールドを混ぜて出力するが、deinterleaveオプションで上下二分割に出来る。彩度の上下分割と輝度の上下分割をそれぞれ指定。日本語記事 参考。
-
crop=iw:ih/2:0:0
、crop=iw:ih/2:0:ih/2
- 上下二分割された動画の、上半分だけをpngで保存するか、下半分を保存するかのオプション
全体的にこのサイトが非常に参考になった。
Discussion