見出し画像

Radeonで配信がしたい:現行OBS編(28.x以降)

2023.8.6:EnforceHRD=Falseについて加筆

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

旧バージョンのOBS(27.2.4以前)での設定が知りたい方は過去記事こちら
取りまとめてあります。

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



配信をするにあたって

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

OBSとは?

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

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

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

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

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

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

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

統計情報を活用しよう

OBS 統計データ

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

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

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


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

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

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

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

OBS Version 28.x以降

OBS 29.0.2 配信設定

OBS 27.xから28.xになって大きく変化したのは「マスター設定」と呼ばれる
詳細な設定モードがなくなり、非常にシンプルな形になりました。

さらにフレーム処理においても大きな変化があり、nVidia系のGTXやRTX
シリーズGPUで使用できるエンコード形式のNVEncと同じく「Bフレーム」が単体で適応できるようになりました。

これにより以前と比較して効率的にデータ処理が出来るようになり、より
高画質での配信が行いやすくなりました。

※RadeonGPUでBフレームを適応させるにはRDNA2世代(RX6000シリーズ)
以降のモデルでなければ機能しませんので、使用するGPUの世代によっては
この機能を活用することが出来ませんので注意してください。

それでは以下より最新版のOBS 29.0.2(2023.2.24現在)を用いて、私が行って
いる設定を紹介したいと思います。


OBS 28.x以降で設定を組む

それでは実際にOBS 29.0.2を使ってマスター設定を用いた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)

を基本とします。


・エンコーダ

AMD HW H.264

「AMD HW H.264」を指定することで、PC内に接続しているRadeonGPUを配信時のエンコーダーとして使用することが出来ます。

・出力をリスケールする

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

・レート制御

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

OBS 28.xではCBR、CQP、VBRの3種類のみでしたが、29.xになってさらに
VBR_LAT、QVBR、HQVBR、HQCBRが追加され全7種になりました。
各々に違いがあり簡単ながら紹介すると

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

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

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

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

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

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

OBS 27.2.4で使用できた「VBRLAT」と同一のものです。

QVBR
Quality Defined Variable Bit Rateと呼ばれ「品質定義可変ビットレート」と
訳されるレート制御方式です。

基本的にはVBR方式と同じものですが、こちらはエンコード負荷による
ビットレート要求値への対応がより厳格になっており、特に低負荷時の
ビットレートを必要最低限まで落とし込むことで従来の品質を維持しつつ
データ量を節約できるというものです。

ただしこの機能は、録画などの動画ファイルを扱う上での圧縮効率に過ぎず
配信での安定性を求める場合に効果的か?と言われると疑問が残ります。

このレート制御方式は別途「品質レベル」の指定が必要ですが、標準で使用
する場合にはOBS内で設定された基本設定が適応されます。
また、後述する「AMFオプション」により細かく指定することも可能です。

HQVBR、HQCBR
既存のCBRやVBRと比較して、映像をより高画質でエンコードする事を目標とした方式とのことでそれぞれ「High Quality VBR」、「High Quality CBR」
と呼ばれています。

さて、過去のOBSと比較してずいぶんと増えましたが色々試した感じ
既存の「VBR」、「CBR」でも十分安定した配信は可能ですし、新規に追加
された「QVBR」、「HQVBR」、「HQCBR」の3種は本来ならば後述する
「AMFオプション」を利用して「PreAnalysis」機能を有効にする必要があるそうですが、特に使用しないで動かしてみたところ特に問題なく安定した
ビットレート制御で配信を行うことが出来ました。

不安のある方は機能を有効化して適応させるか、分からなければ既存の「VBR」もしくは「CBR」でも安定した配信が可能です。

・ビットレート

目標ビットレート

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

古いOBSでは可変式である「VBR」等を選んだ際、目標値とは別に最大値の
ビットレートも指定する必要がありましたが、内部の仕様が変わって目標値を最大値としたビットレート制御を行うようになり扱いやすくなりました。

