12

一定のビット レートで (libx264 ライブラリ経由で) ffmpeg を使用してビデオを H.264 にエンコードしようとしています。VBR が好まれることが多いのはわかっていますが、この特定のジョブでは CBR を使用する必要があります (1 秒あたりのキロバイト数が非常に多い限り、フレームあたりの正確なキロバイト数である必要はありません)。 . 私がテストに使用しているサンプル ビデオは、次の場所にあります。 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 でした。なんてこと?それも近くありません!

非常に多くのパラメーターを変更し、さまざまなものを追加しようとしましたが、これをグーグルで2日間調べましたが、うまくいかないようです. ビデオを MainConcept H.264 エンコーダーでエンコードすると、一定のビットレートを取得できますが、ffmpeg で動作させるにはこれが必要です。

誰かが FFmpeg で CBR H.264 エンコーディングを行う方法を理解するのを手伝ってくれるなら、私はあなたを永遠に愛します!

4

4 に答える 4

7

私も x264 から CBR を取得しようと取り組んできました。Dark Shakari によるこのブログ投稿は非常に興味深いものでした。

これは、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)

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

お役に立てば幸いです。そして、誰かがこれを改善した場合は、私に知らせてください!

于 2011-10-14T20:15:12.563 に答える
0

わかりました、それで私は問題の一部を見つけたかもしれないと思います。-bufsizeをデータレートより大きくすると、問題が解決したようです。もちろん、それが実際のCBRをエンコードしているかどうかはわかりませんが、QuickTimeInspectorが読み取るデータレートは今のところ見えます。

于 2011-08-27T14:49:54.700 に答える
0

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

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

于 2012-07-12T20:29:44.570 に答える