web-dev-qa-db-ja.com

FFmpegでH.264CBRビデオをエンコードする

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エンコーディングを行う方法を理解するのを手伝ってくれるなら、私はあなたを永遠に愛します!

12
Cornstalks

私も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開発者のブログによると:

  • vbv-maxrate =ビットレート= B =ターゲットビットレート
  • vbv-bufsize = B/fps(このビデオの場合は24 fps)

最後に、ffmpegスイッチを-tunezerolatencyのx264に設定します。

お役に立てば幸いです。そして、誰かがこれに改善を持っているならば、私に知らせてください!

7
mevatron

-nal-hrd cbrの後に-bufsize 400000を指定します。

4
Timothy003

これは手がかりかもしれません(ビットレートが設定されていると仮定します)「CBRはmaxrate ==ビットレートとbufsizeが設定されているときです」 http://ffmpeg-users.933282.n4.nabble.com/Does-constant- bitrate-exist-in-libx264-td2255554.html

bufsizeは、「受信クライアント」の最大バッファサイズであると想定されています。

0
rogerdpack

わかりました、それで私は問題の一部を見つけたかもしれないと思います。 -bufsizeをデータレートより大きくすると、問題は解決したようです。もちろん、それがエンコーディングであるかどうかはわかりませんreal CBRですが、Quick TimeInspectorが読み取るデータレートは現在のように見えます。

0
Cornstalks