OBSのLook-ahead機能は本当にいらない子なのか?

画像1

ネットでOBSのオススメ設定を調べてみると、必ずと言っていいほど「Look-aheadはONにするな」と書いています。

その理由はと言いますと「動きの少ない場面ではいいけれど、動きの激しい場面では画質が下がる」とのこと。

それは本当なのでしょうか?

本当にそれほどにダメな機能なんでしょうか?

ということで、実際にOBSでの説明を読んでいきます↓

『動的Bフレームを有効にします。有効にした場合、GPU使用率の増加を犠牲にして最大数まで、必要な分だけ多くのBフレームを使用することで視覚的品質を向上させます。』

英語だとこう↓

画像4

↑有効にすると、GPUの使用率が高くなる代わりに、必要なBフレームを最大限に使用するだけで、視覚的な品質が向上します。
と書かれています。

そして一方、NVIDIA公式のOBSGuideにはこうあります。↓

画像2
https://www.nvidia.com/en-us/geforce/guides/broadcasting-guide/

先読み: チェック済み。これにより、エンコーダーは、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ガイドの推奨設定の項目を見ていくとこうあります↓

画像5

最大 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はキーフレーム間隔を最適化します。

これは非常に大きなメリットです。

画像5
Look-aheadをオンにした場合のキーフレーム

Look-aheadをオンにすると、キーフレームがシーンの切り替わるタイミングで挿入されるようになります。

画像6

↓Look-aheadがオフの場合、シーンチェンジは一切考慮されることなく、等間隔でキーフレームが打たれます。

画像7
Look-aheadがオフの場合のキーフレーム
画像8
画像10

↑このときはキーフレーム間隔2秒で検証していました。

Look-aheadがオフの場合は常に等間隔でキーフレームが打たれていますが、オンにすると変わります。

オンの場合も基本的には2秒間隔ですが、時折2秒を下回ることがあります。それがLook-aheadの判断によって挿入されたキーフレームです。

この時の検証では、Look-aheadの判断で挿入されたキーフレームは全てシーンチェンジのタイミングになっていました。


・キーフレームがシーンチェンジのタイミングで挿入されるアドバンテージとは?

動画は3つのフレームから構成されます。

Iフレーム(キーフレーム):最も情報量が多いですフレームです。そのフレーム全ての情報を持っています。

Pフレーム:直前のフレームを参考に作られるフレームです。データ量を減らす役割があります。

Bフレーム:前後のフレームを参考にして作られるフレームです。処理量は多いですが画質が良いです。同じくデータ量削減において大きな役割を果たします。

この3つのうち、PフレームとBフレームは、Iフレーム(キーフレーム)なしでは表示できません。

そしてPフレームとBフレームは、映像の大きな変化に対応することがあまり得意ではありません。

画像9

Look-aheadをオンにすると、シーンが切り替わった最初のフレームにIフレームが来るように最適化されます。

オフだとキーフレームは常に等間隔です。シーンチェンジのタイミングでPフレームやBフレームが来る可能性が高くなります。

・画質に差は出るのか?

Look-aheadオンオフによって画質に差が出るのか、まったく変わらないのかを検証します。

720P.CBR.4000Mbpsビットレート30fpsキーフレーム2秒で検証
Look-aheadオフは固定キーフレームのため、シーンの最初にキーフレームが来ていません

分かりやすくするために拡大します

Look-aheadオフは細部がぼけているのが分かるかと思います

シーンの最初のコマがキーフレームであるかどうかで違いが出ます。
そしてその差はそのまま、シーンの最後のコマまで続きます

次のシーンに切り替わる直前のコマです。どちらもキーフレームではありません

分かりやすくするために拡大します

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フレームをに設定したままLook-aheadをONにしてみるというのもいいかと思います。