OBSに画質を求めるのは間違っているだろうか

TL;DR

この記事はOSSのOpen Broadcaster Software(OBS Studio)のチュートリアルです。

OBSは配信の品質向上、処理の軽量化に最適なアプリケーションです。たとえ録画用途であっても他のアプリケーションを選ぶ余地はないでしょう。

日本語の情報が少なく、OBS関連では辿り着けない情報も含めて解説するので、何かに躓いている方や更に配信・録画品質を上げたい方は必見だ。

初心者向けではない内容も所々に見え隠れしているが、安定した高品質な配信・録画の為に気を付けなければならないポイントを網羅する為なのでご了承願いたい。目次を活用してね!

更新履歴

日時 内容
2019/04/16 ・推奨されるハードウェアのスペックについて
レンダリング遅延と映像の遅延 (非同期)について
Chromeのハードウェアアクセラレーションを無効化せずにキャプチャする方法について
・OBS単体でBGMを流す具体例
FFmpegカスタム出力のx264、utvideoの解説
YouTubeの劣悪なエンコード事情とその対処方法について
2019/04/24 ・曲名表示BGMスクリプトの項を、OBSだけでBGMを再生・曲名を表示する方法に変更
YouTubeのVP9と疑似4Kについて
2019/04/28 ・OBSのログ、クラッシュレポートの見方について
・メディアソースの記述を修正
・OBSだけでBGMを再生する為の生成スクリプトに、曲名を表示しないオプションを追加、解説を修正
2019/05/10 ・はみ出ている要素を修正
・ソースの右クリックメニュー"変換"の説明を追記
・統計の解説の追記
ビットレートに関する項目を更新
・ANGLEの説明を修正
・詳細設定の説明、リンクの不具合の修正
・アプリケーション毎に音声を分けて録音する解説を更新
・OBSで動画編集する方法
・AudioMediaSource.ps1とその説明を更新
・よくある質問に対応したトラブルシューティングの項を追加

ダウンロードとインストール

OBSは開発が盛んなOSSなので、更新はチェックしておくと良い。
StreamlabsやN Airの場合、バージョンが古かったり録画機能が削除されているので、本家がオススメ。
下記の公式サイトにインストーラとZip版のURLがある。
obsproject.com

Zip版等をProgram Files以外のディレクトリにインストールする場合、bin・data・obs-pluginsが含まれるOBS Studioディレクトリのセキュリティ権限にALL APPLICATION PACKAGESというオブジェクト名を追加して、アクセス許可する必要があります。この権限がないと、特定の機能(UWPアプリのゲームキャプチャ)が正しく機能しない場合があります。

因みに"GitHubで見る"をクリックすれば、正式リリース前のRelease Candidate版(リリース候補版)等をいち早く試すこともできる。
勿論ここからソースコードを入手し、自前ビルドすることも可能。
github.com

初回起動と画面構成

自動構成ウィザードは、実行中のマシンに合わせて適切に設定してくれる。
らしいが、何れにせよ設定し直す必要があるので勉強も兼ねて"いいえ"を選択。

メニューバー

項目 説明
ファイル
録画を表示 ・設定->出力->録画->録画ファイルパスで設定されたディレクトリが開かれる。
録画の再多重化 ・再エンコードなしでmp4へコンテナ変換する機能。
設定 ・後述の##設定を参照
設定フォルダーを表示 ・シーンやプロファイル等のデータ、ログ等が保存される場所。
・ここだけバックアップしてあれば設定内容を復元できる。
プロファイルフォルダーを表示 ・現在選択中のプロファイルに該当するディレクトリを表示する。
常に手前に表示 ・ウィンドウがアクティブでなくても最前面に表示する。
終了 ・終了
編集 ・ここの項目はソースやミキサーの右クリックメニューにあるので、ここからアクセスする必要はない。
・解説もそれぞれの項目で行うので後程。
全画面インターフェイス ・フルスクリーン表示。F11で切り替えられる。
ドック ・UIのリセットで配置を初期設定に、UIのロックで配置を固定する。
GUIの下部に表示されている項目の有効/無効がここで切り替えられる。
・配信や録画の問題解決に必須なので"統計"に必ずチェックを入れる。OBS23.0~の機能なので、古いバージョンの人はアップデートしよう。
ツールバー ・リストボックス: 右クリックメニューの項目をGUIにも追加する。
ステータスバー ・配信、録画時間や安定性の簡易的な表示。
マルチビュー(全画面) ・放送用のお洒落な管理画面をフルスクリーンで表示する。
マルチビュー(ウィンドウ) ・放送用のお洒落な管理画面をウィンドウで表示する。
プロファイル ・配信、録画のエンコード設定を保存し、切り替えるもの。
シーンコレクション ・映像ソースが含まれるシーンの集合。配信、録画内容によってこれを切り替える。
・ミキサーの切り替えはシーンコレクションで行う。
ツール
自動構成ウィザード ・初回起動時にキャンセルしても、ここから実行できる。必要ない。
Decklink Output ・Blackmagic Designのキャプチャボードと連携できる機能。
字幕 (実験的) ・埋め込み(CEA-608/708)字幕。OBSの映像ソースとして使えるものではなく、ストリーミングサービス側で対応していないと表示されない。
自動シーンスイッチャー ・アクティブウィンドウのタイトルを取得し、それに合わせて自動でシーンを切り替える機能の設定。
出力タイマー ・配信、録画の開始/停止タイマー機能の設定が可能。
スクリプト ・バンドルされたLuaJITまたはシステムのPython環境を通してLuaPythonスクリプトを実行できる。cf.
ヘルプ
ヘルプポータル https://obsproject.com/help
ウェブサイト https://obsproject.com/
Discordサーバーに参加 https://discordapp.com/invite/obsproject
ログファイル ・ログファイルやクラッシュレポートのディレクトリを表示したり、OBSサーバにアップロードすることができます。
OBS Log AnalyzerOBS公式Discord #help-and-supportでURLを入力するとエラー内容等を整形して表示してくれる。
クラッシュレポート
更新を確認 ・ここからアップデート出来る。
OBS Studioについて ・クレジット

シーン

+で追加、-で削除。

ソース

選択されたシーン内に映像・音声・テキスト等のソースを追加(+ボタン)する。
また、既に追加されたものの表示・非表示をここで切り替える。

ソースの追加
項目 説明
ウィンドウキャプチャ ・特定のウィンドウ、ボーダーレスウィンドウを安定してキャプチャする。
・フルスクリーンモードのゲームをキャプチャするには、ゲームキャプチャを使用する。
・仮想デスクトップ上のウィンドウもキャプチャ可能。
ゲームキャプチャ DirectXOpenGLゲームのウィンドウをキャプチャする。
・フルスクリーンモードのゲームに対応。
シーン ・シーンを切り替えずにシーンをソースとして表示する。
テキスト(GDI+) ・テキストを直接またはテキストファイルを指定して、映像に合成する。
ブラウザ ・OBS組み込みブラウザでURL先の内容を表示する。
・リソースを多く消費するため、メディアソース等で代替可能なものにわざわざ使わない。
メディアソース ・映像、音声ファイルを指定し、再生する。
・対応する拡張子のファイルがD&Dされたとき、自動で追加される。
・複数の映像、音声ファイルを連続して再生することも可能。
映像キャプチャデバイス ・キャプチャボードやWebカメラの映像を取得する。
画像 ・画像を指定し、表示する。
・対応する拡張子のファイルがD&Dされたとき、自動で追加される。
画像スライドショー ・複数の画像または画像の入ったディレクトリを指定し、スライドショーとして表示する。
画面キャプチャ ・個別のウィンドウではなく、デスクトップ全体のキャプチャを行う。
・複数のアプリケーションに跨がるなど画面全体を録画する必要がある時のみ使用する。
・仮想デスクトップは非対応。
色ソース ・パレットまたはHTMLカラーコードで単色の背景ソースを追加する。
音声入力キャプチャ Windows上での"録音デバイス"、ミキサー(設定->音声)の"マイク音声デバイス"に該当する音声デバイスをキャプチャする。
音声出力キャプチャ Windows上での"再生デバイス"、ミキサー(設定->音声)の"デスクトップ音声デバイス"に該当する音声デバイスをキャプチャする。
RME TotalMixやVoiceMeeter Bananaのようなソフトを使ってループバックする必要がない。
グループ化 ・ソースを束ねて一括でレイアウトを移動したり、フィルタを適用したり、纏めて表示/非表示を切り替える。
ソースの右クリックメニュー
項目 説明
選択したアイテムのグループ化 ・ソースを束ねて一括でレイアウトを移動したり、フィルタを適用したり、纏めて表示/非表示を切り替えられる。
・ショートカット操作は普段お使いのエクスプローラと同様です。
コピー ・ソースをコピーします。
貼り付け(参照) ・コピーしたソースを貼り付けます。コピー元と連動する点に注意。
貼り付け(複製) ・コピーしたソースを貼り付けます。コピー元とは別のソースとして機能します。(未実装?)
フィルタをコピーする/貼り付ける ・フィルタのみ別のソースに適用できます。
色の設定 ・ソースやグループの項目を任意の色で色分けできます。
名前を変更 ・ソース名を変更します。
削除 ・ソースを完全に削除します。
順序 ・ソースレイヤーの表示順を変更できます。最上部のソースが最前面に表示されます。
変換 ・ソースの拡大/縮小、回転や位置合わせを行います。
・プレビューウィンドウで直感的に操作できますが、思い通りの位置にならなかったり、適切でないスケーリングによってぼやける場合があるため、ソースはロックしてこちらを使用します。
・変換の編集、画面に合わせる、画面中央に置く辺りでほぼ完結します。
出力サイズ変更(ソースサイズ) ・選択されたソースが基本(キャンバス)解像度、出力(スケーリング)解像度でない場合に項目がアクティブになります。
・自分が何をしているのか分からない場合は押すべきではありません。
スケールフィルタ ・スケールアルゴリズムを選択できます。
全画面プロジェクター ・選択したソースを全画面でプレビューします。
・出力先のモニタを選択できます。
・Escまたは右クリックメニューから"閉じる"を選択して終了します。
・メインのプレビュー、番組ウィンドウでも同じ機能が使えます。
ウィンドウプロジェクター ・選択したソースをウィンドウでプレビューします。
・メインのプレビュー、番組ウィンドウでも同じ機能が使えます。
対話 ・ブラウザソース等で使用できる対話的インターフェイスです。ボックスに文字を打ち込んだり、クリックを発生させることができます。
フィルタ ・後述の####フィルタを参照
プロパティ ・ソース毎の各項目を参照

