top of page

XSplitの品質、VBVバッファー、プリセット設定

Melvin Dichoso
2016年3月2日
読了時間: 7分

XSplitはx264エンコーダーを使っています。品質パラメーターを除けば、タイトルにあるパラメーターはx264 wikiの説明と同じ意味です。詳しくはこちらをご覧ください。


品質

品質は異なるので、まずその点を説明しましょう。x264では品質をCRF係数、またはConstant Rate Factorと呼びます。エンコーダーはCRF=0(ロスレス)からCRF=51(ひどい品質)までの値を受け付けます。

動画ストリームのエンコードには、通常さまざまなレート制御方式を使えます。XSplitは品質ベースのレート制御を使い、ビットレートの上限(vbv-maxrate)を守りながら、エンコードした動画の特定の品質を目標にします。品質によって必要なビットレートには大きな差があります(線形ではありません)。ほとんどの人はCRF=18とCRF=0の違いさえ見分けられないでしょう。ただしCRF=0の録画はハードディスクの容量をかなり使います。

XSplitでは、配信向けに0から10までの一般的な品質設定を使い、10が最高品質です。品質10はCRF=25に相当し、通常は非常に良い品質です。一方、品質0はCRF=35に相当し、場合によっては許容できますが、見栄えはあまりよくありません。

議論の余地はありますが、XSplitでは独自の品質パラメーターを使い、内部でCRFに変換するのが慣例です。人々は品質を理解し、0から10の範囲で後者が最高という尺度に慣れていると私たちは考えています。ただし、その道を進みたい人はすべて簡単にカスタマイズできます。

ローカル録画では、XSplitが品質設定だけを提示し、特定のvbv-maxrateやvbv-bufferを定義していないことに気づくでしょう。ローカル録画では帯域幅の使用量を気にしないことが多いからです。特定の品質を目標に録画を作成すると、同じ入力でも選択した品質に応じてファイルサイズが変わります。自然な動作です。

複雑なシーン(フレーム)では一定の見た目の品質を保つため多くのビットを使い、複雑でないシーンでは少ないビットを使います。x264エンコーダーはフレーム内の変化の重要度を解釈し、設定(CRF、つまり品質設定)に応じて見た目の品質を最適化しようとします。品質の基準は毎秒25フレームです。x264は動画のフレームレートに応じて品質を調整するので、同じ品質設定でも60 FPSのストリームでは25 FPSより1フレームあたりの品質が低くなります。理由は単純です。25 FPSと60 FPSの両方で同じ見た目の品質を保つことが全体の目標なら、25 FPSの1フレームは60 FPSの1フレームより重要だからです。

ローカル録画でも最大帯域幅を制御したい場合があるので、XSplitのUIではvbv-maxrateとvbv-bufferを設定できます。これにはすぐに戻ります。


VBV-bufferとVBV-maxrate

x264エンコーダーが使う主なデータレート制御は次の2つです

- 平均ビットレートモード- 平均品質モード

前述のとおり、XSplitのユーザーインターフェースでは平均品質モードだけを使えます。多くの場合、こちらのほうがはるかに効果的な仕組みだからです。

ただし、どちらの主なレート制御方式でも補助的な制御を使うことが多く、XSplitでライブ配信を成功させるには必須です。それがVBVレート制御です。品質ベースのエンコードでは特定の品質が保証されますが、特定の帯域幅使用量は保証されません。ライブ配信では自分の利用可能なアップロード帯域幅を超えないことも、視聴者のダウンロード速度を超えないことも重要です。

一部のエンコーダーは一定の帯域幅で配信する選択肢を使います。しかし、このレート制御方式(あるいは制御がないこと)は帯域幅を無駄にし、配信者と視聴者の両方に高い接続品質を求めることが多くあります。

一方XSplitは、品質ベースのエンコードを使い、VBV-maxrateとVBV-bufferを設定します。これは、XSplitのx264エンコーダーがストリームの品質を一定に保ちながら、複雑でないシーンや重要度の低いシーンでは帯域幅を少なくできるという意味です。VBV-maxrateは、エンコーダーが使える帯域幅に上限を設けますが、VBV-bufferとの関係で機能します。

VBV-maxrate=2000、VBV-buffer=4000に設定すると、VBVバッファー(デコードバッファー)は最大2000 Kbpsで満たされます。そのため動画のビットレートは個々の値で2000 Kbpsを超えられますが、2秒間で4000 Kbitは超えません。つまりVBV-maxrateは、ストリーム中に存在できる最高のビットレートという意味でのピークではなく、バッファーに入る最大ビットレートにすぎません。

