Ffmpegを使用してビデオを(libx264ライブラリを介して)H.264に固定ビットレートでエンコードしようとしています。私は知っています、私は知っています、VBRがしばしば好まれます、しかしこの特定の仕事のために私はCBRを使う必要があります(それが毎秒非常に多くのキロバイトである限り;それはフレームあたり正確なキロバイトである必要はありません、afaik) 。テストに使用しているサンプルビデオはこちらからです: http://a1408.g.akamai.net/5/1408/1388/2005110403/1a1a1ad948be278cff2d96046ad90768d848b41947aa1986/sample_iTunes.mov.Zip (から http://support.Apple.com/kb/HT1425 )
MPEG-4 Video(コマンドffmpeg -i sample_iTunes.mov -b 819968 -minrate 819968 -maxrate 819968 out.mov
を使用)でビデオをエンコードすると、一定のビットレートを取得でき、ビットレートは期待どおりです。ビデオの仕様を読むQuickTime Inspector、それは844.94 kbit/sのデータレートを持っています。かっこいい。
ただし、コーデックをlibx264に変更すると、ビットレート要求が完全に無視されるようです。私が試しているコマンドは「ffmpeg -i sample_iTunes.mov -vcodec libx264 -vpre medium -b 819968 -vb 819968 -minrate 819968 -maxrate 819968 -bufsize 400000 test.mov
」です。しかし、QuickTime Inspectorを介してビデオの仕様を確認すると、254.74 kbit/sのデータレートが得られます。 WTF?それも近くではありません!
たくさんのパラメータを変更したり、さまざまなものを追加したりして、2日間グーグルで調べましたが、うまくいかないようです。 MainConcept H.264エンコーダーでビデオをエンコードすると、一定のビットレートを取得できますが、ffmpegで動作するにはこれが必要です。
誰かがFFmpegでCBRH.264エンコーディングを行う方法を理解するのを手伝ってくれるなら、私はあなたを永遠に愛します!
私もx264からCBRを取り出そうと取り組んできました。このブログ post by DarkShakariは非常に興味深いものでした。
これが、MPEGトランスポートストリームへの低遅延CBRビデオ用に私が持っているものです。
ffmpeg -i sintel_trailer-720p.mp4 -an -tune zerolatency \
-x264opts bitrate=4000:vbv-maxrate=4000:vbv-bufsize=166 \
-vcodec libx264 -f mpegts -muxrate 4000K -y trailer.ts
あなたが設定したx264開発者のブログによると:
最後に、ffmpegスイッチを-tunezerolatencyのx264に設定します。
お役に立てば幸いです。そして、誰かがこれに改善を持っているならば、私に知らせてください!
-nal-hrd cbr
の後に-bufsize 400000
を指定します。
これは手がかりかもしれません(ビットレートが設定されていると仮定します)「CBRはmaxrate ==ビットレートとbufsizeが設定されているときです」 http://ffmpeg-users.933282.n4.nabble.com/Does-constant- bitrate-exist-in-libx264-td2255554.html
bufsizeは、「受信クライアント」の最大バッファサイズであると想定されています。
わかりました、それで私は問題の一部を見つけたかもしれないと思います。 -bufsizeをデータレートより大きくすると、問題は解決したようです。もちろん、それがエンコーディングであるかどうかはわかりませんreal CBRですが、Quick TimeInspectorが読み取るデータレートは現在のように見えます。