フィルタ

OBSには豊富なフィルタが用意されています。23.0~多くのフィルタが追加されました。
複数のフィルタを重ね掛けすることもできます。

エフェクトフィルタ
項目 説明
LUT を適用 ・ルックアップテーブルを適用し、カラーグレーディング等を行える。
イメージ マスク/ブレンド ・ソースを切り抜き用の画像と合成します。
・画像ファイル自体にアルファマスクを使用するためにはアルファマスク(アルファチャンネル)を使用します。
カラーキー ・クロマキーと同様、映像の背景を抜きます。
・精度が悪いと感じる場合はクロマキーを使用します。
クロップ/パッド ・映像ソースの不要な部分を上下左右からカットします。
・16:9を21:9にクロップする時など、非常に便利です。位置合わせはソースの右クリックメニュー->変換で行うとズレなくぼやけたりせずに調整できます。
クロマキー ・映像の背景を抜きます。
・より良い結果を得るために、明るい色の背景色を使用してください。
シャープ ・映像をわずかにシャープにします。
・特に配信時の低ビットレート下では品質が大きく低下する場合があります。使用するとしても少量に留めましょう。
スクロール ・映像を連続してスクロールします。
・流れる文字やカラーバーに適用するとダサくて面白いでしょう。
スケーリング/アスペクト比 ・選択されたソースに対し、デフォルトのスケーリングフィルタを上書きします。
レンダリング遅延 ・少しだけ映像を遅らせることができる
・音ズレ(音が遅れる)する場合の調整に役立ちます。
色補正 ・カラーコレクションを行います。
・ガンマ、コントラスト、輝度、彩度、位相、透明度等を弄れます。
・間違った色空間(color space)や色範囲(color range)の設定を無理矢理補正する為のものではありません。
音声/映像フィルタ
項目 説明
VST 2.x プラグイン オーディオインターフェース等のVSTプラグインが対応していれば使用できます。
エキスパンダー ・音声のダイナミックレンジを大きくします。
ゲイン ・音量を大きくできます。
・基本的にオーディオインターフェース側で適切な音量になるように調整しましょう。
コンプレッサー ・音声のダイナミックレンジを小さくします。
・オーディオインターフェイスにこの機能がない場合使用してください。
ノイズゲート ・音量が閾値を超えた場合ゲートを開放することで、環境音やノイズフロアが常に録音される状態を防ぎます。
閾値を超えている時(喋っている間など)は環境音含め全ての音が入ります。
・オーディオインターフェイスにこの機能がない場合使用してください。
ノイズ抑制 ・音声を加工してノイズを目立たなくします。
・音質は劣化します。高品質な録音への近道は、良いオーディオインターフェイスを使用することです。
リミッター ・大きな音を強く抑制します。
映像の遅延 (非同期) ・映像と音声の両方を含むソースの映像のみを遅延させます。
・主に"映像キャプチャデバイス"ソースで使用します。
極性を反転する ・音の位相を反転します。
・オーディオインターフェイスにこの機能がない場合使用してください。

ウィンドウキャプチャ

項目 説明
ウィンドウ 任意 ・キャプチャしたいアプリケーションを起動した状態で、該当するものを選択。
Chrome系ブラウザの画面が取得できない場合、ショートカットの"リンク先"に`--use-angle=gl`を追加するか、chrome://flags/#use-angleを変更する(ハードウェアアクセラレーションを無効化にするのは非推奨)。
・フルスクリーンゲーム等の画面をフックする必要がある場合はゲームキャプチャを使用する。
ウィンドウの一致優先順位 ウィンドウのタイトルに一致する必要があります ・Window title must match
タイトルに一致、そうでなければ同じ種類のウィンドウを見つけます ・Match title, otherwise find window of same type
タイトルに一致、そうでなければ同じ実行可能ファイルのウィンドウを見つけます ・Match title, otherwise find window of same executeble
カーソルをキャプチャ 任意 マウスポインタを映像に含める場合はチェック、含めたくない場合はチェックを外す。
マルチアダプターの互換性 ・VRAM<-->RAM間のフレームコピーが行われ、パフォーマンスに影響するため基本的に無効。
ビデオカードが2枚以上(SLI等)の環境で正常にキャプチャされず真っ暗の場合に有効にする。

どちらの方法もパフォーマンスを悪化させるため、メインのブラウザの設定を弄ることは推奨されない。私はOBS用にChromiumを別途入れて使用している。

ゲームキャプチャ

項目 説明
モード フルスクリーンアプリケーションをキャプチャ ・フルスクリーンのアプリケーションを検出してキャプチャする。
特定のウィンドウをキャプチャ ・ウィンドウタイトルや実行ファイルを参照してキャプチャするウィンドウを選択する。
ホットキーで前面のウィンドウをキャプチャ ・設定->ホットキー->ゲームキャプチャ(ソース名)->全面のウィンドウをキャプチャ/キャプチャを無効化に設定されたキーを押下してウィンドウを選択する。
ウィンドウ 任意 ・キャプチャしたいアプリケーションを起動した状態で、該当するものを選択。
SLI/Crossfire キャプチャモード(遅い) ・VRAM<-->RAM間のフレームコピーが行われ、パフォーマンスに影響するため基本的に無効。
ビデオカードが2枚以上(SLI等)の環境で正常にキャプチャされず真っ暗の場合に有効にする。
強制的にスケーリングする 任意 ・ここでスケーリングしても、スケールフィルタ等を使用してもGPUが使用されるようです[要出典]。使いやすい方を選んでください。
・既にドットバイドットで、リスケールする必要が無い場合は無効にするべきでしょう。恐らく1920x1080に1920x1080のスケールフィルタを適用すると少しぼやけます。
透過を許可 任意 ・有効時はアルファチャンネルを使用できます。
キャプチャのフレームレートを制限する 任意 ・ゲーム側のfpsを無制限、垂直同期(高速)でCPUの過負荷が発生する場合、キャプチャのfpsのみ制限します。
カーソルをキャプチャ 任意 マウスポインタを映像に含める場合はチェック、含めたくない場合はチェックを外す。
アンチチート互換性フックを使用する ・デフォルトで有効。特定のゲームでフックエラーが発生した場合有効。
(steamなどの)サードパーティの製のオーバーレイをキャプチャする 任意
フック速度 通常 ・新しいウィンドウを見つけてフックしようとする間隔
・低速:~4s、通常:~2s、高速:~1s、最速:~0.2s
・通常が推奨され、早く設定することは推奨されません。

テキスト(GDI+)

設定項目が説明そのもので言及することが特にないので端折る。
因みに、テキストファイルの文字コードUTF-8の必要がある。メモ帳等で作成したShift-JIS(ANSI)は文字化けするので注意。

ブラウザ

項目 説明
ローカルファイル 任意 ・インターネットを利用するか、ローカルコピーのパスを指定する。
URL
カスタムフレームレートを使用 ・有効時、映像とは別のフレームレートでレンダリングを行う。
カスタムCSS 任意 ・追加のスタイルシートを適用できる。YouTubeのコメント等の装飾は主にこれが使用されている。
表示されていないときにソースをシャットダウン ・ブラウザソースはリソース喰らいなので、出来れば有効。
シーンがアクティブになったときブラウザの表示を更新 任意 ・ソースを非表示から表示に戻した時にリロードする。
現在のページを再読込 %AppData%\obs-studio\plugin_config\obs-browser\Cache の現在のページのキャッシュをフラッシュする。

メディアソース

項目 説明
ローカルファイル ・基本的に有効。ローカルファイルのみ対応。
・mp4, ts, mov, flv, mkv, avi, mp3, ogg, aac, wav, gif, webmに対応。
#同じコーデックのファイルであれば、txtに記述された複数のメディアをffmpegのconcatで連続して再生できる。
#txtはメディアと同じディレクトリに配置