この考えを理解すれば、vbv-bufferの柔軟性も分かるでしょう。基本的には、エンコーダーが一連のフレームを先読みし、vbv-bufferを超えない限り、あるフレームには多くのビットを、ほかには少ないビットを使えるようにします。

ここで理解すべきなのは、vbv-bufferは実際にはデコード側のバッファーなので、私たちの場合は主にFlash Playerであるデコーダーに依存することです。Flash Playerのバッファーは0秒から、うーん、何秒でも設定できると思います。ただし多くの配信サービスは1秒か2秒に固定しています。だからXSplitの配信プラグインは通常、vbv-maxrateをXキロビット毎秒(Kbps)にすると、vbv-bufferをXまたは2 * Xキロビットに自動調整します。少しずつ意味が分かってきたらうれしいです!サービスのFlash Playerバッファーが10秒ほどなら、私のvbv-bufferを大きく増やし、同じ品質で全体の帯域幅を下げたり、同じ帯域幅で品質を上げたりできるでしょう。つまり、必要なときにビットレートを急増させる自由をエンコーダーに与えられます。そのため、XSplitチームがパートナーと話し合い、Flash PlayerのバッファーをXSplitのVBVバッファーに合わせてもらえるか検討することを期待できます。

最後に、ローカル録画の話に戻ります。録画では既定の最大レート(vbv-maxrate)が設定されず、当然vbv-bufferもありません。しかし録画した映像をウェブサイトに置き、訪問者がインターネット経由でFlash Playerを使って再生するなら、よく考えたほうがよいでしょう。最終視聴者のダウンロード帯域幅が1000 Kbps以下で、映像を4秒ほど後に再生開始したい場合は、ローカル録画に設定した品質に加えて適切なVBV制約を適用します。

この例では、次のXSplit設定を使います。

VBV Max Rate:1000 kbpsVBV Buffer:4000 kbps

音声も考慮すべきでしょう。ただしこの場合、VBV Max Rateから音声ビットレートの1倍、VBV Bufferから4倍を引けば準備完了です。


エンコーダープリセット

「Ultrafast」から「Placebo」までの組み込みプリセットがあります。XSplitは「XSplit Default」というカスタムプリセットを使います。将来、既定値が「Veryfast」になることを期待できます。

では、これは何を意味するのでしょうか。

H.264は、デコーダーが対応またはデコードできる必要がある圧縮機能を規定します。デコーダーの能力に応じて、High Profile、Medium Profile、Base Line Profileというプロファイル群に分かれます。今はFlash Playerが対応するHigh Profileだけを考えます。

特定のプリセットを使うと、x264エンコーダーは高度なプリセット機能で動画ビットストリームをよりよく圧縮します。「Superfast」より遅いものは、ほかのカスタム制約を加えない限りHigh Profile互換のビットストリームになりますが、今は気にしなくて構いません。知っておくべきなのは、遅いプリセットほど配信が圧縮され、限られた帯域幅でよりよい品質を得られるということです。ただし、フレームレートと解像度によって、大きなCPU処理能力が必要です。

既定のプリセットは「XSplit Default」または「Veryfast」で、ほぼ同等です。ほかのCPU負荷の高い処理が同時に動いておらず、「Veryfast」で1280 x 720、30 FPSを配信またはエンコードしたいなら、i5プロセッサーで十分でしょう。どれかのコアのCPU使用率が70%を超えたら、次のことが必要です:

a) 解像度を下げるb) 速いプリセット(superfastなど)を使うc) 良いCore i7マシンを買う

話を短くすると、選ぶプリセットはエンコーダーに求める圧縮量に相当します。遅い = 圧縮が多い = CPU使用率が高い。

ここまでの説明を補足するため、今あなたが抱いているはずの唯一の質問に答えましょう -:):


質問:ローカル録画で品質を8に設定し、VBV制約を設定しない場合、より遅いプリセットを選ぶと品質の高い映像になりますか。

答え: いいえ、なりません。品質はまったく同じですが、プリセットが速いほど録画動画は圧縮が少なくなります(ファイルサイズが大きい)。ただしVBV-maxrateの制約が十分に厳しければ、遅いプリセットのほうが指定したVBV-maxrate未満に保つのがうまいため、品質に差が出ます。

コメント


bottom of page