FFMPEG / x264: シングル パス: 開始時間のビットレートを上げるにはどうすればよいでしょうか?

FFMPEG / x264: シングル パス: 開始時間のビットレートを上げるにはどうすればよいでしょうか?

VBV サイズを指定してシングル パス モードを使用する場合、libx264 は、おそらく証拠不足 (またはバグ) のために、最初にビットレートを「サンドバッグ」します。(これは、シングルパスエンコードで初期ビットレートが高すぎるという問題を扱ったこの質問に対する皮肉なフォローアップです。サンズVBV仕様

詳細については、下部のビットレート グラフを参照してください。正規化の前に、最初の低下とそれに続く過剰補正 (「まだビットが残っている!」) に注意してください。これは 2 パス ソリューションで修正されていることに注意してください。これらの 2 つのグラフに最初の I フレームがないのは、ツールのバグである可能性があります (最初の I フレームの PTS 値は 0.15 秒です)。

このエフェクトにより、各セグメントの開始時に高品質のビートが得られるため、長いアセットの「分割、エンコード、再構築」の並列処理が防止されます。

これはデュアル パス エンコーディングによって修正できますが、ライブ ストリームには適さないソリューションです (ただし、並列化する場合はデュアル パス エンコーディングのコストがかかる可能性があります)。

私が望む解決策は 2 つあります。どのような支援でも大歓迎です。

  1. 出力を生成する前にエンコーダに多くのフレームを最初に保持するように指示するシングルパスソリューション。これにより、初期のサンドバッグ効果を軽減します。

  2. 限定的な 2 パス エンコーディングを「パイプ」として実行する方法: 完全な 2 パス エンコーディングをパイプとして実行するのはもちろん無意味ですが、パス フィードバック期間が 1 秒程度の「マイクロ パス」を使用することは可能です。これは、このような短い効果を回避するためのシングル パス ソリューションよりもはるかに理想的ではありませんが、(1) が不可能な場合は許容されます。

    • シングル パス ビットレート グラフ: 最初の「サンドバッグ ディップ」に注目してください。次を使用して生成されました:

ffmpeg -i 1080-60fps.mp4 -vf "スケール=1200:720" -b:v 1000k -bufsize 1000k onepass.mp4

ここに画像の説明を入力してください

  • 2 パス ビットレート グラフ: これはほぼ理想的な結果です。この最終形式は必ずしも必要ではないことに注意してください。最初のサンドバッグを回避するだけで十分です。次を使用して生成されます:

ffmpeg -i 1080-60fps.mp4 -vf "スケール=1200:720" -b:v 1000k -pass 1 -f mp4 /dev/null

ffmpeg -i 1080-60fps.mp4 -vf "スケール=1200:720" -b:v 1000k -pass 2 twopass.mp4

2パスビットレートグラフ:これが期待される結果です

  • シングルパスエンコードの最初のフレームのセクション

ここに画像の説明を入力してください

  • 2パスエンコードの最初のフレームのセクション

ここに画像の説明を入力してください

関連情報