・キーフレーム間隔

キーフレーム間隔

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

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

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

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

・プリセット

品質プリセット

過去のOBSでは「品質プリセット」と呼ばれていた箇所で、当時は「速度」
「バランス」「品質」だった表記が「Speed」「Balance」「Quality」と変化
していますが、以前と同じく基本は「Quality」で問題ありません。

・プロファイル

配信プロファイル

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

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

・最大Bフレーム

※この機能を利用するにはRDNA2世代以上(RX6000シリーズ~)が必要

最大Bフレーム

ここがOBS 28.x以降で大きく進化した機能の一つで、RadeonGPUによる
H.264エンコードでも「Bフレーム」を単体で取り扱えるようなりました。

ちなみに「Bフレーム」とは、過去と未来に当たるフレームを参照した差分
フレームを生成するもので、簡単に言えばこのフレームを活用することで
エンコード負荷の軽減が狙える=同じビットレート量でもより画質を求め
やすくなる機能となります。

最大で「5フレーム」まで指定でき、先の説明では多いほど良さそうですが
多すぎても逆に画質を損なう結果にもなります。

個人的には「2フレーム」くらいに留めておいて、0~2フレーム間でテスト
した結果「1フレーム」が最も効率の良い結果が得られました。


AMF/FFmpegオプション

AMF/FFmpegオプション

OBSバージョン28.x以降になってもう一つの重大な要素として、FFmpegに
よるコマンド入力がRadeonGPUエンコード時に活用しやすくなったのと
かつて「マスター設定」と言われていた詳細設定が「AMF」と呼ばれる
オプションコードによってさらに細かく実装できるようになりました。

今回は「AMFオプション」について紹介したいと思いますが、正直なところ
内容が非常に膨大なのと私自身全てを把握しているわけではなく、あくまで
自分自身で試した範疇で書いています。

・AMFオプションとは?

「AMF」とは「AMD Advanced Media Framework」の略称で、かつては
OBSに実装されていたRadeonGPU用エンコーダと同じものになります。

過去のOBSで使用できた「マスター設定」では、この機能の一部をOBS側のウィンドウ内で編集することが出来ましたが、オプション指定式にする事でより幅広く詳細に設定することが可能になりました。

また、OBSバージョンにより実装されたAMFバージョンも異なっており
最新版のOBS 29.0.2(2023.2.24現在)ではAMF 1.4.29が実装されています。

AMFバージョンアップ時の新機能については、GPUドライバー側も一定以上のバージョンが求められており、AMF 1.4.29では「AMD Software:Adrenalin Edition 23.1.2」以上が求められています。

AMFについては参考資料としていくつかのリンクも張っておきます。

OBS公式より、OBS内AMFオプション初期設定値

GitHubよりAMF技術資料、ページ内右側の「Release」より各バージョンの
PDFファイル形式でまとめられた資料がダウンロードできます。

・AMFオプションの書き方

まずオプションを反映させるための書式ですが、馴れてしまえば特に難しくは無いのですが説明をすると

オプション名=(真贋値),(整数)

という形で記述を行い、複数オプションを指定する際は間に半角スペースを
空けるだけでよいのですが、=の後の入力方法がオプションによって異なり

・オプションのON/OFF指定(真贋値)を求められる場合=True,False
※TrueがON、FalseがOFFの意
・オプションの数値を求められる場合=0~(半角英数で実数)
・オプションの種別を求められる場合=オプションごとの文字を直接入力

またtrue,false値は1か0の数値でも代用することが出来、0がFalse、1がTrue
と同義になります。

ここで一例として、実際にオプションを指定する際の項目として

品質プリセット=Quality
プロファイル=High
プロファイルレベル=4.2
最大参照フレーム=4

を実現するオプション指定の書式は

Quality=Quality Profile=High ProfileLevel=42 MaxNumRefFrames=4

