っていう.
片方は TMPGEnc + x264vfw で出力,他方は TMPGEnc + Huffyuv で出力したものを x264cli で圧縮.オプションは VFW 版の出力に埋め込まれるデータを元にほぼ(というか完全)同じになるように設定.
……で.まぁサイズから何からほとんど同じになるのはいいとして,x264 AVI 出力時間と Huffyuv 出力時間 + x264cli エンコ時間,を比べると後者の方が 1h くらい長い.Huffyuv 出力は時間かかってるなぁ.サイズでかいからなぁ.
で,エンコ結果を比べてみると,I/P/B 比率だとか,B の 1スライスのサイズだとか,ほとんど完全に一致しているね.ということは,VFW でも B フレーム使ってアレコレとかきちんとやってるってことかしら.ことなんだろうな.当然っちゃ当然なんだけど.
ただ VFW 版のが何故か 4フレーム短くなってる.って「何故か」とか書いてるけど説明はつく.
bframes=3 でエンコしているのだけど,これだと最初の B フレームを出力する前に最低でも 2フレーム先まで読まないとデータが確定できない.
VFW の「1 in, 1 out」の法則に対応するための方法のひとつとして,「B が確定できるまでダミーフレームを吐いておく」というやり方があって,この場合は 2フレーム分をダミーで吐く,
んでずっと 2フレーム遅れでデータを吐き続けて,本来なら最後に 2フレーム余分に出したいところなんだけど,「1 in, 1 out」により最後の 2フレームは出力されることなく /dev/null 行き.
で,マルチスレッドのスレッド数 2 なので,合計 4フレームが消失っと.うん,筋は通るな.
……そうすっと,VFW 版は音声が 4フレームずれて記録されてるんだろうか? サンプルに使ったのが「新・刑事コロンボ」の録画で,これ音声が吹替えなので,リップシンクとかほとんどあてにならない.これはサンプル選びの失敗といえるw
なので,ひとまず .mp4 ファイルを音声波形表示付きでフレーム単位で比較してみたが,きちんと合ってる模様.てことはつまり,(1) TMPGEnc が VFW からのダミーフレームを出力しない,(2) MP4Box がダミーフレームを(ry,(3) ffdshow が(ry,のどこかでうまいこと処理されてるってことなのかしらん?
まぁそういうわけで,結局 CLI 版と VFW 版の出力の違いは,最後の最後で 4フレームが失われるかどうかって点のみな模様.
これねぇ……気にする人は気にするんだろうけど.4フレームというと,今回のコロンボは 24fps なので約0.17秒.まぁコロンボはラスト 1秒前くらいに暗転なんで気にならない.
普通の番組なら 30fps ということは 0.13秒.あたしの録画する番組のほとんどはモータスポーツ番組で,これが問題になりそうなものは今までにほとんど見たことない.ありそうといえば,カメラ切れる前に川井チャンが何か叫ぶ「F1GPニュース」くらいなものかw
うーん.うーん.とりあえず当面は VFW で行こうって路線でいいかなーと思いつつ.