ffconcat version 1.0
file 'A_Quiet_Thought.mp3'
file 'Absention.mp3'
file 'Acoustic_Circles.mp3'
file 'All_Hail_the_Queen.mp3'
file 'Angelic_Forest.mp3'
・(高度なオプション)無効時、ffmpeg demuxerを使用可能。
現在利用可能なフォーマット(ビルドに依存)(空欄で自動選択):
aa、applehttp、apng、asf、concat、flv(RTMP)、gif、image2、mov、mp4、3gp、QuickTime、mpegts、mpjpeg
繰り返し 任意 ・有効時、無限にループ再生する。
ソースがアクティブになったとき再生を再開する 任意 ・有効時、ソースを再表示すると最初から再生される。
・無効時はミュートのような挙動になる。
可能な場合ハードウェアデコードを使用 ffmpeg同梱のffplayと同様、全ての動画がハードウェアデコードに対応している訳ではない模様(ALL-I等)。
再生終了時にソースを非表示にする 任意 ・有効時、再生が終わったら動画を非表示にします。
・無効時、再生後は最後のフレームの静止画になります。
アクティブでないときにファイルを閉じる 任意 ・有効時、ソースが非表示状態であればファイルを編集可能。ただし、再表示に若干のタイムラグが生じる場合があります。
速度(パーセント) 任意 ・100で等倍速。
YUV色範囲 自動 ・正しくないcolor rangeを指定すると変な色になります。

映像キャプチャデバイス

項目 説明
バイス 任意 ・DirectShowデバイス入力に対応します。
Webカメラやキャプチャボードのドライバや、仮想キャプチャデバイスがインストールされていれば、ここにデバイス名(FaceRig、AVerMedia、Elgato、Blackmagic等)が表示されます。
・OBS使用時はキャプボ付属のアプリケーションを使用しない。
表示中でない場合非アクティブ化する ・チェックすると、表示していないときにデバイスはオフになります。
・映像だけでなく音声も同様です。
解像度/FPSタイプ カスタム ・カスタムに設定すると、下の項目がアクティブになります。
解像度 任意 ・キャプチャデバイス側の解像度に合わせる。
・キャンバス解像度と合わない場合、OBS側のフィルタ等で対応する。
FPS 出力FPSに合わせる
YUV色空間 自動 ・正しくないcolor rangeを指定すると変な色になります。
YUV色範囲 自動 ・正しくないcolor rangeを指定すると変な色になります。
音声出力モード 音声のみをキャプチャ ・これ以外に設定されている場合、音声は一般的なデスクトップ音声デバイスからキャプチャされる可能性があります。

BlackMagick DeckLinkはOBS、FFmpegと親和性が高いので個人的にオススメなキャプチャボード。

DeckLink Quad HDMI Recorder

DeckLink Quad HDMI Recorder

画像

項目 説明
表示中でない画像は読み込まない ・チェックしておくと、非表示時にメモリを開放します。

ミキサー

設定->音声で設定したオーディオソースが表示される。
歯車又は右クリックでオーディオルーティング等の各種設定項目が表示される。

項目 説明
すべて再表示/非表示 音声ソースの表示/非表示を切り替える
名前を変更 表示名を変更できる
フィルタをコピーする/貼り付ける "フィルタ"で設定した項目をコピー&ペースト出来る
垂直レイアウト 既定では横だが、縦のレベルメータ表示に変えることができる。多くの音声デバイスを使用する人にオススメ。
フィルタ オーディオフィルタを使用できる。下記参照。
プロパティ ここでもデバイスの選択を行える。
オーディオの詳細プロパティ オーディオルーティングやパンの設定が出来る。下記参照。

フィルタ

#####音声/映像フィルタと共通。

オーディオの詳細プロパティ

項目 説明
名称 ・表示名。デフォルトでは###音声が表示される。
音量(%) ・音量を調節する。
モノラルにダウンミックス ・オーディオインターフェイスに接続したLチャンネルのみのマイクの音声等をモノラルとして扱うことで、片方からしか聞こえない状態を回避できる。
・オーディオインターフェイスにこの機能がない場合使用してください。
バランス ・左右の音量バランスを調整する。パン。
同期オフセット ・音声の遅延を設定する。
・キャプチャデバイス等で音ズレを起こす場合に有効。
音声モニタリング ・設定->詳細設定で設定した音声モニタリングデバイスへ音を返す設定。
・あくまでもOBS上で適用したフィルタの確認用であり、配信や録画時に使用すべきものではない。
・これは遅延がある為、自分の声をヘッドホン等からモニターしたい場合は、オーディオインターフェースの機能を利用する。
トラック ・配信時は1トラックのみを使用するため、マイク音声、デスクトップ音声含め使用するデバイス全て1のみチェックする。
・録画時はマイク音声とデスクトップ音声を1と2に分けるなど、柔軟に設定可能。###出力でチェックしたトラック数分ストリーム数が確保されていることが前提。もし足りなければそのトラックは録音されない。

統計

ここでは何が原因で配信がカクついているのかの原因の特定を行える。
OBSが重い、配信がカクつく、それらは全てここの値に現れます。
統計を表示しパフォーマンスをモニターすることが、快適な配信への近道です。

表示->ドックで必ずチェックしておきましょう(OBS 23.0~)。

項目 説明
レンダリングラグが原因で逃したフレーム ・この値が増えていく場合、ソースのレンダリングが間に合っていません。
・少々PCのスペックが不足しているかもしれません。
・原因となっているソースを削除するか、ソースを減らします。
・シーン切り替え等で一瞬増える程度は問題ありません。
エンコードのラグが原因で逃したフレーム 設定->出力->配信を参照し、x264でないハードウェアエンコーダを選択したり、プリセットを軽量なものに変更します。
・それでも間に合わない場合はマシンスペックが不足しています。
ドロップフレーム(ネットワーク) ・上り回線速度(fast.com -> 詳細を表示)にビットレートが収まっていないので、設定->出力->配信を参照し見合ったビットレートに合わせてください。
・1080p 30fpsの配信には最低限2桁Mbpsが必要、くらいの目安でしょう。
・映像品質をできるだけ落とさずビットレートを下げるには、ゲームの描画とエンコードの品質を上げ、フレームレートを30fps等に落とすのが最適です。解像度の変更は負荷と品質の観点から非推奨です。
・ネットワーク設定の最適化も有効な場合があります。設定->詳細設定のネットワークの項目を参照。

シーントランジション

シーン切り替え時に様々なトランジションを適用できる。

コントロール

項目 説明
配信開始 ・設定->出力->配信の設定でエンコードを開始します。
録画開始 ・設定->出力->録画の設定でエンコードを開始します。
・録画停止ボタンで停止し、処理が完了するまで必ず待ってください。Xボタンや終了ボタンで強制終了すると、基本的に録画ファイルが破損します。
スタジオモード ・デフォルトではレイアウトの変更、ソースの追加等の作業の様子が配信に映ってしまいます。このモードが有効の場合、内容を決めてから実際の配信映像に適用することができます。
誤爆防止にも有効です。
設定 ・ファイル->設定と同じ。
終了 ・終了

設定

ファイル -> 設定

一般

言語: 日本語

項目 説明
一般 言語 日本語 ・基本的に通常、高は非推奨。

配信

項目 説明
サービス YouTube/YouTube Gaming ・配信プラットフォームの選択。
サーバー Primary YouTube ingest server
ストリームキー(リンク) ・ストリーム名/キーを貼り付ける。
##YouTube側の設定を参照。

出力

項目 説明
出力モード 詳細 ・ここの設定が、配信や録画の品質やパフォーマンスに最も影響する為、高度な設定項目が使用できるモードにします。
音声トラック (配信用プロファイルの場合) 1 ・配信は基本的に映像1つ、音声1つまでです。
・配信時は複数の映像や音声をMixすることになります。
(録画用プロファイルの場合) 1~任意 ・録画時は音声ストリーム数を増やすことができるので、マイク音声とデスクトップ音声を分ける事ができます。
・それらのルーティングはオーディオの詳細プロパティで設定します。
・動画ファイルに1つの映像ストリームと複数の音声ストリームが含まれた状態で出力されます。

配信

"配信開始"押下で選ばれるエンコード設定です。

項目 説明
エンコーダ 1. NVENC H.264 (new)
2. QuickSync H.264
3. H264/AVC Encoder(AMD~)
4. x264
・品質、パフォーマンスの観点から上から順に使えるものを選択して下さい。
Macの場合は"アップル VT H264 ハードウェア~"、Linuxの場合はOBS 23.0から公式対応した"VAAPI"等を選ぶと良いでしょう。
x264

デフォルトではソフトウェアエンコードのx264になっています。
最も設定項目が豊富で、リアルタイムでは不可能ではあるものの、理論上最も高品質な設定が可能です。
要するに配信用途で使う以上、ハードウェアエンコードに勝ることは事実上不可能なので選ぶ必要はありません。

NVIDIA NVENC H.264 (new)

ハードウェアエンコードの最適解、NVIDIAGPUで使用するNVEnc。
Turing世代(Quadro RTX、GeForce TITAN RTX、RTX 2080、2070、1660Ti、1660等)(GTX1650はVolta世代のNVEncの為非推奨)では、Pascal世代と比べ品質が向上している為、配信や録画用途の場合は型落ちを選ぶべきではありません。

OBS 23.0からNVIDIAと共同cf.cf.で開発された最適化されたNVEncが利用できます。
Turing以降だけでなく、Pascal以前にも有効とのことなので、既存ユーザは今すぐアップデートしましょう。

OBS公式TwitterNVIDIAによると、別マシンや別GPUを配信専用とする方法は推奨されないようです。遊びたいゲームがある程度余裕を持ってプレイできるスペックを選ぶと良いでしょう。

youtube.com