という風に記述することで反映され、各コードの意味も

Quality=品質
Profile=プロファイル
ProfileLevel=プロファイルレベル
※レベル指定の数値は小数点ではなく二桁の整数で行う事
※1.0~6.2までの数値を10~62で入力する
MaxNumRefFrames=最大参照フレーム数

以上の通りとなります。

OBS内のAMF基本設定値

先に張ったリンク内にて、OBSで基本設定されているAMFオプション内容が
表記されていますがいくつか基本的な部分を抜粋して説明します。

ここの箇所はすでに実装されている機能で、特に変更が必要なければ
AMFオプション内に何も書いていなくてもそのまま適応されます。

Usage=Transcoding
Quality=Quality
Profile=High
ProfileLevel=42
MaxNumRefFrames=4

RateControlPreanalysisEnable=1
EnforceHRD=True
FillerDataEnable=False
DeBlockingFilter=True
EnableVBAQ=True
HighMotionQualityBoostEnable=False

HalfPixel=True
QuarterPixel =True

・Usage=Transcoding

エンコーダの動作モードを定義しています。

他には「Ultra-low latancy」「Low latancy」「Webcam」「HQ」「HQLL」
の全6種になっていますが、配信で使用するならば基本は「Transcoding」
一択で問題ありません。

・Quality=Quality

品質プリセットの定義。

AMFでは「Quality」が選択されていますが、基本設定で「Balance」等を
選択すればそちらが優先的に使用されます。

・Profile=High

プロファイルの定義。

こちらもAMFでは「High」が選択されていますが、基本設定に「Main」等を
選択すればそちらが優先的に使用されます。

・ProfileLevel=42

H.264プロファイルレベルの定義。

内容としては「プロファイルレベル:4.2」ですが、AMF内では小数点では
なく二桁の整数で表すため「42」の表記となっています。

・MaxNumRefFrames=4

最大参照フレーム数の定義。

「プロファイルレベル:4.2」の最大値となる「4フレーム」が設定されて
います。

このフレーム数については「プロファイルレベル」の「レベル数」によって異なり、その関係性は「H.264 wiki」に掲載されています。

・RateControlPreanalysisEnable=1

レート制御の先読み分析機能の定義。

特に「VBR」との併用が効果的とされるレート制御を補助する機能で
有効化の意味で「1」が指定されています。
※効果としては「True」と同義

・EnforceHRD=True

HRD適応の定義。

エンコードされた映像の規格について正当性を示すHRDと呼ばれる
証明を付与する機能で「True」が設定されています。

・FillerDataEnable=False

フィラーデータ適応の定義。

「CBR」制御時の目標ビットレートを下回った際に維持を行うための
「フィラーデータ」と呼ばれるダミーデータを適応させるための機能で
「False」が設定されています。

・DeBlockingFilter=True

デブロックフィルタ適応の定義。

配信映像がぼやけるときに発生する「ブロックノイズ」という映像の乱れを抑制するフィルタを追加する機能で、「True」が設定されています。

・EnableVBAQ=True

VBAQ適応の定義。

映像データを整理してエンコードを効率化する機能で「True」が
設定されています。

・HighMotionQualityBoostEnable=False

ハイモーションクオリティブースト適応の定義。

動きのある映像に対して「ブロックノイズ」の発生を抑制する効果のある
機能で「False」が設定されています。

・HalfPixel=True,QuarterPixel=True

動き推定の定義。

フレーム間での映像(ピクセル)がどこに移動しているか予測することで
ビットレート負荷を下げる機能で、古いバージョンのOBSで言うところの
「ハーフ&クォーターピクセル」が設定されています。

私なりのAMFオプションの設定

MaxNumRefFrames=3 EnforceHRD=False BReferenceEnable=True MaxConsecutiveBPictures=1 BPicturesPattern=1 HighMotionQualityBoostEnable=True

