レート制御(1):レート制御モード(x264、x264、vpx)を理解する

レート制御(1):レート制御モード(x264、x264、vpx)を理解する

「レートコントロール」とは何ですか?これは、エンコーダがビデオの各フレームに割り当てられているビット数を決定するためのツールです。


ビデオエンコーディング(損失)の目標は、ビデオ品質を可能な限り維持しながら、可能な限り多くのビット(レート)を節約することです。レート制御は、コードのレートと品質のバランスを取るための重要なツールです。

ビットレートを制御する方法はたくさんあります。「1パス」、「2パス」、「CBR」、「VBR」、「VBVエンコーディング」、「CRF」などについて学習します。

以下は、さまざまなレート制御モードの簡単な例であり、エンドユーザーとしていつどのモードを使用する必要があるかを示しています。RDOの具体的な詳細はここには含まれていないことに注意してください。

はじめに:可変ビットレートと固定ビットレート

多くの人、特にMP3の時代を経験した人は、オーディオエンコーダに精通しているかもしれません。ただし、CDの開発履歴から、最初に一定ビットレート(Constant Bitrate、CBR)エンコーディングを使用し、その後、可変ビットレート(Variable Bitrate、VBR)を開発しました。VBRは、与えられた制限の下で使用される最小のビットで最高の品質が維持されることを保証できます。

簡単に言うと、VBRを使用すると、エンコーダーはエンコードが難しい場合はより多くのビットを使用し、エンコードが簡単な場合はより少ないビットを使用できます。コーディングにとって「コーディングが難しい」と「コーディングが簡単」とはどういう意味ですか?一般に、動きの多いビデオにはより多くのビットが必要であり、空間の詳細が豊富でテクスチャが複雑なビデオもエンコードが難しくなります。

コーディングシナリオは何ですか?

選択するビットレート制御モードは、多くの場合、アプリケーションのシナリオによって異なります。通常、次の一般的なシナリオがあります。

  1. アーカイブ:ファイルを圧縮して、ハードディスクまたはネットワークディスクに保存します。現時点では、エンコードされたファイルの品質をできるだけ良くし、ビットレートをできるだけ低くする必要がありますが、圧縮ファイルの特定のサイズは気にしません。

  2. ストリーミング:ネットワークを介してファイルを転送したい。これは、ファイルのビットレートがネットワーク帯域幅を超えないようにするためです。または、異なる帯域幅で異なるビットレートのファイルを提供する必要があります。(たとえば、ネットワークが良くないときにオンラインでビデオを見るときは、ビデオを高解像度から低解像度に切り替えます)。

  3. ライブストリーミング:2と同様ですが、できるだけ早く(リアルタイムで)エンコードする必要があり、ライブストリーミング中にビデオコンテンツを事前に予測することはできません。

  4. デバイス指向のエンコード:たとえば、ファイルをDVDまたはBlu-rayディスクに保存し、ファイルを特定のサイズにエンコードしたい(ディスクスペースを占有するだけ)。

使用シナリオを理解すると、レート制御モードを選択するのに役立ちます。

レート制御モード

以下ではffmpegのx264x265、およびlibvpxエンコーダーに基づくさまざまなレート制御モードを紹介します詳細なパラメータの説明は、ffmpegのドキュメントにあります

注:エンコーダーはデフォルトではビットを「詰め込み」ません。つまり、単純なフレームをエンコードする場合、実際に使用されるビットは設定されたビットよりも低くなる可能性があり、エンコーダーはビットを無駄にして設定されたビットを強制しません。

固定QP(一定QP、CQP)

量子化パラメータ(QP)は、圧縮サイズを制御します。QPが大きいほど、圧縮率が高くなり、品質が低下します。QPが小さいほど、圧縮率が低くなり、品質が高くなります。H.264およびH.265では、QPの範囲は0〜51の整数です。x264およびx265でエンコードするように固定QPを簡単に設定できます。注:libvpxには固定QPモードはありません。

ffmpeg -i <input> -c:v libx264 -qp 23 <output>
ffmpeg -i <input> -c:v libx265 -x265-params qp=23 <output>

QPの原理について詳しくは、このチュートリアルを参照してください

やりたいことが正確にわからない場合は、このモードを使用ないでくださいCQPモードを使用すると、シーンの複雑さに応じてビットレートが大きく変動し、実際のビットレートを制御することはできません。

