index

2007年 1月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
2007年 2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        
2007年 3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

アレ

x264 の VFW と CLI でほぼ同じオプションで   ▽20070207a #コンピュータ #動画圧縮

っていう.

片方は 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 で行こうって路線でいいかなーと思いつつ.

index