若干見づらい書き方かと思いますが、コピー&ペーストで使えるようOBSに入力した内容をそのまま掲載しています。

上記のオプションコードは、私が使用しているAMFオプションの内容で
先にリンクを張ったOBS内のAMF初期設定で、変えたい部分の変更と追加を行ったような設定となっています。

各オプションコードについて説明をすると

・MaxNumRefFrames=3

最大参照フレーム値を基本値の4から3に変更しています。
ここについては規定値のままでも問題ないのですが、自分で色々試した感じ
3フレームに指定するのが最も良い画質が得られたのでこの数値にしています。

最大参照フレームで指定できる幅は「H.264 プロファイルレベル」で定義
されており、OBS基本値では1080P 60FPSでの定格値ともいえる「4.2」が指定されその場合の有効な最大数は「4」となります。

なお「H.264 プロファイルレベル」、レベル毎の階位については
H.264 wiki」にて表データとして掲載されています。

・EnforceHRD=False

エンコードされた映像にHRDというデータを追加するもので、かつての
「マスター設定」では「HRDを強制」とも書かれていました。

基本値では「Trueが指定され有効化」されていますが、この機能は配信に
おいて特に有用と言える機能ではなく、Blu-Ray Diskの再生時にデータ提示が求められる場合があるそうです。

以上の理由からデータ節約の意味で「無効となるFalse」を選択しています。

2023/8/6追記
当機能を無効化した場合、配信時のビットレート量が設定以上に跳ね上がる場合があり、配信が不安定になる際は有効化=Trueを推奨します。

・Bフレーム設定の再定義

BReferenceEnable=True
MaxConsecutiveBPictures=1
BPicturesPattern=1

この機能については関連した設定なので、まとめて説明します。

OBS 28.x以降から使用できるようになった「Bフレーム」ですが、AMFを
用いてより詳細な設定を行う事も出来るようなっています。

オプションコードを一句ずつ説明すると

BReferenceEnable=True
Bフレームの適応をTrue=有効化する
MaxConsecutiveBPictures=1
Bフレームの最大数を「1フレーム」にする
BPicturesPattern=1
連続したBフレーム数を「1フレーム」にする

以上のようになり、正直なところOBSの配信設定側で「最大Bフレーム=1」を指定しているので無くても構わないオプションコードだと思うのですが
念のため、AMFオプションを用いてオーバーライドしています。

・HighMotionQualityBoostEnable=True

ハイモーションクオリティブーストと呼ばれる機能で、動きのある映像に
対して発生しやすいブロックノイズなどを低減する機能なのですが、何故か
基本設定では「Falseが指定」されているので「有効化のためTrueを指定」
しています。


最後に

OBS 29.0.2設定例

最後に私が設定したRadeonGPU配信設定を、AMFオプションで指定した分も含めて紹介すると

エンコーダ:AMD HW H.264(AVC)
レート制御:CBR
ビットレート:6,000Kbps
キーフレーム:2s
品質プリセット:Quality
プロファイル:High
プロファイルレベル:4.2
最大参照フレーム:3
最大Bフレーム:1
連続Bフレーム数:1
HRD:無効
VBAQ:有効
ハイモーションクオリティブースト:有効

このような設定になっており、過去記事で紹介したOBS 27.x以前での
「マスター設定」で組んだ内容をコンバートしたような形となっています。

AMFオプションの使い方は現在も勉強中の段階で、今回紹介した設定も
極力シンプルに安定性を重視したものとなっています。

元々RadeonによるOBS設定は情報が少なく、苦労することが多いのですが
OBSのバージョンアップによって設定方式が刷新され、より情報が集めに
くいのが現状に思い、この記事が何かの一助になれば幸いです。

また、OBSの設定について何か質問や疑問があればTwitter配信中などに
問い合わせをいただければ、答えられる範疇で答えていきたいと思いますし
アドバイス等あれば、ぜひ頂ければと思います。

それでは( 'Θ')


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