項目 説明
エンコーダ NVIDIA NVENC H.264 (new) ・OBS 23.0からの最適化が含まれているnewを選択する。
レート制御 CBR ・CBR推奨、回線に余裕があればVBRでも良い。CQPはライブには不向き。
ビットレート 6000 ・解像度、フレームレート毎に異なるため、YouTubeの推奨値を参考に調節しよう。
・ゲーム配信等で動きが多い場合は値を大きく、逆に動きの少ない静止画や絵描き配信等は値を小さくする。
・(YouTubeの場合)動画と同様、無闇矢鱈にビットレートを上げるよりも、こちら側で破綻しない程度に圧縮すると結果的に良い品質が得られる模様。
・ここの設定値が回線のキャパを超えると統計の"ドロップフレーム(ネットワーク)"の値が増える。
最大ビットレート 7000 VBRの場合有効。エンコード・回線共に問題なくとも配信が不安定になる為あまり大きくしないこと。
キーフレーム間隔(秒) 2 ライブストリーミングの場合、キーフレーム(完全な画像のフレーム)をある程度の頻度で含ませる必要がある。
プリセット Max Quality ・NVEncのパフォーマンスには大抵余剰があるので、出来る限り最高品質を選ぶ。
・もし処理が間に合わず統計の"エンコードのラグが原因で逃したフレーム"の値が増えるようであればQualityやLow-Latency Qualityでも良い。
Profile high ・対応していない機能があるため、baselineやmainは不可。
Look-ahead ・動きの少ないコンテンツに効果的。動きが激しい場合はビットレートを無駄遣いする為、品質が低下する。
・負荷が大きくドロップする場合はオフ。
・無効時は常に"最大Bフレーム"。
心理視覚チューニング ・有効時は、ビットレートの使用方法が大幅に最適化され、特に動きの激しいシーンで視覚品質が向上する。
GPU 0 GPUを複数挿している場合、それを選択できます。ただし、別GPUにフレームをコピーする過程でメリットが失われる為、NVIDIAにより非推奨。
最大Bフレーム 2 ビットレートが限られる環境下では、差分であるBフレームは品質保持に有効です。
・動きが少なく、ブロックノイズや纏わりつくようなアーティファクトが出なければ4に増やしても良いでしょう。
QuickSync H.264

Intel製iGPU(CPUの内蔵グラフィック)搭載の、Quick Sync Video(QSV)が使えるモデルで有効な機能です。Intelの公式サイトで確認できます。

項目 説明
エンコーダ QuickSync H.264 ・プルダウンメニューでQSVが選べない場合、BIOSでiGPUを有効にする必要があります。
・NVEncが使える場合は配信用途でQSVを有効にする必要はありません。
ターゲットの使用法 quality ・パフォーマンスに余剰がある限りできるだけ品質優先。統計の"エンコードのラグが原因で逃したフレーム"の値が増えるようであればbalanced等に下げても良い。
プロファイル high ・少なくともmain以上。
キーフレーム間隔(秒) 2 ライブストリーミングの場合、キーフレーム(完全な画像のフレーム)をある程度の頻度で含ませる必要がある。
非同期深度 4 ・既定値。パフォーマンスに関する設定。
レート制御 CBR ・CBR推奨、回線に余裕があればVBRでも良い。CQPやLA_ICQはライブには不向き。
ビットレート NVEnc H.264を参照
最大ビットレート
H.264/AVC Encoder (AMD Advanced Media Framework)
項目 説明
・処理速度は申し分ないものの品質に難があるため、配信・録画以外の用途が向いていると思われる。
・Turing世代以降のNVIDIAGPUを使用したNVEncか、Haswell以降のQSVを推奨。
アップル VT H264 ハードウェアエンコーダ

MacOSではこちらを選ぶしかないようです。

項目 説明
エンコーダ アップル VT H264 ハードウェアエンコーダ
ビットレート 5500 NVEncを参照
限界ビットレート ・これを有効にしないと、ビットレートが大きく変動し、配信が安定しない・途切れてしまうようです。
最大ビットレート 6500 ・"限界ビットレート"が有効の場合表示される。配信用途においてビットレートを制限する目的なので大きくし過ぎないこと。
最大ビットレート ウィンドウ(秒) 1.00 ・既定値
キーフレーム間隔(秒) 2 ライブストリーミングの場合、キーフレーム(完全な画像のフレーム)をある程度の頻度で含ませる必要がある。
プロファイル high ・少なくともmain以上。
B フレームを使用する NVEncを参照

録画

"録画開始"押下で選ばれるエンコード設定です。

因みにYouTubeの推奨値。あくまでもアップロード用の最終出力の推奨値であり、編集前のソースとして使う場合はこの値は推奨されない。
support.google.com

FFmpegの詳細はこちら。
nyanshiba.hatenablog.com

項目 説明
種別 カスタム出力 (FFmpeg) ・OBS組み込みではなく、FFmpegを使用したエンコードを行う。
・設定可能な項目が大幅に増える。
FFmpegはいいぞ。
FFmpegの出力の種類
ファイルパス又はURL
ファイルに出力 フォルダを参照又は直接ディレクトリのパスを記述。基本的に録画機能。
URLに出力 rtmp URLを記述するとRTMP配信が可能。録画の説明ということで割愛。
コンテナフォーマット mpegts ・一般的にはmp4を選択する。
・mpegtsを選ぶと録画中に当該ファイルの再生、エンコードが可能。OBSがクラッシュして録画が強制終了しても、動画ファイルとして壊れることはない(mp4ではmoov atomが壊れて再生・編集不可)のが特徴。
ffmpeg -i input.ts -c copy out.mp4で無劣化コンテナ変換が行えるので安心。
・一般的にはデジタル放送やライブストリーミングに使用される。
マルチプレクサーの設定(ある場合) movflags=frag_keyframeを追加すると、mp4でも強制終了に一応対応するが、mpegtsの方が使い勝手が良いよ。
映像ビットレート 30000 ・あればある程良いが、ディテールが潰れない程度にビットレートが割り当てられてば十分。実際のところストレージの容量・速度と相談。
キーフレーム間隔(フレーム) 15 ・ここでは秒ではなくフレーム数であることに注意。
・編集、YouTubeへのアップロードに適したclosed gop(フレームレートの半分)。
出力をリスケールする ・ここではリスケール(リサイズ)しない。
すべてのコーデックを表示(潜在的に互換性がない場合でも) ・mpegtsを選択した場合、チェックしないとプルダウンメニューに表示されない。
音声ビットレート 320
音声トラック ### 出力の音声に関する項を参照。
音声エンコーダ aac aacで十分。マイクやAIFの品質の方が音質への影響は大きい。
・PCM録音が必要な場合はpcm_s16le等を使用する。
音声エンコーダ設定(ある場合)
hevc_nvenc
項目 説明
映像エンコーダ hevc_nvenc NVIDIAGPUを使用している場合、最も推奨。
H.264より高品質で圧縮率が高い。
・ローカル保存用としても、YouTubeへのアップロードにも適している。
・4K60や8KはH.264の場合規格外となる。
・再生負荷は大きい。GPUによってはデコード・エンコードに非対応。
映像エンコーダ設定(ある場合) profile:main preset:slow rc:vbr_hq bf:2 FFmpegと比較すると、引数指定はハイフンではなく値との間にコロンを入れる。
・profileはmain(8bit)。highはなく、main10は10bit。
・presetはslow(High Quality 2pass)。
・rc(レートコントロールプリセット)はvbr_hq。編集ソースとして適し、cbr_hq同様無印より高品質(Pascal以前では逆転するという情報もあるが、手元のRTX 2080では明らかにvbr_hqに分があった)。
bf(B-Frame最大数)は2程度。ただし、Pascal以前は非対応cf.なのでbf:0と明示すること。このB-framesが使えるかどうかの差が結構大きいんだよね。
h264_nvenc
項目 説明
映像エンコーダ h264_nvenc NVIDIAGPUを使用している場合で、HEVC編集に難があるか、ビットレートを潤沢に割り当てられる場合こちらを推奨。
・HEVCと比べ品質は劣るものの互換性は高い。
・編集ソフトで扱う際に負荷が小さい。
・旧世代のGPUでもデコード・エンコードに対応。
映像エンコーダ設定(ある場合) profile:high preset:slow rc:vbr_hq bf:2 ・profileはhigh。
・presetはslow(High Quality 2pass)。
・rc(レートコントロールプリセット)はvbr_hq。編集ソースとして適し、cbr_hq同様無印より高品質。
・bf(B-Frame最大数)は2程度。
h264_qsv
項目 説明
映像エンコーダ h264_qsv ・NVEncが利用できず、QSVが使用できる場合に推奨。
FFmpegカスタム出力で使用するには、QSVが組み込まれたFFmpegでOBSをビルドする必要がある。標準モードでは設定できる内容が少ないが、ソフトウェアエンコードを使用するよりは良い。
・hevc_qsvは品質、速度面で一切優位性が無いので使用しない。次期Intel CPUに期待。
映像エンコーダ設定(ある場合) profile:high preset:veryslow maxrate:3M bf:2 b_strategy:1 look_ahead:1 look_ahead_depth:60 ・profileはhigh。
・presetはveryslow(High Quality 2pass)。
編集ソースとして適し、cbr_hq同様無印より高品質。
・bf(B-Frame最大数)は2程度。
lookahead:1はHaswell以降対応、非対応のCPUではlookahead:0
utvideo
項目 説明
コンテナフォーマット avi
映像エンコーダ utvideo 可逆圧縮エンコードの中でも互換性が高く、効率が良いと言われている。
・"編集用"にロスレスで録画したい場合はこちらを推奨。
・ストレージの性能と容量に余剰が無ければ非推奨。
映像エンコーダ設定(ある場合) pred:median pred:gradientエンコード/デコード速度と圧縮率のバランスが良く、pred:medianの方が圧縮率が高い。
音声エンコーダ pcm_s16le ・PCM signed 16-bit little-endian
x264
項目 説明
映像エンコーダ libx264 ・そもそもソフトウェアエンコードはハイスペックなPCであっても高負荷であり、リアルタイムエンコードに向かないことに注意。
・ただし、上記のハードウェアエンコーダが使えないPCで、(ゲーム等ではなく)絵やデスクトップ操作等の録画用であれば、x264でも賄える場合がある。
映像エンコーダ設定(ある場合) preset:placebo x264-params=crf=20:rc-lookahead=60:qpmin=5:qpmax=40:qpstep=16:qcomp=0.85:mbtree=0:vbv-bufsize=31250:vbv-maxrate=25000:aq-strength=0.35:psy-rd=0.35:keyint=15:no-open-gop:bframes=2:partitions=p8x8,b8x8,i8x8,i4x4:merange=64:ref=4:no-dct-decimate=1 ・x264 placeboでclosed gopな引数。
・8700無印、1920x1080 60fpsでギリギリといったところ。

