見出し画像

Radeonで配信がしたい:旧OBS編(27.x以前)

※この記事はOBSバージョン27.2.4を元に書いているため、OBSバージョン28.x以降とは大きく内容が異なっています。

OBS 28.x以降でのRadeonによるOBS設定はこちらで紹介しています。


今回はRadeonというグラフィックスカード(以下GPU)を用いて私が普段
行っている配信で、OBSをどのような設定なのかを紹介しつつ書いていこうと思います。

そもそも私は普段、Twitchというサイトでゲーム配信などを行っており
これから書く内容はあくまで「Twitchというサイト向けに最適化した設定
そして様々な文献と自身の経験則を交えた解釈であることをあらかじめ
ご承知おきください。



配信をするにあたって

配信というものを行うにあたり最近は手段も色々ありますが、今回紹介するのはPCを用いてOBSと呼ばれる配信用ソフトを利用した方法です。

OBSとは?

OBSとはフリーのオープンライセンス型ソフトウェアで、リリースされてから今に至るまで有志によって支えられ、数多くのアップデートが成されてきました。

そのままでも十分多機能ですが、プラグイン式により更なる機能の拡充も
可能です。

OBS導入や使い方については以下のサイトが大変参考になるかと思います。

キャプチャーカードは必要?

結論から言えば、必要な場合と必要でない場合に分かれます。

まずOBSが導入されたPC内で動いているソフトウェアをキャプチャーする
機能があるので、1PC内でゲームを行いつつ配信もする場合は無くても配信が可能です。

ただしゲーム機など外部機器による映像と音声を配信したい場合、そのままでは配信用PCに取り込むことが出来ないので、その機能を追加する意味で別途キャプチャーカードを用いて配信を行う必要があります。

統計情報を活用しよう

OBS 統計データ

OBSには配信中のデータをモニタリングできる「統計」というウィジットがあります。

表示させるにはウィンドウメニューから「表示」→「統計」をクリックすることでウィジットが表示されます。
また「ドック」→「統計」をクリックすることでOBSウィンドウ内に内接
させることも出来ます。

この表示は配信及び録画中のデータを閲覧することが出来、特に配信中は映像が途切れた時、エンコード時のエラーで損失したのか回線由来≒ビットレート由来で損失したのかが判断でき、対策が取りやすくなります。


OBSでRadeon用の設定をする:27.x以前の仕様

OBSをインストールしたらまず、Radeonで配信できるように設定を行いたい所なのですが、実はOBSのバージョンによって設定が大きく異なります。

具体的には(2023.2.21現在)OBS 27.x以前とOBS 28.x以降で全く別物と言えるほどの違いがあります。

今回は情報を整理して見やすくする意味も込めて、OBS 27.x以前において
私が行ってきた設定方法を交えて紹介したいと思います。

OBS Version 27.x以前

OBS 27.2.4 マスター設定例

いきなり大きな画像が出てきましたが、OBS 27.x以前は画像一番下の項目にある「表示モード」を「マスター」へ設定することで、きめ細かな配信設定を組めるというのがRadeonを利用する最大の特徴でした。

OBS 27.2.4 マスター設定への切り替え

なお、現在ではOBSバージョンが古く(2023.2.21現在、最新は29.0.2)
画質の面からも敢えて使うメリットは正直薄いと思います。

しかしながら、プラグインとの互換性問題でOBS 27.x以前を利用せざるを得ない場合もあるかと思いますので、OBS 27.xの最終バージョンに当たる
OBS 27.2.4を用いて紹介します。


OBS 27.x以前でマスター設定を組む

それでは実際にOBS 27.2.4を使ってマスター設定を用いたRadeon用の
配信設定を組んでみようと思います。

Twitchにおける配信設定ですが、公式の推奨設定を引用すると
※公式に掲載されているエンコーダはx264

・1080p 60fps
解像度: 1920x1080
ビットレート: 6000 kbps
レートコントロール: CBR
フレームレート: 60または50 fps
キーフレームインターバル: 2秒
プリセット: veryfast <-> medium
プロフィール: Main/High

・720p 60fps
解像度: 1280x720
ビットレート: 4500kbps
レートコントロール: CBR
フレームレート: 60または50 fps
キーフレームインターバル: 2秒
プリセット: veryfast <-> medium
プロフィール: Main/High

Twitch配信ガイドライン

さらに簡単ながら今回の機材環境ですが、以下の通りとなります。