利点:ビデオコーディングの研究。

短所:他のほとんどすべてのアプリケーション。

平均ビットレート(平均ビットレート、ABR)

以下は、特定のエンコーダーの目標コードレートであり、エンコーダーはこのコードレートを達成する方法を計算します。

ffmpeg -i <input> -c:v libx264 -b:v 1M <output>
ffmpeg -i <input> -c:v libx265 -b:v 1M <output>
ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M <output>

このモードの使用は避けてください。x264の主な開発者の1人は、絶対に使用しないくださいと述べましどうして?エンコーダーはまだエンコードされていないものを認識していないため、特定のビットレートを達成する方法を推測する必要があります。これは、特に最初は、ビットレートを絶えず変更する必要があることを意味します。HASタイプのストリームの場合、これにより、短期間に品質に大きな変動が生じる可能性があります。

ABRは定率モードではなく、可変レートモードです。

利点:高速コーディング。

短所:他のほとんどすべてのアプリケーション。

一定ビットレート(CBR)

nal-hrdを設定することにより、エンコーダーに特定のビットレートを維持させることができます。

ffmpeg -i <input> -c:v libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M <output>

mp4はNALパディングをサポートしていないため、出力ファイルはMPEG-2TSファイルである必要があります。このモードは単純なビデオの帯域幅を浪費しますが、ストリーム全体のビットレートが一定であることを保証することに注意してください。ここで他の使用例見つけることができます。一部のアプリケーションではこのモードを使用するのが理にかなっていますが、可能な場合はビットレートを低くしたい場合があります。

VP9にCBRを使用するコマンドは次のとおりです。

ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -maxrate 1M -minrate 1M <output>

利点:一定のビットレートを維持します;ビデオストリーミング(例:Twitch)。

短所:ドキュメントストレージ、帯域幅が効率的に使用されるシナリオ。

2パス平均ビットレート(2パスABR)

エンコーダーが2回(またはそれ以上)エンコードできる場合は、将来エンコードされないものを事前に見積もることができます。最初のエンコーディングパスでコーディングコストを計算し、2番目のエンコーディングパスでビットをより効率的に使用できます。このモードは、特定のビットレートで出力品質を最高にします。

x264の場合:

ffmpeg -i <input> -c:v libx264 -b:v 1M -pass 1 -f null /dev/null
ffmpeg -i <input> -c:v libx264 -b:v 1M -pass 2 <output>.mp4

x265の場合:

ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=1 -f null /dev/null
ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=2 <output>.mp4

VP9の場合:

ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -pass 1 -f null /dev/null
ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -pass 2 <output>.webm

これは、ストリームをエンコードする最も簡単な方法です。ただし、注意すべき点が2つあります。最終結果の品質がわからないため、複数の実験を実行して、特定のビットレートが複雑なコンテンツをエンコードするのに十分であることを確認する必要があります。もう1つのポイントは、このモードのビットレートにローカルピークがある可能性があることです。これは、送信容量がクライアントの受信容量を超える可能性があることを意味します。ビットレートの選択については、YouTubeの推奨設定を参照できますが、これらは高品質の写真をアップロードするために最適化されていることに注意してください。実際には、より低いビットレートを選択できます。

利点:特定のコードレートに到達する、デバイス指向のコーディング。

短所:高速エンコーディング(ライブストリーミングなど)が必要な場合。

一定品質(CQ)/一定レート係数(CRF)

CRFは、ビデオストリーム全体の品質を一定に保つことができます。

ffmpeg -i <input> -c:v libx264 -crf 23 <output>
ffmpeg -i <input> -c:v libx265 -crf 28 <output>
ffmpeg -i <input> -c:v libvpx-vp9 -crf 30 -b:v 0 <output>

H.264およびH.265では、CRFは0〜51の整数です(QPと同様)。x264のデフォルト値は23で、x265のデフォルト値は28です。CRFが6増加または減少すると、コードレートが半分または2倍になります。VP9の場合、CRFの範囲は0〜63で、推奨値は15〜35です。

このモードの欠点は、最終ファイルのコードレートとコードレートの変動を判別できないことです。

利点:ドキュメントの保存;可能な限り最高の品質を実現します。