音声

ライブ配信用プロファイル
項目 説明
トラック1 音声ビットレート 128 ライブ配信用のプロファイルでは、トラック1のみ設定してあれば良い。
YouTubeの推奨値は128kbps
名称 任意 ・ストリームのメタデータに明示する事ができる。
・複数音声ストリームを使用する場合に便利。
録画用プロファイル
項目 説明
トラック1 音声ビットレート 320 ・録画用のプロファイルでは、### 音声で使用するトラック数分設定する。
・例: マイク音声、デスクトップ音声の2つ
トラック2

音声

項目 説明
サンプリングレート 44.1kHz YouTubeの推奨値は44.1kHz。ただし、一般的な動画は48kHzが多いので、用途によってプロファイルを分けると良い。
チャンネル ステレオ ・大抵のプラットフォームはステレオ。特殊な用途でない限り弄らない。
デスクトップ音声デバイス スピーカー
SPDIF
ライン
Windows上の"再生デバイス"に該当する。
・スピーカーやヘッドホン、オーディオインターフェイスの出力デバイス名を選択する。
・AIFのループバック機能を使用する場合はデスクトップ音声がマイク音声に返される。その場合こちらを有効にする必要はないが、ボイスチャットや分けて編集したい場合はそれを使用せずOBSの機能を使おう。
Windows Update、AIFの抜き差し、サンプルレートの変更等でDeviceIDが変更されると、"デバイスが接続されていないまたは利用不可"になります。再設定が必要です。
マイク音声デバイス マイク
ライン
Analog Input
Windows上の"録音デバイス"に該当する。
・マイク、ウェブカメラ、オーディオインターフェイスの録音デバイス名を選択する。
・複数デバイスにそれぞれループバックを設定できるAIF(RME TotalMix等を使用して)の場合、再生デバイスをこちらに登録することもできる。マイク、Discord、Minecraft、BGMをそれぞれ別のデバイスで再生することで、アプリケーション毎に音声を分けて録音できる。
Windows Update、AIFの抜き差し、サンプルレートの変更等でDeviceIDが変更されると、"デバイスが接続されていないまたは利用不可"になります。再設定が必要です。

映像

項目 説明
基本(キャンバス)解像度 3840x2160
2560x1440
1920x1080
1280x720
・OBSの映像ソースを配置するキャンバスの解像度。
・解像度の変更は負荷と品質に悪影響があるので、基本的に出力解像度に合わせる(ドットバイドット)。
・16:9のモニタが推奨される。配信、録画用途では16:10や21:9の解像度は不具合の元なのでオススメしない。
出力(スケーリング)解像度 3840x2160
2560x1440
1920x1080
1280x720
・配信、録画の出力解像度。
・解像度の変更は負荷と品質に悪影響があるので、基本的にディスプレイまたはメインのソース(ゲーム等)の解像度に合わせる(ドットバイドット)。
・配信プラットフォームが対応している限り、ビットレートや負荷軽減の為のダウンサンプリングは推奨されない。
縮小フィルタ バイキュービック
ランチョス
・リサイズアルゴリズムの選択。
・bicubicまたはlanczosを選んでおけば良い。bicubicの方が負荷は小さく、lanczosの方が一般的に高品質。
FPS共通値 30
60
・動画投稿SNSにアップロード、ライブ配信には30または60fpsを選択する。29.97や59.94fpsは基本的に使用しない。
ビットレートが潤沢に割り当てられていない場合、下手に60fpsにするよりも30fpsの方が視覚的な品質は向上する。
・映画風のテイストにしたい場合、プラットフォームが対応していれば24fpsもあり。
FPS分数値 30fps: 30/1
60fps: 60/1
・基本的にこちらを使う必要はない。FPS共通値で選べないようなフレームレートを選びたい場合はこちらで指定する。
・1/1fps、1/6fps、1/15fps等も使える。これを使ったハックを ##応用 編で紹介している。
・29.97fpsは30000/1001fpsに該当する。

ホットキー

ミュート、ミュート解除にDiscordのミュートのキーを割り当てておくと便利だよ!
録画開始・終了に割り当てるのは良いが、配信は誤爆防止の為にここで設定するようなキーの組み合わせを使う一般的なキーボードやマクロには割り当てるべきではない(Elgato Stream Deckの場合は仕組みが違うので例外)。

詳細設定

項目 説明
一般 プロセスの優先度 通常 ・基本的に通常、高は非推奨。
映像 カラーフォーマット NV12 ・ハードウェアエンコーダに使用される4:2:0のピクセルフォーマット。YouTubeの推奨値でもあり、他のプラットフォームでも基本的にこちらを使用する。
YUV色空間 709 ・BT.601に設定すると色がおかしくなる場合があります。
・BT.2020には現在非対応です。
・Rec.709、BT.709
YUV色範囲 一部 ・一部は所謂リミテッドレンジ、TVスケール。全部はフルレンジ、PCスケール。
・全部で配信、録画してもYouTube側でyuv420p(tv, bt709)に再エンコードされます。
音声 音声モニタリングデバイス 既定 ・ミキサー->オーディオの詳細プロパティで設定した場合の出力先。基本的に使用しない。
録画 ファイル名書式設定 %YY%MM%DD_%hh%mm%ss ・ファイル名にハイフンは兎も角、スペースが入るのは好ましくない。
・この場合、190405_150000.tsのようになる
ネットワーク 新しいネットワークコードを使用する ・ノンブロッキングソケットではなく、イベントベースのAPIをストリーミングに使用します。フレームドロップや切断に役立つ場合があります。
低遅延モード ・配信プラットフォーム側で設定する"低遅延"のような、配信者と視聴者の間の待ち時間ではなく、ローカルネットワークの待ち時間を指します。
・大きなビデオパケットが小さなパケットに分割され、パケット間に遅延を置いて送信されます。ストリーミングの際にゲームなどの他のアプリケーションのpingへの影響を減らします。
・安定した回線でない場合、フレームドロップの原因になります。

ソースの表示/非表示のキーとスタジオモードと一緒に使う場合、トランジションに同じキーを割り当てれば可能だが、あまり自由度が無いので敢えてスタジオモードを使わないという選択肢もある。
ソース->ソースの右クリックメニュー->変換で述べたような手順ならば、比較的スマートにレイアウトを弄れるという意味でもオススメ。

YouTube側の設定

配信時はOBSで映像・音声のソース、エンコードの設定を行い、YouTube等の設定でタイトルや概要、公開設定や遅延等のプラットフォーム側のモード選択を行います。

配信プラットフォーム側の設定画面に記載されているRTMP URLに対してストリーミングすることで、YouTube側で設定されたタイトル等が適用され、視聴者側に反映されます。

ライブダッシュボード

配信・コメントのプレビュー、YouTube側の設定を行う
www.youtube.com

基本情報

タイトル、概要欄はお好みで。
#Minecraft #Apex #Fortnite のように入れるとタイトルの場合はタイトル文字列内に、概要欄の場合はタイトル上にタグを表示できる。
カテゴリは"ゲーム"を選択し、該当するものを選んでおくと良い。
プライバシーは取り敢えず誤爆防止に"非公開"(又は限定公開)で。配信設定が終わったら"公開"にしてライブしてみよう。

ストリームオプション

DVRを有効にする: 視聴者が再生時に巻き戻せるか否か。お好みで。
完了時にアーカイブを限定公開にする: 非公開ライブのアーカイブは既定で非公開、限定公開・公開も同様に引き継ぐが、公開でライブ後も既定で限定公開にすることも可能。
ストリームの最適化: 画質を優先する場合や4Kの場合は通常の遅延。品質を犠牲にコメントとの会話を優先するなら低遅延や超低遅延。

エンコーダーの設定

ストリーム名/キーをOBSで使用する。サーバURLは基本不要(FFmpegカスタム出力等で使用する)。

応用

配信・録画品質を保つ為に気を付けること

