さて avi の問題点も把握したところで, やっと mkvtoolnix に 「allow_avc_in_vfw_mode」なんてモードがある理由も把握できたような気がする昨今. 「1フレームに 2個押し込めつつヌルのフレームを挿入」とか 「必ず 1フレームずつずれる」とか, ちょっと齧っただけでもとてつもなく美しくない策を弄するしかないあたり, きっと avi フォーマットってのは世界の各地でこよなく憎まれていることであろう.
ただ上記の mkvtoolnix の出力によると, 「VFW モードの AVC を Matroska コンテナに押し込めるのは未定義. いったん MP4Box で洗ってから native モードで入れなおしな」と出るので, まぁこちらとしては初めから mp4 にしようとしてるわけだが, するってーと MP4Box ってのは「きれいな」H.264 ファイルにして格納してくれるのかしらね?
早速 MP4Box を使ってみるわけだが, まぁ Windows 上だと GUI とかもちろん存在するわけで, YAMB という MP4Box のフロントエンドがしっかりあるわけですな.
ちなみに以下のような手順になる.
- PV3 で録画.→ .dv (EARTH DV 形式)
- TMPGEnc4XP で CM カット& x264 出力 → .avi (H.264/VFW + MP3)
- MP4Box で raw video と raw audio を extract → .h264 + .mp3
- MP3 を AAC に変換 → .aac
- MP4Box で .h264 + .aac を .mp4 にエンコード → .mp4
うわぁ面倒くさいw
こういう面倒なのはバッチファイルにしてコマンドラインでやってしまうに限るわけだが, うちの環境の場合これらを行なう場所がネットワークドライブ上なので, 数 GB のファイルをいちいちネットワーク横断させないといけなくて, 大変に遅くなってしまう. そこで,どうせならこれらの作業すべてファイルサーバ上でやってしまおう,と.
用意するものは以下の通り.
- MP4Box ( ports: multimedia/gpac-libgpac )
- FAAC ( ports: audio/faac )
- mpg123 ( ports: audio/mpg123 )
作業はこんな手順で.
MP4Box -aviraw audio infile.avi MP4Box -aviraw video infile.avi mpg123 -w infile_audio.wav infile_audio.mp3 faac -q 100 -b 160 -c 48000 --mpeg-vers 4 --obj-type Main infile_audio.wav MP4Box -fps 29.97 -add infile_video.h264 -add infile_audio.aac infile.mp4
うーん……TMPGEnc4XP の avi 出力の時点で AAC にエンコードできれば手順がひとつなくせるのだけどなぁ. あと MP4Box の入力ファイル名に日本語(UTF8)が使えないぞ.どーなってんだ.
とまぁ,ここまでやって, なんか途中の MP4Box -aviraw video で抽出する H.264 データのファイルサイズがおかしいことに気づいた. 元の AVI ファイルを作る際のパラメタが悪くて変なデータになって途中で切れているのでは, とか予想して,パラメタ変更してエンコ仕込んで寝よう.
動画ファイルいじってたらまる 1日潰してしまったが, いろいろと知識が増えたからまぁよしとしよう……