・CPU
Intel Core i3-10105
・RAM
KLEVV BOLTX 3200MHz 16GBx4(64GB)
・GPU
SAPPHIRE PLUSE AMD Radeon™ RX 6600
・GPUドライバー
AMD Software:Adrenalin Editon 23.2.1 WHQL ※
※WHQL=Windows Hardware Quality Labsの略で正式に
Windows対応が認められた所謂「安定版ドライバー」
・OS
Microsoft Windows 10 Pro 22H2

自作PCと構成について

最後に今回取り扱う解像度設定は

1920x1080 60fps(FullHD 1080p)

を基本とします。


・エンコーダ

H264/AVC Encoder (AMD Advanced Media Framework)

「H264/AVC Encoder (AMD Advanced Media Framework)」を指定することでPC内に接続しているRadeonGPUを配信時のエンコーダーとして使用することが出来ます。

・出力をリスケールする

出力映像のリスケール

こちらにチェックを入れて指定した解像度を入力することで、配信時の解像度設定をオーバーライドできますが、裏で録画も同時に回してる場合に配信と録画で解像度を分けたいのでなければ特に必要はありません。

・プリセット

プリセット設定

こちらを選ぶことで様々なプリセットを選べますが、マスター設定を利用する場合、不要な機能となるので未指定で大丈夫です。

・品質プリセット

品質プリセット

こちらは上記のプリセットとは違い、映像品質に関わる箇所なので基本は「品質」を指定すれば大丈夫です。

どうしても配信がカクツクなどの問題が発生し、解決しない場合は設定を
落として「バランス」にしてみるのも良いかもしれません。

・プロファイル

配信プロファイル

エンコードに利用するH.264を扱う上での内部機能を指定するもので「Constrained Baseline」~「High」の順に機能と負荷が増しますが、後述
する「コーディング」の関係とここ数年内のPCで扱うならば基本的「High」で問題ありません。

仮にここも設定を落としたいのであれば「Main」以上を推奨します。

・プロファイルレベル

H.264 プロファイルレベル

ここの数値を上下させることでH.264エンコードの扱える解像度とフレームレート数が決定され、機器に対する映像再生時の規格も定義されます。

1920x1080 60fps(FullHD 1080p)の映像であれば「4.2」が定格値となり
ここの数値が低すぎても高すぎても映像が認識されなくなったりします。

なお、プロファイルレベル毎の階位はH.264 wikiに掲載されています。

・コーディングの種類

コーディングの選択

「CAVLC」と「CABAC」の二種類が存在しますが、簡単に紹介すると

・CAVLC:Baseline以上で使用可能、低負荷、低圧縮の映像処理を行う

・CABAC:Main以上で使用可能、高負荷、高圧縮の映像処理を行う

先ほど述べたプロファイルで「Main」以上を選ぶ理由が高性能な「CABAC」を使うためなのですが「CALVC」に比べて負荷が高いのが特徴です。
ただ正直なところ、今のPCスペックであれば「CABAC」を選んで困るケースはほぼないと思います。

・最大参照フレーム数

最大参照フレーム数

エンコードする上でフレーム単位で処理、補完を行う際の範囲を指定する
項目で最大で16フレーム扱えるとされていますが、そもそも情報として保持できるフレーム数が先に設定した「プロファイルレベル」で定義されており
今回のように「プロファイルレベル:4.2」の場合、最大で「4フレーム」
までしか保持できません。

またフレーム数が多い=より高画質で配信が出来ると思えますが、実際には
処理するフレームが増えるほどエンコード負荷も増し、結果として画質を損なう結果にもなるので自分の環境でテストした結果、最も結果の良かった「3フレーム」を選択しています。

・レート制御方式

ビットレート制御方式の選択

エンコード時のビットレート制御を指定する項目で「CQP」、「CBR」「VBR」、「VBRLAT」の4種類があり、それぞれに違いがあるので個別に
紹介すると

CQP
Constant Quantization Parameterの略で訳は「固定量子化パラメーター」
といった意味になります。

この制御方法はビットレートを定めず「QPレベル」と呼ばれる数値を入力
することで設定に応じたレート制御を行うのですが、ビットレート値が制限されやすい配信では扱いづらく、どちらかと言えば録画向きといった機能になるかなと思います。

CBR
Constant Bit Rateの略で直訳すると「一定のビットレート」、一般には
「固定ビットレート」と呼ばれる方式です。

ビットレートは後述する「目標ビットレート」を基準に映像負荷に応じて
数値が上下しますが、CBRの場合はビットレート値が基準値を下回る場合に
フィラーデータと呼ばれるダミーで穴埋めすることで基準値に収める挙動を行います。

