x264によりエンコードするときに、24fps/30fps混在動画やデ・インターレースに現在有効なのが、AviUtlの「自動フレームシフト」プラグインだ。
で、インターレースのMPEG2動画を自動フレームシフトによりVFR(可変フレームレート)のプログレッシブH.264/AVC動画へ、x264でエンコードしたとする。
一般的にMPEG2->H.264/AVCエンコードでは保存用画質を考慮するため、x264の設定は–profile highにしたり、–crfに低い値を使ったりして、High profileかつビットレートもそれなりに高く、levelも高いファイルが作られる。
PCで再生する分には特に問題はないのだが、問題はそれを再エンコードしたくなったときだ。
たとえば、iPodやWalkmanはH.264を再生できると言っても、baseline profile等のかなり低いprofileまでしか対応していないので、とても再生時負荷の大きいhigh profileの動画は再生することはできない。
また、動画サイズもせいぜい720×480ピクセル程度までであり、1280×720や、1920×1080等のHDファイルを再生することもできない。
となると、当然それらH.264ファイルをiPod用などに合わせて、解像度やprofileレベル、ビットレート等を落として再エンコードすることになるわけだが、ここで問題が生じる。
自動フレームシフトプラグインではVFRファイルが作られ、そのファイルは年中フレームレートが変化している。
そんなわけで、AviUtlやAviSynthでリサイズ等をして、さらにx264で再エンコードしたりしても、もともとのH.264ファイルのタイムコードとズレが生じるため、音ズレが生じてしまう(正確にはビデオ再生フレームレートがズレるため、音とズレが生じる)。
そこで、ここでは、そのようなときのために、音ズレが生じないようにiPod用動画に再エンコードする方法を紹介する。
[パターン1] H.264ファイルのprofileやビットレートを下げたりするだけで良い場合。
1. High profile、高ビットレートで作られたH.264ファイルを、source.mp4とする。これを、mp4boxにて、videoファイルとaudioファイルとにdemuxする。
mp4box.exe -single 1 source.mp4
これで、source_track1.mp4ファイルが作成される。これがsource.mp4のH.264ビデオのみを分離したファイルとなる。
mp4box.exe -single 2 source.mp4
これで、source_track2.mp4ファイルが作成される。これがsource.mp4のオーディオのみを分離したファイルとなる。
2.x264でビデオ・ファイルを再エンコードする。
x264.exe –profile baseline -o dest.mp4 source_track1.mp4
これで、x264により、baseline profileのdest.mp4に再エンコードされる。
ビットレート等を変更したい場合は、それらオプションも適宜追加すればよい。
source_track1.mp4にはVFRタイムコード情報が含まれているので、このままでVFRを維持したまま再エンコードが可能である。
3. mp4boxで再エンコードしたH.264ビデオdest.mp4とオーディオsource_track2.mp4をmuxする。
mp4box.exe -add dest.mp4 -add source_track2.mp4 -new ipod.mp4
これで、baseline profileに再エンコードされたH.264 VFRのipod.mp4ファイルが作成される。
[パターン2] AviUtlによりリサイズ等画像処理を施してからiPodビデオに再エンコードしたい場合
1.High profile、高ビットレートで作られたH.264ファイルを、source.mp4とする。まずはDtsEditによりmp4ファイルからタイムコード情報を抽出する。
dtsedit.exe source.mp4
これにより、source.mp4のタイムコード情報が抽出され、source.mp4_timecode.txtが作成される。
2.mp4boxにて、videoファイルとaudioファイルとにdemuxする。
mp4box.exe -single 1 source.mp4
これで、source_track1.mp4ファイルが作成される。これがsource.mp4のH.264ビデオのみを分離したファイルとな る。
mp4box.exe -single 2 source.mp4
これで、source_track2.mp4ファイルが作成される。これがsource.mp4のオーディオのみを分離したファイルとなる。
3.抽出したH.264動画ファイルをAviUtlによりリサイズ等フィルタ処理をし、拡張x264出力(GUI)により再エンコードする。
ここでは、AviUtlにより1280×720のH.264ファイルから、704×396にリサイズし、拡張x264出力(GUI)によりbaseline profileで再エンコードしたdest.mp4というH.264動画ファイルを作成している。
4. AviUtl+拡張x264出力(GUI)で再エンコードしたH.264ビデオdest.mp4とオーディオsource_track2.mp4をmuxする。
mp4box.exe -add dest.mp4 -add source_track2.mp4 -new ipod_temp.mp4
これによりbaseline profileに再エンコードされたH.264ファイルdest.mp4とオーディオファイルsource_track2.mp4がmuxされるが、作成されるipod_temp.mp4ファイルにはタイムコード情報が欠落しているため、このままでは音ズレが生じる。
5.dtseditにより動画に元のタイムコード情報を埋め込み、VFR化して音ズレを修正する(正確には、再生する可変フレームレート情報を元に戻す)
dtsedit.exe -tc source.mp4_timecode.txt -o ipod.mp4 ipod_temp.mp4
これにより、正確なタイムコード情報が埋め込まれ、リサイズ等のフィルタ処理もされ、そしてbaseline profileに再エンコードされたiPod用動画ファイル ipod.mp4 が作成される。