OBS側を煮詰めても、上流であるプレイ画面や操作画面等の映像、マイクや楽器等の音声ソースが汚ければ、それ以上の品質は出ません。
映像は余裕のあるスペックのマシンでゲームを綺麗に描画し、音声は良いプリアンプとADを載せたAIFを使用しましょう。
そして最後に、出来る限り綺麗なエンコードが可能なTuring世代のNVIDIAGPUを選びましょう。

私のメインPCと周辺機器から録画・配信に関連する項目をリストしておきます

Type          Name
----          ----
OS            Microsoft Windows 10 Pro
CPU           Intel Core i7-8700
dGPU          NVIDIA Geforce RTX 2080 FE
DRAM          Crucial CT2K16G4DFD8266
M/B           GIGABYTE Z370 AORUS Gaming 7
SSD           SanDisk SDSSDXPM2-1T00-J25
Power Supplie Seasonic PRIME Ultra 650 W Titanium (SSR-650TR)
Case          Fractal Design Define R6 TG Black
FAN           Scythe 虎徹 Mark II
FAN           Noctua NF-B9 redux-1600
FAN           Noctua NF-P14s redux-1500 PWM x3
HDD           WD PURPLE WD40PURZ x2
Mic           SPL(Hong Kong)Limited XCM6035
XLR           RODE VXLR+
XLR           CANARE EC03
AIF           RME Babyface Pro

OBSに画質を求めるのは間違っていません。

YouTubeの劣悪エンコード事情への対処法

YouTubeはアップロードされた動画を全て再エンコードすることはよく知られています。
良くある間違いは「できる限り高ビットレートエンコードしたものをアップロード」というものですね。

YouTubeのエンコーダは解像度に対してビットレートが小さく、更に然程頭が良くないため、実際のところは自分のマシンで出来る限り破綻しないよう上手く圧縮してからうpするのが推奨されます。

ただ、幾ら凝った引数でエンコードしようと品質的にも時間的にも限界があるので、疑似4Kでうpしてビットレートを無理矢理稼いでしまうという方法が一応ある。本来はYouTubeの8KですらFHDには足りないビットレートなのじゃ。

ffmpegのビデオフィルタで1920x1080を3840x2160にニアレストネイバー法でアップコンバートし、hevc_nvnecでエンコードする例。
前述の通り、-bf 2はTuring以降のみ使用可能、Pascal以前は-bf 0とすること。

ffmpeg -i input.mp4 -c:a copy -vf scale=3840:2160:sws_flags=neighbor -c:v hevc_nvenc -preset:v slow -profile:v main -rc:v constqp -rc-lookahead 32 -init_qpI 23 -init_qpP 24 -init_qpB 25 -g 15 -bf 2 -pix_fmt yuv420p -movflags +faststart out.mp4

nyanshiba.hatenablog.com

現在のYouTubeでは、映像はH.264とVP9、音声はAACとOpusが生成されるが、動画によって(再生回数や映像のタイプが判断基準?)VP9が生成されない場合がある(再生ペイン右クリック->詳細統計情報で確認)。品質にアドバンテージのあるVP9が生成されないのは由々しき事態だ。
そんな場合にも疑似4Kは有効で、強制的にVP9を生成させる事ができる。ぐへへ。
因みにopusが必ず生成されるとは限らない。

疑似8Kサンプル
www.youtube.com

あとはニコニコの方がまだ多くビットレートをくれるので、プラットフォームを変えるという手もある。

アプリケーション毎に音声を分けて録音する

VoiceMeeter Banana等も一応ありますが、ToTalMIx Fxが使用できるRMEオーディオインターフェースが最適でしょう。
アプリケーション毎に別のデバイスから音声を出力させるよう設定し、その全ての音をモニターしたり、それらの中で任意の音声デバイスをそれぞれ別のストリームに録音できます。

普通はせいぜい2、3デバイスしかなく、別のデバイスの音を聴くことは出来ないが、それが6入出力デバイスあり、それらの音を全て聴けて、それぞれ自由にルーティング出来るとしたら…?
例えば、foobarやDiscord等は出力先を選べる。Minecraftは起動時の"既定のデバイス"から音が出る。
通話の内容とゲーム音を分けて録音できたら…?
棒読みちゃんにコメ読みさせて、他のライブの音を入れず配信できたりしたら…?
ライブ配信の音声の確認をライブに載せずに確認できたら…?
ボイチェンのルーティングをAIFで完結できたら…?
そんな夢のデバイスが世にはあります。
AD/DAの品質を抜きにしても、少なくともWindows上で配信・録画用途で使用する場合、同価格帯のUniversal Audio Apollo Twin MkII等とは比べ物にならないアドバンテージがあると言えるでしょう。

RME ヘッドホンアンプ・DAC Babyface Pro

RME ヘッドホンアンプ・DAC Babyface Pro

ただ私も(紆余曲折を経て)愛用しているBabyface Pro、Dynamics(Expander/Gate)機能が省かれている点のみ少々残念だ。
OBSやDiscordに最低限の機能はあるのでそれを承知で購入したのだが、やはり少々不便な時もある。
対応の有無は日本支部公式のPDFを参照。
https://synthax.jp/pdf/RME_TotalMix-FX-2017.pdfsynthax.jp

OBSだけでBGMを再生・曲名を表示

メディアソースにはffmpegのconcatが組み込まれていることは解説したが、それを利用して、曲名が書かれた映像を流せば、BGMは勿論、工夫すれば曲名もOBS単体で流せる。

OBS単体でBGMを流すことには理由がある。
メディアソースはOBS内の仮想音声デバイスとして機能するため、自分が聴きたくない場合、編集時にデスクトップ音声と一緒になっていては困る場合等に有効だ。

曲名とBGMのaviを一括生成し、OBSのメディアソースに対応したinput.txtを出力するPowerShellスクリプトを書いた。
1. ffmpegをインストール

  1. 下記スクリプトを拡張子.ps1で保存。
    日本語環境において、Windows PowerShellの場合はShift-JIS(ANSI)、PowerShell Coreの場合はUTF-8で保存。
  1. 設定を行う

・Input: BGM素材が詰まってるディレクトリ(フォルダ)を指定します。
・Output: Audio:BGM、Video:BGMのファイル名なaviファイルの出力先を指定します。

・Input、Output両方とも指定した場合: Outputの中にOBSに登録するinput.txtが出力されます。
・Inputのみ指定した場合: Inputの中にinput.txtが出力されます。
・input.txt内に記述されるBGMの再生順は、このスクリプトを実行する度にランダムです。aviの並びを再度シャッフルしたい場合は、InputにOutputのパス(aviディレクトリ)を書き、Outputを例にならって#コメントして下さい。

・Resolution、FontSize、FontFileは任意に設定して下さい。
・FontFileのパスのフォーマットは、通常のWindowsの表記と異なるため注意して下さい。

$Settings =
@{
    #Input,Output指定: Output\input.txt Inputのみ指定: Input\input.txt
    #BGM素材入力ディレクトリ
    Input = "C:\Users\sbn\Music\audiolibrary"
    #Input = "C:\Users\sbn\Music\minecraft\sounds\music"
    #Input = "C:\Rec\audiolibrary"

    #avi出力ディレクトリ
    Output = "C:\Rec\audiolibrary"
    #Output = "C:\Rec\minecraft"

    #解像度
    Resolution = "640x40"

    #フォントサイズ
    FontSize = 32

    #フォントファイル
    FontFile = 'C\://WINDOWS/Fonts/consola.ttf'
}
  1. powershell(5.1、6.1.1で動作確認)でスクリプトを実行
    Win-R -> powershellWindows PowerShellを起動。
#絶対パスの場合
C:\DTV\pwsh\AudioMediaSource.ps1

#相対パスの場合
.\AudioMediaSource.ps1

#外部から実行する場合
powershell .\AudioMediaSource.ps1
pwsh .\AudioMediaSource.ps1

OBSで動画編集する

こいつ何言ってるんだ、と思うかもしれないが先日も私はFFmpegで動画編集したし、
一つ上の項を実践された方はもう既にOBS、FFmpegで動画編集している(???)。

メディアソースにはffmpegのconcatが組み込まれていると言ったが、これにはもう少し機能が含まれている。

以下のようなテキストファイルを動画ファイルと同じディレクトリに置いて、それをメディアソースに追加すると動画編集(カット・連結)が始まる。
同じコーデック・解像度・フレームレート・色空間でないと正しく動作しない(FFmpegで再エンコードなしで動画編集出来る条件と同じ)。

#これ忘れない
ffconcat version 1.0

#コメントは
file 'VNSG1857.MOV'

file 'OTWL2920.MOV'
inpoint 5

file 'TWZZ6601.MOV'
outpoint 9

#なんかいい感じのシーン
file 'TWZZ6601.MOV'
inpoint 20
outpoint 29

file 'VVFG0977.MOV'

file 'GNFC3758.MOV'

#みたいに使えるよ

イメージ

file 'TWZZ6601.MOV'
inpoint 20
outpoint 29

                          |<--- Play --->|
+-'TWZZ6601.MOV'----------+--------------+-------
0                    inpoint 20    outpoint 29

ソースが条件に合わなかったり、更に凝ったことをしたい人はffmpegfilter_complexで頑張ってください。
複数解像度の動画に、それぞれのソースによってフィルタ処理を変えられるので、編集ソフトの簡易的な部分ならffmpegだけで出来るよ。
例によってGUIが無いので、史上最も軽い動画編集ソフトだよ![要出典]

Discordのオーバーレイを表示する