VBR
Variable Bit Rateの略で直訳そのままに「可変ビットレート」と呼ばれる方式でCBRと違い、状況に合わせてビットレート量が変化するため、基準値と
なる「目標ビットレート」と最大値となる「最大ビットレート」の設定が
必要になります。

VBRLAT
VBR Latency Constrainedと呼ばれる方式で、基本的な使い方と設定方法はVBRと同じですが、こちらはエンコード時の遅延を少なくしたレート制御になります。

以上4種類をザックリ紹介しました、では配信時における最適なレート
制御はどれになるか?というお話ですが、手放しで扱うのであれば基準値の設定のみでお手軽なCBRに分があるかなと言った所です。

配信プラットフォームの設定仕様を理解した上で、敢えて高めの数値で攻めるということが出来るのであれば、VBRないしはVBRLATを用いることでより高画質な配信を求めることも可能かもしれません。

・プレパスモード

プレパスモード、目標ビットレート値

エンコードを行う際、事前にデータを読み込みビットレート分布を最適化
この作業を追加することで、エンコード時のビットレート処理を効率化できるメリットがあります。

ただしエンコード時の負担は増えますので、エンコードのラグによる
フレームスキップが多発する様であれば無効にしてください。

・目標ビットレート

ここで入力した数値を基準にビットレート制御を行います。
私はTwitchで配信を行っていますので、推奨値である6,000kbpsを指定して
います。

VBRの場合はさらに最大ビットレートも指定しますが、先も述べたように
配信プラットフォームによって許容されるビットレート値が異なるので
仮に配信プラットフォームの許容値を超えるビットレートが発生した場合
帯域制限によりビットレート値の大幅な下落、結果として不安定な配信となってしまうので設定する際には十分にテストを行ってください。

・最小QP、最大QP

最小、最大QP値の決定

定められたビットレートに対しエンコード負荷に応じて映像品質を決定する項目で「最小QP」が負荷が軽いときに出せる最高画質となり「最大QP」が負荷が増した際の最低画質を決定するものです。

一見すると特に最大QPを下げるほどに高画質を狙いやすくなりますが
画質を維持するということはエンコード負荷が増すほどにビットレートの
要求値も跳ね上がってしまうので、特にビットレート制限のあるTwitchでは
下げすぎれば映像のフレームスキップが多発する不安定な配信となります。

要するに最大QPの値を大きめに取ることで、画質が維持できない負荷が発生
した際に画質を下げる=フレームスキップを回避するためのバッファとして機能させることが出来ます。

最小QPについては下げすぎても効果が薄く、大抵は15~20程度にしておき
最大QPはゲームタイトルにもよりますが、Twitchならば45~50くらいの値が
無難なところかなと思います。

・フィラーデータ

※レート制御「CBR」選択時のみ使用可能

フィラーデータ、フレームスキップ設定

「CBR」の最大の特徴ともいえる目標ビットレート値を下回った際に
差分を埋めてビットレートを維持するために使われる「フィラーデータ」
というダミーデータを適応させる項目です。

これによりビットレートの乱降下をある程度防ぎ、配信の安定性が狙える
ので有効を選んでいます。

・フレームスキップ、周期&動作

エンコード時に目標ビットレートを超えてしまう場合、フレームスキップ=
映像のコマ落ちをさせることで回避させる機能ですが、余程低いビットレートでの配信でもない限り、利用するメリットは無いかと思います。

よって、以下の設定項目も基本的に無効のままで問題ありません。

・VBAQ

VBAQ、EnforceHRD、High Motion Quality Boostの指定

先に設定したプレパスモードに近い機能ですが、こちらはより映像に作用
する機能で、より効率的に映像エンコードを行う事でビットレートの節約
を促す効果があります。

可能ならばプレパスモードと共に使用したい機能です。

・HRDを強制

Hypothetical Reference Decoderの略で「仮想参照デコーダ」とも訳され
これを有効にすることで規格に適合したエンコード映像であることを示す
証明書を付与する様な機能です。

Blu-Ray DiskなどではこのHRD対応が求められるそうですが、配信において不要なデータを添加するに等しいので、データ節約の意味からも無効を
推奨します。

・ハイモーションクオリティブースト

動きが激しい映像に対しブロックノイズを低減する機能で、特にRadeonエンコードは急激な動きに対する処理が苦手なので、有効にすることで映像品質の向上が期待できます。

・VBVバッファ

VBVバッファの設定