短所:ストリーミングメディア。特定のビットレート(またはファイルサイズ)が必要です。

VBV(ビデオバッファリングベリファイア)

ためVBVは、符号化率が特定の最大値を超えないことを保証することができます。これはストリーミングに非常に役立ちます。これで、約束したよりも多くのビットを送信しないことを確認できます。VBVは、2パスVBR(両方のパスで使用)またはCRFで使用できます。

ffmpeg -i <input> -c:v libx264 -crf 23 -maxrate 1M -bufsize 2M <output>
ffmpeg -i <input> -c:v libx265 -crf 28 -x265-params vbv-maxrate=1000:vbv-bufsize=2000 <output>

VP9にも同様のモードがあり、VBVとは呼ばれませんが、原理は同じです。

ffmpeg -i <input> -c:v libvpx-vp9 -crf 30 -b:v 2M <output>

ライブストリームでVBVを使用していて、エンコードプロセスを高速化したい場合は、-tunezerolatencyおよび-preset超高速オプションを使用できます。これにより、エンコードを高速化するために品質がいくらか犠牲になります。

制限されたABR-VBVでこのモードを使用します。

ffmpeg -i <input> -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M -pass 1 -f null /dev/null
ffmpeg -i <input> -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M -pass 2 <output>

x265の場合:

ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=1:vbv-maxrate=1000:vbv-bufsize=2000 -f null /dev/null
ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=2:vbv-maxrate=1000:vbv-bufsize=2000 <output>

VP9の場合:

ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -maxrate 1M -bufsize 2M -pass 1 -f null /dev/null
ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -maxrate 1M -bufsize 2M -pass 2 <output>

bufsizeを設定する方法は?それはあなたが期待するビットレートの変動に依存します。良い設定方法は、bufsizeを最大レートの2倍に設定することです。クライアントキャッシュが比較的小さい場合は、bufsizeをmaxrateに等しく設定します。コードストリームのビットレートを制限する場合は、bufsizeを最大レートの半分以下に設定します。

利点:帯域幅が制限されたストリーミングメディア、ライブストリーミング(CRF、1パスを使用)、VoDストリーミング。

短所:ドキュメントの保存。

比較実験

以下は、さまざまなレート制御アルゴリズムの比較です。使用ビッグバックバニー鋼の涙シーケンスを、各シーケンスは、3つのセグメント(各セグメントが30秒である)インターセプト。レート制御モードが異なることを除いて、libx264エンコーダーを使用し、他はデフォルト設定です。さまざまなターゲットコードレート(750、1500、3000、7500kbit / s)と最大コードレート(VBVの場合)およびQP / CRF値(17、23、29、35)を設定します。

この実験では不十分であることに注意してください。より多くのシーケンスを試し、さまざまなエンコーダーを使用できます。

次の図は、さまざまなレート制御モードを使用した結果です。左側は3000kbit / sの結果であり、右側は7500kbit / sの結果です。他の2つの結果の画像は類似しており、ここには表示されません。各行は、さまざまなモードでのコードストリームのコードレートの変化を表しています。

BBB1から、ABR(青緑色の線)とABR + VBV(紫色の線)が最初のビデオの複雑さを誤って推定していることがわかります。実際、BBBビデオの最初は比較的スムーズで、動きは比較的小さく、確実にするために必要なビットはわずかです。品質。2パスモードは最初に複雑さを正しく推定し、最初は低ビットレートを使用して帯域幅を節約しました。ビデオの最後の1/3にある豊富な空間の詳細により、2パスモードは多くのビットを消費し、最初の節約を上回ります。

BBB2ビデオでは、さまざまなモードが実際には予想よりも優れています。ただし、2パスには他のモードよりも変動が大きくなります。

 

以下はCQPとCRFの実験状況です。17と23のCRF / CQPの結果のみをここに示します。CRFの方がうまく機能します。

 

以下は、さまざまなビットレートでのCRF + VBVの結果です。CRFに適したターゲットビットレートと最大ビットレートを選択するには、通常、複数回の試行が必要であり、ビデオソースに完全に依存します。

 

レート制御モード(x264、x265、vpx)の理解からの翻訳

興味のある方は、WeChatパブリックアカウントのビデオコーディングに従ってください

 

おすすめ

転載: blog.csdn.net/Dillon2015/article/details/105825814