Discordのデスクトップアプリケーションにはゲーム内にオーバーレイを表示する機能がある。
しかし、それが表示されない環境であったり、表示したくないが配信に載せたい場合に役立つAPIをDiscordが用意してくれている。
streamkit.discordapp.com

  1. デスクトップ版Discordを起動
    ※アプリケーションが認識されない場合、"CAN'T CONNECT TO THE DISCORD CLIENT"と表示されます。
  2. Install for OBSをクリック
  3. 必要なウィジェットを選択します。ボイスチャットの様子を表示するには"VOICE WIDGET"を選択。
  4. Server、Voice Channelを選択します。テキストや色をカスタマイズすることもできます。

  1. OBSの"ブラウザ"ソースを追加します。
  2. URLを貼り付けて、width、heightを合わせます。

・因みにURLの一部をコピーすれば、容易に複数ボイスチャンネルを同じ見た目にすることができる。
・デスクトップ版Discordを起動中にOBSを起動すると、このソースが有効でなくても勝手にボイスチャンネルに接続してしまう仕様のようだ。録画と配信でシーンコレクションを分ける等の対応が必要。

YouTubeのコメントを表示する

YouTube Liveの仕様で、映像と一緒にコメントが表示されるのはモバイルのみ。
デスクトップユーザはフルスクリーン状態ではコメントが表示されない。
また、華を添える意味合いで装飾したコメントを映像に被せたい方も居るだろう。

YouTubeのコメントはライブダッシュボードのチャット->チャットをポップアウトで表示されたウィンドウのURLを、OBSのブラウザソースに追加し、CSSを適用することで好みの見た目にカスタマイズして映像に合成できる。
ただ一からCSSを書けというのは酷だが、chatv2という有志によるGUIでYouTubeLiveのコメント用CSSを生成できるウェブツールがある。
chatv2.septapus.com

フォントはGoogle産のNoto Sans JPがオススメ。ヒラギノっぽいし。
以下はそれに加えblockで要素が縦に並ぶようにした例。

@import url("https://fonts.googleapis.com/css?family=Noto+Sans+JP");

/* Background colors*/
body {
  overflow: hidden;
  background-color: rgba(0,0,0,0);
}
/* Transparent background. */
yt-live-chat-renderer {
  background-color: transparent !important;
}
yt-live-chat-text-message-renderer,
yt-live-chat-text-message-renderer[is-highlighted] {
  background-color: rgba(0,0,0,0.30) !important;
}

yt-live-chat-text-message-renderer[author-type="owner"],
yt-live-chat-text-message-renderer[author-type="owner"][is-highlighted] {
  background-color: transparent !important;
}

yt-live-chat-text-message-renderer[author-type="moderator"],
yt-live-chat-text-message-renderer[author-type="moderator"][is-highlighted] {
  background-color: transparent !important;
}

yt-live-chat-text-message-renderer[author-type="member"],
yt-live-chat-text-message-renderer[author-type="member"][is-highlighted] {
  background-color: transparent !important;
}


yt-live-chat-author-chip #author-name {
  background-color: transparent !important;
}
/* Outlines */
yt-live-chat-renderer * {
  
  font-family: "Noto Sans JP";
  font-size: 20px !important;
  line-height: 20px !important;
}

yt-live-chat-text-message-renderer #content,
yt-live-chat-legacy-paid-message-renderer #content {
  overflow: initial !important;
}

/* Hide scrollbar. */
yt-live-chat-item-list-renderer #items{
  overflow: hidden !important;
}

yt-live-chat-item-list-renderer #item-scroller{
  overflow: hidden !important;
}

/* Hide header and input. */
yt-live-chat-header-renderer,
yt-live-chat-message-input-renderer {
  display: none !important;
}

/* Reduce side padding. */
yt-live-chat-text-message-renderer,
yt-live-chat-legacy-paid-message-renderer {
  padding: 8px 16px !important;
}

yt-live-chat-paid-message-renderer #header {
  padding: 8px 16px !important;
}

/* Avatars. */
yt-live-chat-text-message-renderer #author-photo,
yt-live-chat-paid-message-renderer #author-photo,
yt-live-chat-legacy-paid-message-renderer #author-photo {
  
  width: 24px !important;
  height: 24px !important;
  border-radius: 24px !important;
  margin-right: 12px !important;
}

/* Hide badges. */
yt-live-chat-text-message-renderer #author-badges {
  display: none !important;
  vertical-align: text-top !important;
}

/* Timestamps. */
yt-live-chat-text-message-renderer #timestamp {
  
  color: #999999 !important;
  font-family: "Noto Sans JP";
  font-size: 16px !important;
  line-height: 16px !important;
}

/* Badges. */
yt-live-chat-text-message-renderer #author-name[type="owner"],
yt-live-chat-text-message-renderer yt-live-chat-author-badge-renderer[type="owner"] {
  color: #ffd600 !important;
}

yt-live-chat-text-message-renderer #author-name[type="moderator"],
yt-live-chat-text-message-renderer yt-live-chat-author-badge-renderer[type="moderator"] {
  color: #5e84f1 !important;
}

yt-live-chat-text-message-renderer #author-name[type="member"],
yt-live-chat-text-message-renderer yt-live-chat-author-badge-renderer[type="member"] {
  color: #0f9d58 !important;
}

/* Channel names. */
yt-live-chat-text-message-renderer #author-name {
  color: #eeeeee !important;
  font-family: "Noto Sans JP";
  font-size: 14px !important;
  line-height: 24px !important;
}

yt-live-chat-text-message-renderer #author-name::after {
  content: " ";
  margin-left: 8px;
}

/* Messages. */
yt-live-chat-text-message-renderer #message,
yt-live-chat-text-message-renderer #message * {
  color: #cccccc !important;
  font-family: "Noto Sans JP";
  font-size: 18px !important;
  line-height: 24px !important;
  display: block; /*Messages Appear Under Author Name Instead Of Beside It*/
}


/* SuperChat/Fan Funding Messages. */
yt-live-chat-paid-message-renderer #author-name,
yt-live-chat-paid-message-renderer #author-name *,
yt-live-chat-legacy-paid-message-renderer #event-text,
yt-live-chat-legacy-paid-message-renderer #event-text * {
  color: #ffffff !important;
  font-family: "Noto Sans JP";
  font-size: 20px !important;
  line-height: 20px !important;
}

yt-live-chat-paid-message-renderer #purchase-amount,
yt-live-chat-paid-message-renderer #purchase-amount *,
yt-live-chat-legacy-paid-message-renderer #detail-text,
yt-live-chat-legacy-paid-message-renderer #detail-text * {
  color: #ffffff !important;
  font-family: "Noto Sans JP";
  font-size: 18px !important;
  line-height: 18px !important;
}

yt-live-chat-paid-message-renderer #content,
yt-live-chat-paid-message-renderer #content * {
  color: #ffffff !important;
  font-family: "Noto Sans JP";
  font-size: 18px !important;
  line-height: 18px !important;
}

yt-live-chat-paid-message-renderer {
  margin: 4px 0 !important;
}

yt-live-chat-legacy-paid-message-renderer {
  background-color: #0f9d58 !important;
  margin: 4px 0 !important;
}

yt-live-chat-text-message-renderer a,
yt-live-chat-legacy-paid-message-renderer a {
  text-decoration: none !important;
}

yt-live-chat-text-message-renderer[is-deleted],
yt-live-chat-legacy-paid-message-renderer[is-deleted] {
  display: none !important;
}

yt-live-chat-ticker-renderer {
  background-color: transparent !important;
  box-shadow: none !important;
}
yt-live-chat-ticker-renderer {
  display: none !important;
}


yt-live-chat-ticker-paid-message-item-renderer,
yt-live-chat-ticker-paid-message-item-renderer *,
yt-live-chat-ticker-sponsor-item-renderer,
yt-live-chat-ticker-sponsor-item-renderer * {
  color: #ffffff !important;
  font-family: "Noto Sans JP";
}

yt-live-chat-mode-change-message-renderer, 
yt-live-chat-viewer-engagement-message-renderer, 
yt-live-chat-restricted-participation-renderer {
  display: none !important;
}

@keyframes anim {
0% { opacity: 0; }
0.6578947368421052% { opacity: 1; transform: none;}
99.3421052631579% { opacity: 1; transform: none;}
100% { opacity: 0; }
}

yt-live-chat-text-message-renderer,
yt-live-chat-legacy-paid-message-renderer {
  animation: anim 41600ms;
  animation-fill-mode: both;
}

配信に友人視点の映像を載せる

友人に限定公開または公開でライブ配信して貰い、そのURLを"ブラウザ"ソースに取り込めば良い。
ただし、許可なく他人の動画を使用する権利はないことだけ要注意だ。垢BANチキンレースをしたい方はどうぞ。

  1. 以下のURLの末尾の英数字の羅列を友人の配信URLのものに置き換える。
https://www.youtube.com/embed/zF92Ok4GQaE?autoplay=1

再生ページで実行すると勝手に置き換えてくれるブックマークレット

javascript:var title = window.location.href;if (title.indexOf('https://www.youtube.com/watch') == 0) { (function(){ window.open(title.replace('watch?v=','embed/')+'?autoplay=1'); })(); }
  1. "ブラウザ"ソースを追加する。
  2. URLを入力し、幅と高さをキャンバス解像度に合わせる。

エンコード無しで数百倍速のタイムラプスをつくる