このバッファを設定することで、その分のビットレート量を保持してエンコードの補助を行い、画質向上が見込めます。

使用するのであれば「手動」に切り替えるのが望ましく、バッファ量も
レート制御によって異なりますがおおまかには

・CBRの場合、目標ビットレートの2倍をバッファ量に割り当てる
※6,000Kbpsの場合、バッファ量を12,000にして初期充満を100.00

・VBRの場合、目標ビットレートの1.5倍をバッファ量に割り当てる
※6,000Kbpsの場合、バッファ量を9,000にして初期充満を100.00

・キーフレーム間隔、各フレーム設定

キーフレーム、各フレームパターンの設定

様々なサイトで「キーフレームは2秒が推奨」とよく言われている項目
ですが、そもそもキーフレームとは動画を連続した静止画として捉えた際の
「起点となる1枚画の情報」で配信において簡単に言えば、この数値によって実際の配信者側が操作してる画面とリスナー側が見る画面での遅延が決定すると言えます。

この数値が小さいほど遅延の少ない配信が出来るとも言えますが、その反面
キーフレームが増えるほどビットレートへの負担も同時に増してしまうため
映像品質が劣化しやすくなります。

そのため多すぎず少なすぎずのバランスが「2秒」という結果になります。

配信プラットフォームによっては「2秒指定」となっている場合もあり
Twitchでは「10秒以内」という形に定められています。

さて、後に続く「Iフレーム」「Pフレーム」「Bフレーム」ですがこれらは
それぞれに違いがあって、軽く紹介をすると

・Iフレーム
映像全体の情報を保持したフレームで最も情報量が多く、先のキーフレームとはIフレームとほぼ同義。

・Pフレーム
直前のIフレームより、変化があった箇所のみ保持したフレームで情報量が
Iフレームより少ない。

・Bフレーム
Iフレーム、Pフレーム、Bフレームも含めた前後のフレームを参照して差分を
保持するフレームで情報量が最も少ないとされている。

これらフレームの取り扱いを設定するのがIDR周期以下の設定項目ですが
設定を行っても良い結果が得られたことはありませんでした。

余程の理由や知識がある方でしたら話は別ですが、基本的にこの辺の設定は
ノータッチでも特に問題ありません。

・デブロックフィルタ

De-Block Filter、Motion Pixel、Multi-Thread設定

配信の画質が劣化したときに生じるブロックノイズという映像が乱れる
ノイズを軽減する効果があるフィルタで、有効にすることを推奨します。

・動き推定

フレーム間での映像(ピクセル)がどこに移動しているか予測することで
ビットレート負荷を下げる効果があり、細かいほどに効果があります。

規定値の時点で最も効率が良い「ハーフ&クォーターピクセル」が指定されているのでそのままで大丈夫です。

・映像API

映像表現のAPIを指定するもので基本的に「Direct3D 11」以外選べないので
そのままで問題ありません。

・ビデオアダプター

エンコーダに使用するGPUを指定します。

・OpenCL 転送&変換

エンコード処理にOpenCLを適応するための機能ですが、有効にしても特にメリットもないので無効で問題ありません。

・マルチスレッド

エンコード時に複数コアを使用できるようにする項目。
現在のCPUは4コア以上積んだものがメインとなっていますので、CPUを活用
する意味でも有効を推奨します。

・キューサイズ

キューサイズの決定

画質の細かさを設定するもので、規定値では「8」が指定されています。

数値が少ないほど画質が向上するとされていますが、効果のほどは薄く
目に見える違いですとブロックノイズが発生した際に、ノイズサイズが若干
縮小するかどうか程度です。

基本的に規定値のままでも問題ありませんが、当然数値を下げるほどに
エンコード負荷も増すので、GPUの性能に余裕がある場合は検討してもよい
という程度で大丈夫です。

最後に

ざっと一通り、OBS 27.2.4を用いた「マスター設定」について私なりの
組み方も交えて紹介しましたが如何だったでしょうか。

冒頭でも述べたように現在ではOBSバージョンも古く、以降のバージョンと比較して画質の面でも

頑張って組んだOBS27.x<全く手を入れていないOBS 28.x~

なのが現実ですので、このバージョンを使い続ける意味は正直殆ど無いかなと思っています。

本来ならばこの場でOBS 28.x以降の設定も紹介したいと思っていましたが
27.x以前の紹介で大幅に尺を取られたこともあり、後日別の記事にてそちらの紹介を行いたいと思います。

それでは( 'Θ')

この記事が気に入ったらサポートをしてみませんか?