問題:Bフレームを使うとQTP7proで加工不能
再生はOK。
冒頭に白紙フレームが1枚入る。
冒頭に白紙フレームが1枚入る。
原因:MEncoderの "vfw mode"
冒頭の白紙は、"Delay Frame"。AVIにBフレームを入れる為の裏技(hack)。
Xvidの為に編み出されたものらしい。
DivX社の場合、これとは別種の"Packed B frame"とか、"DivX GOP"などと呼ばれる裏技を使う模様。
いずれも、本来Bフレームを入れる事が不可能なAVIでBを扱う為のもの。
AVI出力からスタートしたMEncoderを使う限り、B使用時の"Delay Frame"の挿入は不可避。
Xvidの為に編み出されたものらしい。
DivX社の場合、これとは別種の"Packed B frame"とか、"DivX GOP"などと呼ばれる裏技を使う模様。
いずれも、本来Bフレームを入れる事が不可能なAVIでBを扱う為のもの。
AVI出力からスタートしたMEncoderを使う限り、B使用時の"Delay Frame"の挿入は不可避。
対策
1) Bを使わなければ"Delay Frame"は入らず、「問題」は起きない。
2) Bを使った場合、完成後の.mp4から、冒頭の1フレームをカット。
例:QTCoffeeで.mov化、QuickTime Player Proで「そのまま」.mp4書き出し
$ muxmovie -startAt 00:00:00.06 -self-contained "ffmpegX製B付きx264+aac.mp4" -o "フルパス/出力ファイル名.mov"
- カットするフレーム数は指定した秒数に応じて調節される。23.976fpsの場合、1フレームの持続時間は約0.0417sec。
- "-self-contained"を省くと参照形式movになり、速い。
- "-o フルパス/出力ファイル名.mov" を省くとデスクトップに"out.mov"ができる。
- なお、"-mp4" を使うと.mp4出力を試行するが、手許では未成功。
- 得られた.movを、QuickTime Player Proで「そのまま」.mp4書き出し。
以上で、QTP7proで再生・加工可能なx264(B使用)+aac.mp4になる。
(*ffmpegでの映像・音声コピーでの.mp4出力は未成功)
(*ffmpegでの映像・音声コピーでの.mp4出力は未成功)
3) 音ズレの対処
QTP7proで.movから映像のみ抽出し、別途抽出した音声を追加する。「ムービーに追加」か「選択範囲に調整して追加」かは、ムービーの長さにより異なる。短いものは前者、長いものは後者が適しているようだ。
MovieVideoChartによる確認
MovieVideoChartというツールで.mp4内部のフレーム構造を視覚化できる。このツールについてはMyCometG3さんのこの記事を参照されたい。
その他
- MEncoderは、PTSを考慮した作りになっていないとの情報もある。事実なら、B付きAVC.mp4出力が安定化する見込みは薄い。
- ターミナルでx264のオプションをいろいろ試す場合、PやBの参照フレーム化など、Xvid等に比べて激しく複雑なオプションも使えるため、AVIからの抽出には疑問が残る。最初からrawvideo(.264)で吐くのが安全だろう。
- "Delay Frame"など、AVIにBフレームを入れる技の詳細は以下を参照。
- MPEG-4のB- frameを AVI/VFW に入れるハッキング(MPlayer and MEncoder on MacOSX)