一般的な動画編集ソフトのフィルタでは、8倍速まで、のように制限があったり、プレビューが重くなったりと限度がある。
しかし、動画の構造を理解していれば、再エンコード無しで数十、数百、数千倍速の動画、もといタイムラプスを容易につくることができる。
この方法なら24時間録画し続けても、然程のファイルサイズにならないというメリットもある。
例えば、1fpsで録画した動画のタイムスタンプを無視して30fpsとして読み込むと、1x30=30倍速となる。

録画時のFPS キーフレーム間隔
(フレーム)
30fpsにした場合の倍率
全フレームを使用 キーフレームのみ使用
30fps 15 (1x) 60x
60fps 30 (1/2x) 60x
1fps 4 30x 120x
1/6fps 4 180x 720x
1/15fps 4 450x 1800x

30fpsや60fps等の等倍速の動画として使えるものでも、後からキーフレームのみ使用することで簡単に早送りを生成することが可能。

1fpsや1/6fps等のタイムラプス専用の動画も、全フレームを使用する場合とキーフレームのみ使用する場合の2通りの倍速が再エンコード無しで作成可能。

因みに、全フレームがキーフレーム(ALL-I)の場合、"全フレームを使用"="キーフレームのみ使用"となる。
ビタミンC1個分のレモンがビタミンC1個分なのと同様である。

では実際にやってみよう。

  1. 設定->映像でFPS分数値を選択、分子と分母を指定。
  2. 設定->出力->録画でキーフレーム間隔を設定。
  3. 録画
  4. FFmpegを使う。

nyanshiba.hatenablog.com

以下はH.265で録画した場合の例。H.264の場合の拡張子は.264となる。

# カレントディレクトリ
cd "C:\Rec\obs"

# tsで録画している場合はmp4に変換
ffmpeg -i rec.ts -c copy rec.mp4

# 複数ファイルを一括で処理する場合
ffmpeg -f concat -safe 0 -i input.txt -c copy rec.mp4

# キーフレームのみ使用する場合、-discard nokeyでキーフレーム以外を破棄する  
ffmpeg -an -discard nokey -i rec.mp4 -c:v copy tmp.265

# 30fpsで読み込んでコピー  
ffmpeg -r 30 -i tmp.265 -c copy timelapce.mp4

input.txtの例

file 190405_1300.ts
file 190405_1400.ts
file 190405_1500.ts

複数ファイルを一度に処理する場合も再エンコードなしで可能。タイムラプス用に録画したものは、プレビューで確認しながらのカット編集が難しいため、この処理を行った後に行うと良い。

www.youtube.com

フルスクリーン使用時に別のウィンドウをキャプチャする

フルスクリーン下に隠れたウィンドウや最小化されたウィンドウの表示内容はOBSに反映されない。
フルスクリーンを使用していない別のモニタ上またはWindows10の仮想デスクトップ上にウィンドウを置く。

Crtl+Win+D 新規仮想デスクトップを追加
Crtl+Win+<--> 仮想デスクトップ間を移動
Crtl+Win+F4 仮想デスクトップを削除

同じ名前のウィンドウを個別に認識させる

同じアプリケーション・ゲームをウィンドウまたはゲームキャプチャする際、ウィンドウタイトルや実行可能ファイルが同じため、任意のウィンドウをキャプチャすることが難しい、または録画中に任意のウィンドウから勝手に切り替わってしまうという問題がある。

方法1 ホットキーで選択

OBSの"ゲームキャプチャ"ソースの機能に"ホットキーで全面のウィンドウをキャプチャ"という機能がある。
この方法を取るのが一般的である。

  1. ソースウィンドウに"ゲームキャプチャ"を追加
  2. モード"ホットキーで全面のウィンドウをキャプチャ"を選択
  3. 設定->ホットキー->ゲームキャプチャ(ソース名)->全面のウィンドウをキャプチャ/キャプチャを無効化にキーを設定

ただし、この方法ではゲームキャプチャ1つ1つに別のキーを割り当てる必要があり、配信・録画開始時にそれらを行うのが非常に面倒である。

方法2 MainWindowTitleを変更する

ホットキーで選択するのではなく、プログラムでウィンドウタイトルを連番等に変えてしまうという方法。
Minecraftでシュルカー無限をする際に、複数アカウントからの視点を撮りたいというニッチな需要に応えるため、PowerShellでちょちょっと書いた。
どちらもjavawプロセスのうち、指定した実行ファイルパスの場合のみウィンドウタイトルを変更する仕様。

ゲームキャプチャ
項目
モード 特定のウィンドウをキャプチャ
ウィンドウ (例) [javaw.exe]: Minecraft 1.13.2_1
ウィンドウの一致優先順位 ウィンドウのタイトルに一致する必要があります
#190106
<#
仕様:
・Minecraftバージョンの表記の保持に対応
・連番(同時起動数の想定)はの1桁(1-9)まで
・連番は起動時刻順
2つ同時起動した後に連番を振り、2番目を終了して、新たに1つ起動した場合の例:
Exist: Minecraft 1.13.2_1
Rename: Minecraft 1.12.2_3
#>

#Minecraft用のjavaw.exeのパスを設定
$JavawPath = "C:\openjdk-11.0.2\bin\javaw.exe"
#SetWindowTextを使用
$settxt = add-type -name settxt -passThru -memberDefinition @'
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool SetWindowText(IntPtr hwnd, String lpString);
'@
#カウントリセット
$WindowCount = 0
#javawをStartTime順でソート
$JavawProcess = Get-Process javaw | Sort-Object StartTime
#ForEach-Object
$JavawProcess | %{
    #Pathが$JavawPathと一致する場合のみ実行
    if ($_.Path -eq $JavawPath)
    {
        #"MainWindowTitle_連番"にする為の条件分岐など
        #正規表現
        if ($_.MainWindowTitle -match "Minecraft.*_\d{1}$")
        {
            #前回実行時に番号が振られたウィンドウの場合は番号を変数に格納
            [int]$WindowCount = ($_.MainWindowTitle -split "_")[1]
            Write-Output "Exist: $($_.MainWindowTitle)"
        } else
        {
            #前回実行時に番号が振られたウィンドウの番号から連番を始めなければならない場合
            #連番を初めて振る場合
            #カウントアップ
            $WindowCount++
            #setWindowTextでMainWindowHandleに対し文字列を設定($nullへリダイレクト)
            $settxt::setWindowText($_.MainWindowHandle, "$($_.MainWindowTitle)_$WindowCount") >$null
            Write-Output "Rename: $($_.MainWindowTitle)_$WindowCount"
        }
    }
}

トラブルシューティング

よくある質問とかハマるポイントを、早見表的に抑えておきたい。

配信が止まる・途切れる・カクカクする

  1. 前提として、x264を使用していないことを設定->出力->配信で確認する
  2. 統計を表示して配信してみる

OBSを起動すると他の音量が小さくなる

  1. タスクバー右のスピーカーアイコンの右クリックメニュー -> サウンド -> Windowsが通信アクティビティを検出したとき: 何もしない に設定する

  2. 設定->詳細設定->音声の"Windowsの音量を自動で下げる機能を無効にする"にチェック

マイクのノイズを消したい

OBSのフィルタを使う

Discordで言うところの入力感度と同じ、オーディオインターフェースにあるようなノイズゲートを使用できる。
音量が閾値を超えると、ゲートが開放され音が入る。
音声/映像フィルタを参照。

オーディオインターフェースを導入する

そもそもPC内蔵や直挿しのマイクの場合、一定以上の音質はどうあがいても望めない。
ノイズはそもそも最初から少ない方が良い。

予算が少ない・既存のプラグインパワーのマイクをそのまま使いたい・初心者でも使いやすい

予算に余裕がある・今後買い換えたくない・アプリケーション毎に音声を分けて録音したい

RME ヘッドホンアンプ・DAC Babyface Pro

RME ヘッドホンアンプ・DAC Babyface Pro

NVEncが選べない

以下のNVIDIA公式ドキュメントの対応表を確認する。
developer.nvidia.com

古いGPUに関してはFor a complete list, click on the buttons below to open the complete tablesから見る。
Max # of concurrent sessionsNVIDIAのセッション数(同時エンコード可能な数)が書いてある。3本以上を同時に処理する特殊な用途ならQuadroが欲しくなってくる。同時配信程度なら工夫次第で1つでいけると思うよ。
HEVC B Frame supportが結構重要(というより貴重)なので、もしGPUを新調する場合はこれが使えるものを選んでおくと良い。ほんとマジで。ソフトウェアエンコーダの代替となり得るかの決定打にすらなるから。
GeForce GTX 1650Turing GPU with Volta NVENCと注釈が入ってるように新しいNVEncが使用できないため、これを選ぶならPascal世代を選んだ方がお得。

NVEncで配信録画開始時に失敗する

配信開始しようとすると、以下のような素っ気ないエラーが返ってくる。

配信開始に失敗しました
出力開始に失敗しました。詳細はログを確認してください。

注:NVENCまたはAMDエンコーダを使用している場合は、ビデオドライバが最新のものであるかを確認して下さい。

FFmpegカスタム出力の場合は録画中に不明なエラーが発生しましたしか表示されないかもしれない。

この原因として、文字通りの場合もあるが、
NVEncセッション数制限がNVIDIA GeForceには設けられているため、他のアプリケーションがそれを使用している時に配信・録画開始しようとして失敗する場合がある(例: 画面共有)。

ログの見方はメニューバーのヘルプに書いてあるよ。