OBSのLook-ahead機能は本当にいらない子なのか?
ネットでOBSのオススメ設定を調べてみると、必ずと言っていいほど「Look-aheadはONにするな」と書いています。
その理由はと言いますと「動きの少ない場面ではいいけれど、動きの激しい場面では画質が下がる」とのこと。
それは本当なのでしょうか?
本当にそれほどにダメな機能なんでしょうか?
ということで、実際にOBSでの説明を読んでいきます↓
『動的Bフレームを有効にします。有効にした場合、GPU使用率の増加を犠牲にして最大数まで、必要な分だけ多くのBフレームを使用することで視覚的品質を向上させます。』
英語だとこう↓
↑有効にすると、GPUの使用率が高くなる代わりに、必要なBフレームを最大限に使用するだけで、視覚的な品質が向上します。
と書かれています。
そして一方、NVIDIA公式のOBSGuideにはこうあります。↓
先読み: チェック済み。これにより、エンコーダーは、0 から指定した B フレームの数までの B フレーム数を動的に選択できます。Bフレームは画質を向上させるので素晴らしいですが、利用可能なビットレートを多く消費するので、高モーションコンテンツの品質を低下させます。先読みは、両方の世界のベストを可能にします。この機能は CUDA アクセラレーションです。スムーズなストリームを確保するために GPU 使用率が高い場合は、これをオフに切り替えます。
↑翻訳だとこんな感じ。
この二つの説明を読む限りでは
・ONにするとOBSで『指定した最大Bフレームと0』の間で自動的にBフレームを設定するようになる。
・Bフレームは画質を向上させるがビットレートを多く消費する。
・Bフレームは動きの激しいモーションの品質を下げる。
・GPU使用率が増える
・Look-aheadはCUDAアクセラレーション、つまりNVIDIAが開発した機能である
と読める。
ただ、これらの説明でよく分からないのが、
Look-aheadは0~最大Bフレームまで動的に使用するという部分です。
OBSの説明だと必要な分だけ最大限にBフレームを使用すると読めます。
しかしNVIDIAの説明を読む限りでは、between 0 and the number of B-Frames you specify.とあります。
specifyは特定のという意味ですから、あくまで指定したBフレームまで、ということになります。
例えばOBSで最大Bフレームを2に指定した場合、0~2の範囲で変動するということになります。問答無用で0~4になるわけではありません。NVIDIAの説明だとそう。
しかしOBSの説明を見ている限りだとすごく全力でBフレームをねじ込んできそうな感じがします。
更にNVIDIA NVENC OBSガイドの推奨設定の項目を見ていくとこうあります↓
最大 B フレーム: 4 に設定します。[先読み] オプションをオフにした場合は、これを 2 B フレームに減らします。
↑NVIDIAの説明によると、
Look-aheadをオンにする場合は最大Bフレームを4に設定するのがオススメ。
Look-aheadを使用しない場合は最大Bフレームを2に設定するのがオススメ。
ということなのですが、
もしLook-aheadが問答無用で4フレーム使用するのだとしたら、あえて最大Bフレームを設定する必要はないはずです。2に設定しようが3に設定しようが必ず4まで使用されるならあえて4に設定するよう書かないはずです。
Look-aheadが使用するBフレームの数はOBSで設定した最大Bフレームの数に制限される。と考えていいと思います。
・Look-aheadを使用すると何が変わるか?
Look-aheadはキーフレーム間隔を最適化します。
これは非常に大きなメリットです。
Look-aheadをオンにすると、キーフレームがシーンの切り替わるタイミングで挿入されるようになります。
↓Look-aheadがオフの場合、シーンチェンジは一切考慮されることなく、等間隔でキーフレームが打たれます。
↑このときはキーフレーム間隔2秒で検証していました。
Look-aheadがオフの場合は常に等間隔でキーフレームが打たれていますが、オンにすると変わります。
オンの場合も基本的には2秒間隔ですが、時折2秒を下回ることがあります。それがLook-aheadの判断によって挿入されたキーフレームです。
この時の検証では、Look-aheadの判断で挿入されたキーフレームは全てシーンチェンジのタイミングになっていました。
・キーフレームがシーンチェンジのタイミングで挿入されるアドバンテージとは?
動画は3つのフレームから構成されます。
Iフレーム(キーフレーム):最も情報量が多いですフレームです。そのフレーム全ての情報を持っています。
Pフレーム:直前のフレームを参考に作られるフレームです。データ量を減らす役割があります。
Bフレーム:前後のフレームを参考にして作られるフレームです。処理量は多いですが画質が良いです。同じくデータ量削減において大きな役割を果たします。
この3つのうち、PフレームとBフレームは、Iフレーム(キーフレーム)なしでは表示できません。
そしてPフレームとBフレームは、映像の大きな変化に対応することがあまり得意ではありません。
Look-aheadをオンにすると、シーンが切り替わった最初のフレームにIフレームが来るように最適化されます。
オフだとキーフレームは常に等間隔です。シーンチェンジのタイミングでPフレームやBフレームが来る可能性が高くなります。
・画質に差は出るのか?
Look-aheadオンオフによって画質に差が出るのか、まったく変わらないのかを検証します。
分かりやすくするために拡大します
シーンの最初のコマがキーフレームであるかどうかで違いが出ます。
そしてその差はそのまま、シーンの最後のコマまで続きます。
分かりやすくするために拡大します
シーンチェンジのタイミングで情報量の大きいIフレームが来ることで、直前のフレームを参照するBフレームとPフレームにいい影響を与えます。
Look-aheadはBフレームを0にできる
Bフレームは前後のフレームを参照するため、前後のフレームに差がありすぎると困ってしまいます。
上の比較画像がまさにです。Look-aheadオフの場合、シーンチェンジのタイミングでIフレームが来なかったことで、直前のシーンの影響をもろに受けてしまい、変化に対応しきれず、細部のクオリティが下がってしまっていました。
そういう状況でBフレームを0にできるようになるというのは有利な点と言えます。
一方で、Look-aheadをオフにすると、動きの激しい場面でも必ずBフレームが挿入されてしまいます。(最大Bフレームを0に設定しない限りは)
しかし、Bフレームは画質向上において大きな役割を持っているので、最大Bフレームを0に設定するのはオススメできません。
以上のことを踏まえてLook-aheadの使用をお勧めします。
「いや、そんなん言うてもやっぱり不安だわ」という方はまず、最大Bフレームを2に設定したままLook-aheadをONにしてみるというのもいいかと思います。