OBSに画質を求めるのは間違っているだろうか
TL;DR #
この記事はOSSのOpen Broadcaster Software(OBS Studio)のチュートリアルです。
OBSは配信の品質向上、処理の軽量化に最適なアプリケーションです。たとえ録画用途であってもBandicamやShadowPlay等の他のアプリケーションを選ぶ余地はありません。
日本語の情報が少なく、OBS関連では辿り着けない情報も含めて解説するので、何かに躓いている方や更に配信・録画品質を上げたい方は必見です。
初心者向けではない内容も所々に見え隠れしているが、安定した高品質な配信・録画の為に気を付けなければならないポイントを網羅する為なのでご了承願いたい。目次・Ctrl
-F
を活用してね!
早見表 | |
---|---|
目的 | 見てほしい項 |
OBSの初期設定 |
|
配信・録画のトラブルシューティング |
|
配信の負荷軽減・安定化 |
|
配信の画質向上 |
|
録画の画質向上 |
|
応用・豆知識 |
|
配信・動画プラットフォーム向けの設定 |
|
更新履歴 #
日時 | 内容 |
---|---|
2019-04-16 |
|
2019-04-24 |
|
2019-04-28 |
|
2019-05-10 |
|
2019-06-21 |
|
2019-07-09 |
|
2019-10-20 |
|
2019-11-18 |
|
2019-11-19 |
|
2019-11-28 |
|
2020-02-12 |
|
2020-02-17 |
|
2020-03-03 |
|
2020-03-11 |
|
2020-05-03 |
|
2020-06-07 |
|
2020-07-31 |
|
2020-09-13 |
|
2020-09-14 |
|
2020-12-09 |
|
ダウンロードとインストール #
OBSは開発が盛んなOSSなので、更新はチェックしておくと良い。
StreamlabsやN Airの場合、バージョンが古かったり録画機能が削除されているので、本家がオススメ。
下記の公式サイトにインストーラとポータブル版(Zip)のURLがある。
https://obsproject.com/ja/download
ポータブル版をProgram Files以外のディレクトリにインストールする場合、bin・data・obs-pluginsが含まれるOBS Studioディレクトリのセキュリティ権限にALL APPLICATION PACKAGES
というオブジェクト名を追加して、アクセス許可する必要がある。この権限がないと、特定の機能(UWPアプリのゲームキャプチャ)が正しく機能しない場合がある。
OBS 26.0で追加されたVirtual Camera機能を使用するにはインストーラ版を選択する。
因みに"GitHubで見る"をクリックすれば、正式リリース前のRelease Candidate版(リリース候補版)等をいち早く試すこともできる。
勿論ここからソースコードを入手し、自前ビルドすることも可能。
https://github.com/obsproject/obs-studio/releases
公式ドキュメント(頻繁に更新されています)
https://obsproject.com/forum/resources/open-broadcaster-software-studio-multiplatform-help-guide-pdf.365/
初回起動と画面構成 #
OBSを管理者として実行すると、GPU高負荷時に統計 -> レンダリングラグが原因で逃したフレームが低減し、配信のカクつきがを最小限にできる可能性があります(OBS 24.0.3~)。
https://obsproject.com/forum/threads/obs-studio-24-0-3-gpu-priority-fix-testing.111669/
自動構成ウィザードは、実行中のマシンに合わせて適切に設定してくれる。
らしいが、何れにせよ設定し直す必要があるので勉強も兼ねて"いいえ"を選択。
メニューバー #
ファイル | |
---|---|
録画を表示 | |
録画の再多重化 | |
設定 | |
設定フォルダーを表示 | |
プロファイルフォルダーを表示 | |
常に手前に表示 | |
終了 | |
編集 | |
全画面インターフェイス | |
ドック | |
ツールバー | |
ステータスバー | |
マルチビュー(全画面) | |
マルチビュー(ウィンドウ) | |
プロファイル | |
シーンコレクション | |
ツール | |
自動構成ウィザード | |
Decklink Output | |
字幕 (実験的) | |
自動シーンスイッチャー | |
出力タイマー | |
スクリプト | https://obsproject.com/docs/scripting.html |
ヘルプ | |
ヘルプポータル | https://obsproject.com/help |
ウェブサイト | https://obsproject.com/ |
Discordサーバーに参加 | https://discordapp.com/invite/obsproject |
ログファイル | |
クラッシュレポート | |
更新を確認 | |
OBS Studioについて |
自動シーンスイッチャー #
ワンオペやシングルディスプレイ環境でのオペレーションを求められる配信では、この自動シーンスイッチャーが大活躍する。
ウィンドウタイトルに一致する文字列や正規表現を書き、それに対応したシーンを選択すると、そのウィンドウがアクティブになった時に任意のシーンに自動で切り替えてくれる。
オーバーレイやコメント欄、ゲーム、その他ウィンドウ、背景など用途別にシーンが適切に分けられていることが前提。
項目 | 値 | 説明 |
---|---|---|
ウィンドウタイトル シーン名 | ^RME TotalMix FX.*$ |
RME TotalMix FX: Babyface Pro (1) - 48.0k 等文頭がRME TotalMix FX なウィンドウに一致する例(前方一致) |
^.*Visual (Studio Code|...)$ |
ファイル名 - ワークスペース名 - Visual Studio Code やファイル名 - ワークスペース名 - Visual ... に一致する例(OR) |
|
^(?!.*Launcher)Minecraft.*$ |
Minecraft 1.16.3 には一致するが、Minecraft Launcher に一致しない例(否定先読み) |
|
^(?!.*Discord).*rec-live-128kbps$ |
||
どのウィンドウにも一致しない場合 | 切り替える: Default | |
アクティブウィンドウタイトルを確認する間隔 | 1000-2500ms | |
シーンスイッチャーは | アクティブ(停止ボタン) |
シーンコレクション #
シーンコレクションには、映像・音声ソースを含んだシーン、音声デバイスを扱うミキサーが含まれます。
これを切り替えることで、キャプチャ内容を用途別に切り替えられます。
シーン #
ソースを纏めたものを、切り替えられる。
+で追加、-で削除。
ソース #
選択したシーン内に映像・音声・テキスト等のソースを追加(+ボタン)する。
また、既に追加したソースの表示・非表示をここで切り替える。
項目 | 説明 |
---|---|
ウィンドウキャプチャ | |
ゲームキャプチャ | |
シーン | |
テキスト(GDI+) | |
ブラウザ | |
メディアソース | |
映像キャプチャデバイス | |
画像 | |
画像スライドショー | |
画面キャプチャ | |
色ソース | |
音声入力キャプチャ | |
音声出力キャプチャ | |
グループ化 |
ウィンドウキャプチャ #
項目 | 値 | 説明 |
---|---|---|
ウィンドウ | 任意 | |
キャプチャ方法 | 自動 | |
BitBit(Windows 7 以降) | ||
Windows Graphics Capture(Windows 10 バージョン 1903 以降) | ||
ウィンドウの一致優先順位 | ウィンドウのタイトルに一致する必要があります | |
タイトルに一致、そうでなければ同じ種類のウィンドウを見つけます | ||
タイトルに一致、そうでなければ同じ実行可能ファイルのウィンドウを見つけます | ||
カーソルをキャプチャ | 任意 | |
マルチアダプターの互換性 | 無効 |
最小化したウィンドウが映らない #
- ウィンドウは最小化すると動作せず、静止画がキャプチャされる。
キャプチャしたいウィンドウは最小化せず、開いたままにしておきましょう。
フルスクリーンウィンドウが映らない #
- ゲームキャプチャを使う
- そもそもフルスクリーンウィンドウはアクティブでないと動作しない
- UWPアプリの場合、ダウンロードとインストールでインストーラ版を選ぶか、手動インストール向けの設定を行う
- Vulkanベースのゲームの場合は、OBS 25.0~を使用する
フルスクリーンでプレイすると他のウィンドウが映らない #
- Windowsにおいて、フルスクリーンウィンドウの下に隠れたウィンドウは静止画となり、動作しない。
ディスプレイに余りがない場合、仮想デスクトップを使います。
#フルスクリーン使用時に別のウィンドウをキャプチャする で解説しています。
Chrome系ブラウザ・VSCodeなどが映らない #
Chrome系のソフトウェアはレンダリングにANGLEを使用しているため、従来のキャプチャ方法ではウィンドウの内容を取得できず、真っ暗でマウスポインタのみ映る、という残念な状態になっていたが、
ウィンドウキャプチャがデフォルトで対応したので、Windows 10 1903以降に更新して、OBS 25.0以降に更新すればよい。
映らないからといってブラウザのハードウェアアクセラレーションを無効化するのはやめよう。
Chrome #
- Choose ANGLE graphics backend chrome://flags#use-angle で
OpenGL
に設定する。 - ウィンドウキャプチャでChromeのウィンドウを選択する。
VSCode #
起動時に使用するタスクバーやデスクトップのショートカットのリンク先に、--use-angle=gl
を加える。
これはChrome系のソフトウェアなら基本的に動作する。
"C:\Users\ユーザ名\AppData\Local\Programs\Microsoft VS Code\Code.exe" --use-angle=gl
タスクバーで右クリック操作を繰り返すことでショートカットのプロパティにアクセスできるよ
ゲームキャプチャ #
項目 | 値 | 説明 |
---|---|---|
モード | フルスクリーンアプリケーションをキャプチャ | |
特定のウィンドウをキャプチャ | ||
ホットキーで前面のウィンドウをキャプチャ | ||
ウィンドウ | ||
ウィンドウの一致優先順位 | ||
SLI/Crossfire キャプチャモード(遅い) | 無効 | |
強制的にスケーリングする | 任意 | |
透過を許可 | 任意 | |
キャプチャのフレームレートを制限する | 任意 | |
カーソルをキャプチャ | 任意 | |
アンチチート互換性フックを使用する | 有効 | |
(steamなどの)サードパーティの製のオーバーレイをキャプチャする | 任意 | |
フック速度 | 通常 |
フルスクリーン使用時に別のウィンドウをキャプチャする #
フルスクリーン下に隠れたウィンドウや最小化されたウィンドウの表示内容はOBSに反映されない。
フルスクリーンを使用していない別のモニタ上またはWindows10の仮想デスクトップ上にウィンドウを置く。
Ctrl + Win + D |
新規仮想デスクトップを追加 |
Ctrl + Win + <- -> |
仮想デスクトップ間を移動 |
Ctrl + Win + F4 |
仮想デスクトップを削除 |
同じ名前のウィンドウを個別に認識させる #
同じアプリケーション・ゲームをウィンドウまたはゲームキャプチャする際、ウィンドウタイトルや実行可能ファイルが同じため、任意のウィンドウをキャプチャすることが難しい、または録画中に任意のウィンドウから勝手に切り替わってしまうという問題がある。
方法1 ホットキーで選択 #
OBSの"ゲームキャプチャ"ソースの機能に"ホットキーで全面のウィンドウをキャプチャ"という機能がある。
この方法を取るのが一般的である。
- ソースウィンドウに"ゲームキャプチャ"を追加
- モード"ホットキーで全面のウィンドウをキャプチャ"を選択
- 設定->ホットキー->ゲームキャプチャ(ソース名)->全面のウィンドウをキャプチャ/キャプチャを無効化にキーを設定
ただし、この方法ではゲームキャプチャ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"
}
}
}
テキスト(GDI+) #
設定項目が説明そのもので言及することが特にないので端折る。
因みに、テキストファイルの文字コードはUTF-8の必要がある。メモ帳等で作成したShift-JIS(ANSI)は文字化けするので注意。
ブラウザ #
項目 | 値 | 説明 |
---|---|---|
ローカルファイル | 任意 | |
URL | ||
カスタムフレームレートを使用 | 無効 | |
OBSに音声を再ルーティングする | 任意 | |
カスタムCSS | 任意 |
|
表示されていないときにソースをシャットダウン | 有効 | |
シーンがアクティブになったときブラウザの表示を更新 | 任意 | |
現在のページを再読込 | %APPDATA%\obs-studio\plugin_config\obs-browser\Cache の現在のページのキャッシュをフラッシュする。 |
Discordのオーバーレイを表示する #
https://www.youtube.com/watch?v=fuqmGOfiMNg&t=11147s
Discordのデスクトップアプリケーションにはゲーム内にオーバーレイを表示する機能がある。
しかし、それが表示されない環境であったり、表示したくないが配信に載せたい場合に役立つAPIをDiscordが用意してくれている。
|
-
デスクトップ版Discordを起動中にOBSを起動すると、このソースが有効でなくても勝手にボイスチャンネルに接続してしまう仕様。
録画と配信でシーンコレクションを分けるか、#ブラウザソースで"表示されていないときにソースをシャットダウン"を選択しておけば、勝手にボイスチャットへ接続してしまうのを防げる。 -
URLの後方は設定内容を表すので、それを流用すれば容易に複数ボイスチャンネルを同じ見た目にすることができる。
https://streamkit.discordapp.com/overlay/voice/XXXXXXXXXX/XXXXXXXXXX?icon=true&online=true&logo=white&text_color=%23ffffff&text_size=14&text_outline_color=%23000000&text_outline_size=0&text_shadow_color=%23000000&text_shadow_size=0&bg_color=%231e2124&bg_opacity=0.95&bg_shadow_color=%23000000&bg_shadow_size=0&invite_code=zy5hZyW&limit_speaking=false&small_avatars=false&hide_names=false&fade_chat=0
- 画像のようなデザインにしたい場合は、5.のカスタマイズを行っていないURLに対し、以下のCSSを使用します。
どちらも4K用に作ってあるので、4KでもFHDでも無理矢理拡大する必要がないため、より綺麗に表示されます。
ボイスチャンネル用
@import url("https://fonts.googleapis.com/css?family=Noto+Sans+JP"); | |
.voice-state { | |
background-image: linear-gradient(to left, rgba(204,204,204,0.01), rgba(204,204,204,0.3)); | |
padding: 16px 0 32px 16px; | |
} | |
.voice-container .voice-states .voice-state { | |
height: 64px; | |
} | |
.voice-container .voice-states .voice-state .avatar { | |
height: 64px; | |
width: 64px; | |
border: 6px solid transparent; | |
} | |
.voice-container .voice-states .voice-state .avatar.speaking { | |
border-color: #43b581; | |
} | |
.voice-container .voice-states .voice-state .user .name { | |
background-color: transparent !important; | |
font-family: "Noto Sans JP" !important; | |
font-weight: 1; | |
font-size: 32px !important; | |
line-height: 40px !important; | |
color: #fff !important; | |
border-radius: 0px; | |
} |
ボイスチャンネル用(インジケータのデザイン変更版)
@import url("https://fonts.googleapis.com/css?family=Noto+Sans+JP"); | |
.voice-container .voice-states .voice-state { | |
height: 64px; | |
background-image: linear-gradient(to left, rgba(204,204,204,0), rgba(204,204,204,0.5)); | |
padding-bottom: 12px; | |
overflow: hidden; | |
} | |
.voice-container .voice-states .voice-state .avatar { | |
height: 64px; | |
object-fit: none; | |
width: 2000px; | |
border: none; | |
border-left: 8px solid #7289da; | |
border-radius: 0%; | |
float: left; | |
padding-bottom: 12px; | |
} | |
.voice-container .voice-states .voice-state .avatar.speaking { | |
border-color: #43b581; | |
background-image: linear-gradient(to left, rgba(67,181,129,0), rgba(67,181,129,0.3)); | |
} | |
.voice-container .voice-states .voice-state .user { | |
position: absolute; | |
padding-left: 1em; | |
} | |
.voice-container .voice-states .voice-state .user .name { | |
background-color: transparent !important; | |
font-family: "Noto Sans JP" !important; | |
font-weight: 1; | |
font-size: 36px !important; | |
line-height: 36px !important; | |
color: #fff !important; | |
} |
テキストチャンネル用
/* チャット欄自体を大きく */ | |
.chat-container { | |
font-family: "Noto Sans JP"!important; | |
border-radius: none!important; | |
height: 1000px!important; | |
width: 1900px!important; | |
overflow: hidden; | |
} | |
.chat-container .messages { | |
height: 100%!important; | |
} | |
/* Discordチャンネル名を非表示 */ | |
.channel-name { | |
display: none; | |
} | |
/* 背景透過 */ | |
.messages { | |
background: transparent!important; | |
} | |
/* メッセージカードのデザイン */ | |
.chat-container .messages .message { | |
max-height: none!important; | |
display: block; | |
background-image: linear-gradient(to right, rgba(204,204,204,0.1), rgba(204,204,204,0.4)); | |
margin: 3em; | |
padding: 2em 4em; | |
} | |
/* 日時を消す */ | |
.chat-container .messages .message .timestamp { | |
display: none; | |
} | |
/* 名前、投稿内容の文字の大きさ */ | |
.chat-container .messages .message .message-text, | |
.chat-container .messages .message .username { | |
display: block!important; | |
font-size: 56px!important; | |
line-height: 100px!important; | |
font-weight: 600!important; | |
} | |
/* 投稿内容の色 */ | |
.chat-container .messages .message .message-text { | |
color: #ddd!important; | |
} |
YouTubeのコメントを表示する #
YouTube Liveの仕様で、映像と一緒にコメントが表示されるのはモバイルのみ。
デスクトップユーザはフルスクリーン状態ではコメントが表示されない。
また、華を添える意味合いで装飾したコメントを映像に被せたい方も居るだろう。
YouTubeのコメントはライブダッシュボードのチャット︙
->チャットをポップアウトで表示されたウィンドウのURLを、OBSのブラウザソースに追加し、CSSを適用することで好みの見た目にカスタマイズして映像に合成できる。
一からCSSを書けというのは酷だが、chatv2という有志によるGUIでYouTubeLiveのコメント用CSSを生成できるウェブツールがある。
画像のようなデザインにしたい場合は、以下のCSSを使用します(chatv2のみでは対応できない部分の修正も含まれます)。
@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; | |
/* padding: 24px 24px !important;*/ | |
} | |
yt-live-chat-text-message-renderer { | |
background-image: linear-gradient(to right, rgba(204,204,204,0.05), rgba(204,204,204,0.3)); | |
margin: 16px 24px !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: 16px 24px !important; | |
} | |
yt-live-chat-paid-message-renderer #header { | |
padding: 16px 24px !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: 48px !important; | |
height: 48px !important; | |
border-radius: 48px !important; | |
margin-right: 24px !important; | |
} | |
/* アイコン画像自体も引き伸ばす */ | |
yt-live-chat-text-message-renderer #author-photo img.style-scope.yt-img-shadow { | |
zoom: 2.0; | |
} | |
yt-live-chat-paid-message-renderer #author-photo img.style-scope.yt-img-shadow { | |
zoom: 2.0; | |
} | |
/* Hide badges. */ | |
yt-live-chat-text-message-renderer #author-badges { | |
display: none !important; | |
vertical-align: text-top !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; | |
zoom: 1.5; | |
} | |
yt-live-chat-text-message-renderer #author-name[type="moderator"], | |
yt-live-chat-text-message-renderer yt-live-chat-author-badge-renderer[type="moderator"] { | |
display: block; | |
color: #5e84f1 !important; | |
zoom: 1.5; | |
} | |
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; | |
zoom: 1.5; | |
} | |
/* Channel names. */ | |
yt-live-chat-text-message-renderer #author-name { | |
color: #eeeeee !important; | |
font-family: "Noto Sans JP"; | |
font-size: 28px !important; | |
line-height: 48px !important; | |
} | |
/*モデレータの色*/ | |
yt-live-chat-text-message-renderer #author-name.moderator.style-scope.yt-live-chat-author-chip { | |
color: #5e84f1 !important; | |
} | |
/* 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: 36px !important; | |
line-height: 48px !important; | |
display: block; /*Messages Appear Under Author Name Instead Of Beside It*/ | |
/*padding: 12px 2px !important;*/ | |
} | |
/* 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: 32px !important; | |
line-height: 36px !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: 28px !important; | |
line-height: 32px !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: 28px !important; | |
line-height: 32px !important; | |
} | |
yt-live-chat-paid-message-renderer { | |
margin: 8px 0 !important; | |
} | |
yt-live-chat-legacy-paid-message-renderer { | |
background-color: #0f9d58 !important; | |
margin: 8px 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チキンレースをしたい方はどうぞ。
- 以下の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'); })(); }
- "ブラウザ"ソースを追加する。
- URLを入力し、幅と高さをキャンバス解像度に合わせる。
ブラウザ内の操作は ソースの右クリックメニュー->対話 で行えます。
メディアソース #
項目 | 値 | 説明 |
---|---|---|
ローカルファイル | 有効 |
|
無効 | 現在利用可能なフォーマット(ビルドに依存)(空欄で自動選択): aa、applehttp、apng、asf、concat、flv(RTMP)、gif、image2、mov、mp4、3gp、QuickTime、mpegts、mpjpeg |
|
繰り返し | 任意 | |
ソースがアクティブになったとき再生を再開する | 任意 | |
可能な場合ハードウェアデコードを使用 | 有効 | |
再生終了時にソースを非表示にする | 任意 | |
アクティブでないときにファイルを閉じる | 任意 | |
速度(パーセント) | 任意 | |
YUV色範囲 | 自動 |
OBSだけでBGMを再生・曲名を表示 #
メディアソースにはffmpegのconcatが組み込まれていることは解説したが、それを利用して、曲名が書かれた映像を流せば、BGMは勿論、工夫すれば曲名もOBS単体で流せる。
OBS単体でBGMを流すことには理由がある。
メディアソースはOBS内の仮想音声デバイスとして機能するため、自分が聴きたくない場合、編集時にデスクトップ音声と一緒になっていては困る場合等に有効だ。
曲名とBGMのaviを一括生成し、OBSのメディアソースに対応したinput.txtを出力するPowerShellスクリプトを書いた。
- ffmpegをインストール
- 下記スクリプトを拡張子
.ps1
で保存。
日本語環境において、Windows PowerShellの場合はShift-JIS(ANSI)、PowerShell Coreの場合はUTF-8で保存。#190508 #ユーザ設定 $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\://Users/sbn/Documents/fonts/minecraft_font_by_pwnage_block_d37t6nb.ttf' } function Out-ConcatTxt { param ( [string]$Dir ) Write-Output "$Dir\input.txt" #ファイルリストをシャッフルし、OBSのメディアソース(ffmpeg concat)で使用できるフォーマットでtxtに出力 "ffconcat version 1.0`r`nfile '$(((Get-ChildItem "$Dir/*.*" -Recurse).Name | Get-Random -Count ([int]::MaxValue)) -join "'`r`nfile '")'" | Out-File "$Dir\input.txt" -Encoding UTF8 } #出力ディレクトリがなければ作成 if (!(Test-Path $Settings.Output)) { $null = New-Item -Path $Settings.Output -ItemType Directory -Force } if ($Settings.Output) { #ソースディレクトリ下の全てのファイルに対し、その曲名が表示されるRGBA動画を作成 foreach ($AudioFile in Get-ChildItem "$($Settings.Input)/*.*" -Recurse) { $AudioFile.Name #既に存在する場合は上書きしない ffmpeg -n -v quiet -i "$($AudioFile.FullName)" -f lavfi -i "color=c=0x00000000:s=$($Settings.Resolution):r=1,format=pix_fmts=rgba" -vf "drawtext=fontsize=$($Settings.FontSize):fontcolor=0xe0e0e0:fontfile='$($Settings.FontFile)':text='$($AudioFile.BaseName)'" -c:a copy -c:v utvideo -pred median -shortest -pix_fmt rgba "$($Settings.Output)\$($AudioFile.BaseName).avi" } Out-ConcatTxt -Dir $Settings.Output } else { Out-ConcatTxt -Dir $Settings.Input } - 設定を行う
- 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' }
- powershell(5.1、6.1.1で動作確認)でスクリプトを実行
Win
-R
->powershell
でWindows 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
ソースが条件に合わなかったり、更に凝ったことをしたい人はffmpegのfilter_complex
で頑張ってください。
複数解像度の動画に、それぞれのソースによってフィルタ処理を変えられるので、編集ソフトの簡易的な部分ならffmpegだけで出来るよ。
例によってGUIが無いので、史上最も軽い動画編集ソフトだよ![要出典]
カラーバー・カウンターを表示する #
OBSのメディアソースはほぼFFmpegですが、ffmpegには元々SMPTEカラーバーやテストソースを表示する機能があるので、それをメディアソースで指定すればそのまま使えました。
項目 | 値 | 説明 |
---|---|---|
メディアソース | ||
ローカルファイル | 無効 | |
入力 | smptehdbars | |
testsrc | ||
testsrc2 | ||
color=Green | 使用可能な値はドキュメント | |
フォーマット | lavfi | Libavfilter |
全画面に綺麗に拡大する | ||
ソースの右クリックメニュー -> フィルタ -> スケーリング/アスペクト比 | ||
スケールフィルタ | ポイント | |
解像度 | 基本(キャンバス)解像度 | |
testsrcからカウンターをつくる | ||
ソースの右クリックメニュー -> フィルタ -> クロップ/パッド | ||
相対的 | 有効 | |
左 | 128 | |
上 | 94 | |
右 | 36 | |
下 | 94 | |
ソースの右クリックメニュー -> フィルタ -> カラーキー | ||
色キーの種類 | 赤 | |
ソースの右クリックメニュー -> フィルタ -> カラーキー | ||
色キーの種類 | 緑 | |
ソースの右クリックメニュー -> フィルタ -> カラーキー | ||
色キーの種類 | カスタム | |
キーの色 | #ffff00(#ffffff00) | |
ソースの右クリックメニュー -> フィルタ -> カラーキー | ||
色キーの種類 | 青 | |
ソースの右クリックメニュー -> フィルタ -> カラーキー | ||
色キーの種類 | カスタム | |
キーの色 | #000000(#ff000000) |
映像キャプチャデバイス #
項目 | 値 | 説明 |
---|---|---|
デバイス | 任意 | |
表示中でない場合非アクティブ化する | 有効 | |
解像度/FPSタイプ | カスタム | |
解像度 | 任意 | |
FPS | 出力FPSに合わせる | |
YUV色空間 | 自動 | |
YUV色範囲 | 自動 | |
音声出力モード | 音声のみをキャプチャ |
BlackMagick DeckLinkはOBS、FFmpegと親和性が高いので個人的にオススメなキャプチャボード。
画像 #
項目 | 値 | 説明 |
---|---|---|
表示中でない画像は読み込まない | 有効 |
ソースの右クリックメニュー #
ソースやプレビューウィンドウを選択し右クリックすると表示されるメニューです。
項目 | 説明 |
---|---|
選択したアイテムのグループ化 | |
コピー | |
貼り付け(参照) | |
貼り付け(複製) | |
フィルタをコピーする/貼り付ける | |
色の設定 | |
名前を変更 | |
削除 | |
順序 | |
変換 | |
ミキサーを非表示 | |
インターレース解除 | |
出力サイズ変更(ソースサイズ) | |
スケールフィルタ | |
全画面プロジェクター | |
ウィンドウプロジェクター | |
対話 | |
フィルタ | |
プロパティ |
変換 #
ソースの拡大/縮小、位置合わせをピクセル単位で行います。
プレビューウィンドウ上で赤い枠を操作し同様の操作を直感的に行えますが、思い通りの位置にならなかったり、適切でないスケーリングによってぼやける場合があるため、こちらを使用することを推奨します。
ぼやけたり滲まないよう、拡大/縮小を行う場合は縦横が2xや1/2になるようにしましょう。スケールフィルタが"ポイント"の場合のみ、一切滲むことなく変換できます。
慣れればスタジオモードを使用しなくても、ソースの位置調整の様子が配信に映らないよう操作できます。
※OBS 25.0から、ソースのロック(鍵マーク)を解除しないと"変換"の大半の操作ができなくなっています。
変換をリセット #
ソースの拡大/縮小、回転や位置合わせの内容全てをリセットし、左上に元の大きさで戻します。
変換の設定を弄る前に、必ず実行しておくと良いでしょう。
変換の編集 #
シーン アイテム 変換 | |
---|---|
項目 | 説明 |
位置 | "位置揃え"の角の座標 |
回転 | "位置"を中心に回転 |
大きさ | ソースの大きさ |
位置揃え | "位置"・"回転"の起点を赤枠の点 ■ から選択 |
既定の状態
左上を起点に"位置"で横軸64px・縦軸48pxの余白を設け、"大きさ"で2xした例。
スケールフィルタを"ポイント"に設定し、1/2や2倍の値に拡大縮小すると、滲みを軽減できます。
例: 640x360 -> 1280x720
シーン アイテム 変換 | ||
---|---|---|
項目 | 説明 | |
バウンディングボックスの種類 | 境界なし | バウンディングボックスがない既定の状態 |
境界まで引き伸ばす | ソースの縦横比を無視して、指定した大きさに引き伸ばす | |
境界の内側に合わせる | ソースの縦横比を維持して、幅・高さのいずれも指定した大きさからはみ出さないように拡大縮小する | |
境界の外側に合わせる | ソースの縦横比を維持して、幅・高さの片方だけは指定した大きさからはみ出さないように拡大縮小する | |
境界の幅に合わせる | ソースの縦横比を維持して、幅が常に指定した値に合うように拡大縮小する | |
境界の高さに合わせる | ソースの縦横比を維持して、高さが常に指定した値に合うように拡大縮小する | |
最大サイズのみ | "大きさ"の値を維持して、余白の大きさを指定する | |
バウンディングボックスの配置 | ||
バウンディングボックスのサイズ |
右下に配置したいので、"位置揃え"を右下、"位置"はキャンバスサイズに合わせて1920,1080。
※右上なら1920,0、左下なら0,1080
1280x720のソースに対し、1440x810のバウンディングボックスで余白をつくる。
4K2K 3:2のソースの縦横比を維持して、左右に黒帯を追加する例。
画面に合わせると同じ。
4K2K 3:2のソースの縦横比を維持して、上下をクロップする例。
シーン アイテム 変換 | |
---|---|
項目 | 説明 |
クロップ | ソースの余計な部分を上下左右から相対位置で切り取る |
バウンディングボックスで余白を作っている場合、サイズの調整が必要になる。
画面に合わせる #
画面の大きさに合わせて拡大/縮小します。
拡大/縮小のアルゴリズムは下記の"スケールフィルタ"に従います。
後述の"スケールフィルタ"が"ポイント"の場合のみ、一切滲むことなく変換できます。
画面中央に置く #
ソースの縦横比・大きさを保持して、キャンバスの中央に配置します。
フィルタ #
OBSには豊富なフィルタが用意されています。23.0~多くのフィルタが追加されました。
複数のフィルタを重ね掛けすることもできます。
エフェクトフィルタ #
項目 | 説明 |
---|---|
LUTを適用 | |
イメージ マスク/ブレンド | |
カラーキー | |
クロップ/パッド | |
クロマキー | |
シャープ | |
スクロール | |
スケーリング/アスペクト比 | |
レンダリング遅延 | |
色補正 |
LUTを適用 #
Davinci Resolve等から出力できる3D LUT.cube
が25.0で対応した。
PhotoshopやGIMPを駆使してOBS用のLUTを作成するレガシーな手順。
OBSのルートディレクトリ内の\data\obs-plugins\obs-filters\LUTs\original.png
を
LUTを適用したいシーンのスクリーンショットと合成
GIMPやDavinci Resolveでカラーグレーディング
合成したLUTの部分のみを切り出し、OBSのApply LUTフィルタに登録
スケーリング/アスペクト比 #
スケールフィルタ | |
解像度 |
音声/映像フィルタ #
項目 | 説明 |
---|---|
VST 2.x プラグイン | |
エキスパンダー | |
ゲイン | |
コンプレッサー | |
ノイズゲート | |
ノイズ抑制 | |
リミッター | |
映像の遅延 (非同期) | |
極性を反転する |
VST #
OBSはVST 2.x プラグインに対応しています。
- *.vst
- *.dll
- *.so
- *.o
上記の拡張子のファイルを、下記の場所から探します。
ここに配置することで、インストーラのないVSTも使用できます。
Mac
/Library/Audio/Plug-Ins/VST/
~/Library/Audio/Plug-ins/VST/
Windows
C:/Program Files/Steinberg/VstPlugins/
C:/Program Files/Common Files/Steinberg/Shared Components/
C:/Program Files/Common Files/VST2
C:/Program Files/Common Files/VSTPlugins/
C:/Program Files/VSTPlugins/
VST・OBSが32bitの場合
C:/Program Files (x86)/Steinberg/VstPlugins/
C:/Program Files (x86)/Common Files/Steinberg/Shared Components/
C:/Program Files (x86)/Common Files/VST2
C:/Program Files (x86)/Common Files/VSTPlugins/
C:/Program Files (x86)/VSTPlugins/
Linux
(環境変数)VST_PATH
/usr/lib/vst/
/usr/lib/lxvst/
/usr/lib/linux_vst/
/usr/lib64/vst/
/usr/lib64/lxvst/
/usr/lib64/linux_vst/
/usr/local/lib/vst/
/usr/local/lib/lxvst/
/usr/local/lib/linux_vst/
/usr/local/lib64/vst/
/usr/local/lib64/lxvst/
/usr/local/lib64/linux_vst/
~/.vst/
~/.lxvst/
キャンバス解像度が変わってもレイアウトが崩れない相対的なソースをつくる #
プロファイル -> 設定 -> 映像 で指定したキャンバス解像度がプロファイルの切り替えによって変更されると、折角つくったレイアウトも崩れてしまう。
ここに書かれているように、基本(キャンバス)解像度と出力(スケーリング)解像度は同じが好ましい。
よって、共通のシーンコレクションを異なる解像度のプロファイルで使用し、配信と録画を異なる解像度で行いつつ同じシーンコレクションを使用することを諦めている方も多いはず。
しかし、実はソースに対して変換・グループ化・スケールフィルタの組み合わせによって相対レイアウトを実現できる。勿論、ソースはキャンバス解像度と同じ縦横比(16:9等)でなくても動作する。
- 変換のバウンディングボックスでキャンバス解像度の縦横比に合わせる
項目 | 値 | 解説 |
---|---|---|
バウンディングボックスの種類 | 境界の内側に合わせる |
|
最大サイズのみ |
|
|
バウンディングボックスの配置 | 中央 | |
バウンディングボックスのサイズ | 1280x720 1920x1080 2560x1440 3840x2160 |
|
- 画面端に表示するコメント欄等のオーバーレイ表示
前述のように、オーバーレイそれぞれが16:9になるようにバウンディングボックスで管理してもよいが、オーバーレイものは解像度がまちまちなので直観的ではない。
ダミーの16:9の色ソースを置いて(非表示にし)、2.や3.を行ってからグループ内のソースの位置を調整するとよい。
-
1つあるいは複数のソースを選択し、グループ化する
このとき、それぞれのソースの最終的なサイズ(バウンディングボックスのサイズ)が同じでないと、一番大きなソースに合わせてレイアウトが崩れてしまう。
グループを分けるか、1.の時点でリサイズを行って解像度を揃える。 -
グループ全体にスケールフィルタでキャンバス解像度を適用する
キャンバス解像度の異なるプロファイルを切り替えてみましょう。あら不思議、全くレイアウトが変わりません。
音声ミキサー #
設定->音声で設定したオーディオソースが表示される。
歯車又は右クリックでオーディオルーティング等の各種設定項目が表示される。
項目 | 説明 |
---|---|
すべて再表示/非表示 | 音声ソースの表示/非表示を切り替える |
名前を変更 | 表示名を変更できる |
フィルタをコピーする/貼り付ける | "フィルタ"で設定した項目をコピー&ペースト出来る |
垂直レイアウト | 既定では横だが、縦のレベルメータ表示に変えることができる。多くの音声デバイスを使用する人にオススメ。 |
フィルタ | オーディオフィルタを使用できる。下記参照。 |
プロパティ | ここでもデバイスの選択を行える。 |
オーディオの詳細プロパティ | オーディオルーティングやパンの設定が出来る。下記参照。 |
フィルタ #
#音声/映像フィルタと共通。
オーディオの詳細プロパティ #
項目 | 説明 |
---|---|
名称 | |
音量(%) | |
モノラルにダウンミックス | |
バランス | |
同期オフセット | |
音声モニタリング | |
トラック |
統計 #
ここでは何が原因で配信がカクついているのかの原因の特定を行える。
OBSが重い、配信がカクつく、それらは全てここの値に現れます。
統計を表示しパフォーマンスをモニターすることが、快適な配信への近道です。
表示->ドックで必ずチェックしておきましょう(OBS 23.0~)。
項目 | 説明 |
---|---|
レンダリングラグが原因で逃したフレーム | |
エンコードのラグが原因で逃したフレーム | |
ドロップフレーム(ネットワーク) |
シーントランジション #
シーン切り替え時に様々なトランジションを適用できる。
コントロール #
項目 | 説明 |
---|---|
配信開始 | |
録画開始 | |
スタジオモード | |
設定 | |
終了 |
プロファイル #
プロファイルを分けることで、異なる配信先やキャンバスサイズ・フレームレート、エンコード設定を切り替えられます。
配信・録画中に切り替えることはできません。
ファイル -> 設定
一般 #
言語: 日本語
項目 | 値 | 説明 | |
---|---|---|---|
一般 | 言語 | 日本語 |
配信 #
項目 | 値 | 説明 |
---|---|---|
サービス | YouTube/YouTube Gaming | |
サーバー | Primary YouTube ingest server | |
ストリームキー(リンク) |
出力 #
項目 | 値 | 説明 | |
---|---|---|---|
出力モード | 詳細 | ||
音声トラック | (配信用プロファイルの場合) | 1 | |
(録画用プロファイルの場合) | 1~任意 |
配信 #
"配信開始"押下で選ばれるエンコード設定です。
品質、パフォーマンスの観点から上から順に使えるものを選択して下さい。
Macの場合は"アップル VT H264 ハードウェア~"、Linuxの場合はOBS 23.0から公式対応した"VAAPI"等を選ぶと良いでしょう。
x264 #
デフォルトではソフトウェアエンコードのx264になっています。
ソフトウェアエンコーダはハードウェアエンコーダに比べ設定項目が豊富ですが、配信や録画のようなリアルタイム処理においてハードウェアエンコードに負荷・品質共に勝ることは基本的に無いので、特殊な用途でない限り選ぶ必要はありません。
参考: 同程度の品質になるようエンコードした場合、x264で実時間の5倍かかるところ、h264_nvencでは1/5未満で終わります。
NVIDIA NVENC H.264 (new) #
ハードウェアエンコードの現状最適解、対応したNVIDIA製GPUで使用できるNVEnc。
項目 | 値 | 説明 |
---|---|---|
エンコーダ | NVIDIA NVENC H.264 (new) | |
レート制御 | CBR | |
ビットレート | ||
最大ビットレート | ビットレート+2000~4000Kbps | |
キーフレーム間隔(秒) | 2 | |
プリセット | Quality Low-Latency Quality Low-Latency |
|
Profile | high | |
Look-ahead | 無効 | |
心理視覚チューニング | 有効 | |
GPU | 0 | |
最大Bフレーム | 2 | 3 に増やしても良いが、NVEnc H.264では2 が最も効率がよく、0 や4 は非効率。0 にすると安定する。 |
上記の設定を行った際の映像品質(参考):
(GTX1650無印を除く)Turing世代では、Pascal世代と比べ品質が向上しているため、配信や録画用途の方は型落ちを選ぶべきではありません。
NVEnc対応リスト
https://developer.nvidia.com/video-encode-decode-gpu-support-matrix
OBS 23.0からNVIDIAと共同で開発された最適化されたNVEncが利用できます。
Turing以降だけでなく、Pascal以前にも有効とのことなので、既存ユーザは今すぐアップデートしましょう。
https://www.nvidia.com/en-us/geforce/news/geforce-rtx-streaming/
https://www.geforce.com/whats-new/guides/broadcasting-guide
OBS公式TwitterやNVIDIAによると、配信専用に別GPUを使用してもメリットが無いため推奨されないとのこと。
遊びたいゲームがある程度余裕を持ってプレイできるスペックを選ぶと良いでしょう。
https://twitter.com/OBSProject/status/1093974361588019200
NVEncが選べない #
廉価GPU・古い世代の場合、使えない・一部機能が制限されている可能性があるため、
以下のNVIDIA公式ドキュメントの対応表を確認する。
https://developer.nvidia.com/video-encode-decode-gpu-support-matrix
-
古いGPUに関しては
For a complete list, click on the buttons below to open the complete tables
から見る。 -
Max # of concurrent sessions
にNVIDIAのセッション数(同時エンコード可能な数)が書いてある。
3本以上を同時に処理する特殊な用途ならQuadroが欲しくなってくる。
同時配信では、3つ以上の解像度が必要なければ、#正しい同時配信の方法で十分。 -
HEVC B Frame support
は動画品質に効いてくるので、もしGPUを新調する場合はこれが使えるものを選んでおくと良い。 -
GeForce GTX 1650
はTuring GPU with Volta NVENC
と注釈が入ってるように新しいNVEncが使用できないため、これを選ぶならPascal世代を選んだ方がお得。
配信用にグラボを選ぶなら1650 Super~ということがわかる。
NVEncで配信録画開始時に失敗する #
配信開始しようとすると、以下のような素っ気ないエラーが返ってくる。
配信開始に失敗しました |
---|
出力開始に失敗しました。詳細はログを確認してください。 注:NVENCまたはAMDエンコーダを使用している場合は、ビデオドライバが最新であるかを確認して下さい。 |
FFmpegカスタム出力の場合は録画中に不明なエラーが発生しました
しか表示されないかもしれない。
この原因として、文字通りの場合もあるが、
NVEncセッション数制限がNVIDIA GeForceには設けられているため、同時にエンコード出来るのは2つまで。
他のアプリケーションがそれを使用している時に配信・録画開始しようとして失敗する場合がある。
裏でエンコードや画面共有等をしていなくとも、GeForce ExperienceのShadowPlayやWindowsのゲームバー(Game DVR)によってセッション数が専有される場合がある。
Windowsの設定->ゲーム->ゲームバーを無効。
GeForce ExperienceでShadowPlayを無効。
ログの見方はメニューバーのヘルプに書いてあるよ。
H.264/AVC Encoder (AMD Advanced Media Framework) #
AMD製APUやRadeonなどのdGPUで使用できるハードウェアエンコーダです。
アニメ調な絵が得意なNVEncに対して、AMD Advanced Media Framework(AMF)は実写のディテールを保った品質が特徴で、配信でH.264を使用する分には十分な品質でした。
項目 | 値 | 説明 |
---|---|---|
エンコーダ | H.264/AVC Encoder (AMD Advanced Media Framework) | |
プリセット | ||
品質プリセット | 品質 | |
プロファイル | High | NVEnc H.264を参照 |
レート制御方式 | 可変ビットレート(遅延節約)(VBRLAT) | |
プレパスモード | 無効 | |
目標ビットレート | NVEnc H.264を参照 | |
最大ビットレート | ||
最小QP | 18 | |
最大QP | 25 | |
キーフレーム間隔 | 2.00 | 0.50 のようにより動きに強いClosed GOPを指定することもできる。 |
表示モード | 詳細設定 |
QuickSync H.264 #
Intel製iGPU(CPUの内蔵グラフィック)搭載の、Quick Sync Video(QSV)が使えるモデルで有効な機能です。Intelの公式サイトで確認できます。
項目 | 値 | 説明 |
---|---|---|
エンコーダ | QuickSync H.264 | |
ターゲットの使用法 | quality | |
プロファイル | NVEnc H.264を参照 | |
キーフレーム間隔(秒) | ||
非同期深度 | 4 | |
レート制御 | CBR | |
ビットレート | NVEnc H.264を参照 | |
最大ビットレート |
アップル VT H264 ハードウェアエンコーダ #
MacOSではこちらを選ぶしかないようです。
項目 | 値 | 説明 |
---|---|---|
エンコーダ | アップル VT H264 ハードウェアエンコーダ | |
ビットレート | NVEnc H.264を参照 | |
限界ビットレート | 有効 | |
最大ビットレート | 6500 | |
最大ビットレート ウィンドウ(秒) | 1.00 | |
キーフレーム間隔(秒) | NVEnc H.264を参照 | |
プロファイル | ||
B フレームを使用する |
配信が止まる・途切れる・カクカクする #
- 前提として、x264を使用していないことを設定->出力->配信で確認する
- 主にNVEncの設定を参考に、値を変更する
- 統計を表示して配信してみる
録画 #
"録画開始"押下で選ばれるエンコード設定です。
因みにYouTubeの推奨値。あくまでもアップロード用の最終出力の推奨値であり、編集前のソースとして使う場合はこの値は推奨されない。
https://support.google.com/youtube/answer/1722171
項目 | 値 | 説明 |
---|---|---|
種別 | カスタム出力 (FFmpeg) | |
FFmpegの出力の種類 ファイルパスまたはURL |
ファイルに出力 | フォルダを参照又は直接ディレクトリのパスを記述。基本的に録画機能。 |
URLに出力 | rtmp URLを記述するとRTMP配信が可能。配信向けの設定値は正しい同時配信の方法を参照。 | |
スペースなしのファイル名を生成 | 有効 | |
コンテナフォーマット | mpegts mkv mp4 |
|
マルチプレクサーの設定(ある場合) | ||
movflags=frag_keyframe+empty_moov | ||
strict=-2 | ||
color_range=tv color_primaries=bt709 color_trc=bt709 colorspace=bt709 | ||
movflags=frag_keyframe+empty_moov strict=-2 color_range=tv color_primaries=bt709 color_trc=bt709 colorspace=bt709 | ||
movflags=faststart color_range=tv color_primaries=bt709 color_trc=bt709 colorspace=bt709 | ||
映像ビットレート | 100000 Kbps | |
キーフレーム間隔(フレーム) | 15 | |
出力をリスケールする | 無効 | |
映像エンコーダ 映像エンコーダ設定(ある場合) |
hevc_nvenc h264_nvenc h264_qsv utvideo dnxhd x264 |
|
すべてのコーデックを表示(潜在的に互換性がない場合でも) | 有効 | |
音声ビットレート | 320 | |
音声トラック | オーディオの詳細プロパティに対応したトラックを有効にする。#出力の音声に関する項を参照。 | |
音声エンコーダ | aac | |
flac | ||
音声エンコーダ設定(ある場合) | aac_coder=twoloop | 音声エンコーダにFFmpeg標準のAACエンコーダを使用する場合。 |
映画&ビデオはデフォルトではMPEG-2 TSに非対応のため、Microsoft Storeから拡張機能をインストールする必要があります。
https://www.microsoft.com/ja-jp/p/mpeg-2-video-extention/9n95q1zzpmh4
mp4にflacのような、規格外のフォーマットを扱う場合、MPC-BEをオススメします。
https://sourceforge.net/projects/mpcbe/
hevc_nvenc #
この設定を使用して録画すれば、ShadowPlayの1/10のファイルサイズで同等以上の品質を得られるでしょう。
項目 | 値 | 説明 |
---|---|---|
映像エンコーダ | hevc_nvenc | |
映像エンコーダ設定(ある場合) | ||
profile=main preset=medium rc=vbr_hq maxrate=200M bf=0 | ||
profile=main preset=medium rc=constqp init_qpI=0 init_qpP=10 bf=0 | 0Kbps にして無視してもらう必要がある。 |
|
preset=p7 profile=main rc=constqp rc-lookahead=1 spatial-aq=0 temporal-aq=1 weighted_pred=0 init_qpI=21 init_qpP=21 init_qpB=23 b_ref_mode=1 dpb_size=4 multipass=2 g=60 bf=3 | preset=p7 を使用するとRTX2080では間に合わなかった[出典不要]のでRTX3090が必要[要出典]。preset=p4 に妥協すると良い。multipass=0 も良いだろう。preset=p1-p7 dpb_size=4 multipass=2 は無視され、b_ref_mode=0 でないと動作しないFailed to open video codec: Operation not permitted 。最新のFFmpegを組み込みOBSをビルドすると引数が全て有効になる。引数の設定に成功しているかはメニューバー->ヘルプ->ログファイル->現在のログを表示で確認できる。 |
映画&ビデオはデフォルトではHEVCに非対応のため、Microsoft Storeから拡張機能をインストールする必要がある。
無料、ハードウェアデコード版(これで十分)
https://www.microsoft.com/ja-jp/p/hevc-video-extension/9n4wgh0z6vhq
有料、ソフトウェアデコードにも対応版
https://www.microsoft.com/ja-jp/p/hevc-video-extension/9nmzlz57r3t7
h264_nvenc #
項目 | 値 | 説明 |
---|---|---|
映像エンコーダ | h264_nvenc | |
映像エンコーダ設定(ある場合) | profile=high preset=medium rc=vbr_hq bf=0 maxrate=200M rc-lookahead=1 | |
preset=p4 profile=high rc=vbr rc-lookahead=1 spatial-aq=0 temporal-aq=1 cq=23 weighted_pred=0 coder=cabac b_ref_mode=2 dpb_size=4 multipass=0 g=120 bf=2 | preset=p7 を使用するとRTX2080では間に合わなかった[出典不要]のでRTX3090が必要[要出典]。preset=p4 に妥協すると良い。preset=p1-p7 dpb_size=4 multipass=2 は無視され、b_ref_mode=0 でないと動作しないFailed to open video codec: Operation not permitted 。最新のFFmpegを組み込みOBSをビルドすると引数が全て有効になる。引数の設定に成功しているかはメニューバー->ヘルプ->ログファイル->現在のログを表示で確認できる。 |
配信向けの設定値は正しい同時配信の方法を参照。
h264_qsv #
項目 | 値 | 説明 |
---|---|---|
映像エンコーダ | h264_qsv | |
映像エンコーダ設定(ある場合) | profile=high preset=veryslow maxrate=100M bf=0 b_strategy=1 look_ahead=1 look_ahead_depth=60 | 編集ソースとして適し、cbr_hq同様無印より高品質。 lookahead=1 はHaswell以降対応、非対応のCPUではlookahead:0 。 |
utvideo #
録画負荷が比較的軽い可逆圧縮コーデック。
一般的な中間コーデックではないので、編集ソフトの対応は微妙。
項目 | 値 | 説明 |
---|---|---|
コンテナフォーマット | avi | |
映像エンコーダ | utvideo | |
映像エンコーダ設定(ある場合) | pred=median | pred=gradient はエンコード/デコード速度と圧縮率のバランスが良く、pred=median の方が圧縮率が高い。 |
音声エンコーダ | pcm_s16le |
dnxhd #
Premiere ProやDavinci Resolveなど幅広い編集ソフトで使用できる扱いやすい中間コーデック。編集前ソースとして最適。
録画負荷はまあまあ。Core i7 8700では4K30 DNxHR SQは可能で、60fpsは盛大にドロップした。
項目 | 値 | 説明 |
---|---|---|
コンテナフォーマット | mov mxf |
|
映像ビットレート | 0 Kbps |
|
キーフレーム間隔(フレーム) | 1 | |
映像エンコーダ | dnxhd | |
映像エンコーダ設定(ある場合) | profile=dnxhr_444(yuv444p10le) profile=dnxhr_hq(yuv422p) profile=dnxhr_sq(yuv422p) profile=dnxhr_lb(yuv422p) |
|
音声ビットレート | 2304 Kbps | |
音声エンコーダ | pcm_s24le |
以下の表は
ffmpeg -loglevel error -i "input.mp4" -c:v dnxhd -b:v 1M -pix_fmt yuv422p10le -c:a pcm_s16le "output.mxf"
のエラー出力をAvidのドキュメントとWikipediaを参考に整形したものです。
Valid DNxHD profiles (FFmpeg) | |||
---|---|---|---|
Frame size / FPS | Resolution | bitrate | pixel format |
1920x1080p/23.976 1920x1080p/24 |
Avid DNxHD 175x | 175Mbps | yuv422p10 |
Avid DNxHD 115 | 115Mbps | yuv422p | |
Avid DNxHD 175 | 175Mbps | yuv422p | |
Avid DNxHD 36 | 36Mbps | yuv422p | |
Avid DNxHD 350x | 350Mbps | yuv444p10, gbrp10 | |
1920x1080p/25 | Avid DNxHD 185x | 185Mbps | yuv422p10 |
Avid DNxHD 120 | 120Mbps | yuv422p | |
Avid DNxHD 185 | 185Mbps | yuv422p | |
Avid DNxHD 390? | 390Mbps | yuv444p10, gbrp10 | |
1920x1080p/29.97 | Avid DNxHD 145 | 145Mbps | yuv422p |
Avid DNxHD 220 | 220Mbps | yuv422p | |
Avid DNxHD 45 | 45Mbps | yuv422p | |
Avid DNxHD 440x | 440Mbps | yuv444p10, gbrp10 | |
1920x1080p/50 | Avid DNxHD 365x | 365Mbps | yuv422p10 |
Avid DNxHD 240 | 240Mbps | yuv422p | |
Avid DNxHD 365 | 365Mbps | yuv422p | |
Avid DNxHD 75 | 75Mbps | yuv422p | |
Avid DNxHD 730? | 730Mbps | yuv444p10, gbrp10 | |
1920x1080p/59.94 1920x1080p/60 |
Avid DNxHD 440x | 440Mbps | yuv422p10 |
Avid DNxHD 290 | 290Mbps | yuv422p | |
Avid DNxHD 440 | 440Mbps | yuv422p | |
Avid DNxHD 90 | 90Mbps | yuv422p | |
Avid DNxHD 880? | 880Mbps | yuv444p10, gbrp10 |
x264 #
項目 | 値 | 説明 |
---|---|---|
映像エンコーダ | libx264 | |
映像エンコーダ設定(ある場合) | 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 | かなり重たい。 |
負荷を掛けずに同時配信する方法 #
現在OBSは同時配信を正式にサポートはしていません。
様々な方法がありますが、より効率的な方法を解説します。
一般的に知られている方法は、OBSを多重起動したり、OBSの配信から1つ、録画(FFmpegカスタム出力)から1つという方法ですが、
これは2つエンコード(及びデコード)が走るので極めて無駄であり、NVIDIA GeForceのNVEncセッション数(2)を使い切ってしまうのもあり、お勧めできません。
(私の環境ではFFmpegカスタム出力からの配信はドロップまみれで失敗しているのもある)
今回解説するのは、FFmpegカスタム出力でエンコードしローカルポートへ出力、その出力をffmpegに入力してエンコードせず複数出力するという手法です。
これなら上り回線が許す限り、2つ3つと同時配信が可能になります。
- まずはOBSの設定
配信設定の概要は、FFmpegカスタム出力の詳細はを参照。
FFmpegカスタム出力 | |
---|---|
項目 | 値 |
種別 | カスタム出力 (FFmpeg) |
ファイルパスまたはURL | rtmp://localhost:5555 |
コンテナフォーマット | flv |
映像ビットレート | 6000 Kbps |
キーフレーム間隔(フレーム) | 30fps: 15 60fps: 30 |
映像エンコーダ | h264_nvenc |
映像エンコーダ設定(ある場合) | profile=high preset=slow rc=vbr_hq maxrate=7M bf=2 rc-lookahead=32 |
音声ビットレート | 128 Kbps |
音声トラック | 1 |
音声エンコーダ | aac |
- コマンドプロンプト(PowerShellでは書き方が違うよ!)(
Win
-R
->cmd
)で以下ffmpegコマンドを実行
ffmpeg -listen 1 -i rtmp://localhost:5555 -c copy -f flv rtmp://live-tyo.twitch.tv/app/Twitchのストリームキー -c copy -f flv rtmp://a.rtmp.youtube.com/live2/YouTubeのストリームキー
※収益化している場合、Twitchは同時配信を認めていないのであくまでも例
- OBSで
録画開始
を押下。FFmpegカスタム出力を使うので配信開始
じゃないよ! - ffmpegが何らかのストリームを受け取ってるような表示になったら成功。
- OBSで
録画停止
を押下すると、勝手にffmpegの処理も止まります。
音声 #
設定 -> 出力 -> 音声
項目 | 値 | 説明 | |
---|---|---|---|
トラック1 | 音声ビットレート | 128 | |
320 | |||
名称 | 任意 | ||
トラック2 |
音声 #
設定 -> 音声
項目 | 値 | 説明 |
---|---|---|
サンプリングレート | 48kHz | |
チャンネル | ステレオ | |
デスクトップ音声デバイス | スピーカー SPDIF ライン 等 |
|
マイク音声デバイス | マイク ライン Analog Input 等 |
アプリケーション毎に音声を分けて録音する #
VoiceMeeterでも一応可能だが、TotalMix Fxが使用できるRMEのオーディオインターフェースが楽で高品質。
アプリケーション毎に別のデバイスから音声を出力させるよう設定し、その全ての音をモニターしたり、それらの中で任意の音声デバイスをそれぞれ別のストリームに録音できる。
- 1つのAIFに複数の音声デバイスがある
- 個々の音声デバイスで「ループバック」を設定可能
- 個々の音声デバイスは、OBSやDiscordなど、あらゆるアプリケーションで「別の音声デバイスとして認識される」
- 音声デバイスすべて・または一部の音声自由に選び、同じスピーカーとして自分で聞ける
要するに、
- マイクとデスクトップ音声を分けるのが通常だが、デスクトップ音声が複数あるので、通話とゲームの音声を分けられる
- ライブ配信の音声をモニターしても、配信に載せないことが可能
- ボイチェンの出力を1つのAIFでルーティングできる
- 聞いているBGMを配信に載せない、配信のBGMを聞かないことが可能
そんな夢のデバイスが世にはあります。
AD/DA・マイクプリ・クロックは言わずもがな(AG03の音質に満足できない!という方にもオススメ)、その品質を抜きにしても、少なくともWindows上で配信・録画用途で使用する場合、同価格帯のUniversal Audio Apollo Twin MkII等とは比べ物にならないアドバンテージがあると言えるでしょう。
ただ私も(紆余曲折を経て)愛用しているBabyface Pro FSは、Dynamics(Expander/Gate)機能が省かれている点が少々残念。
OBSやDiscordに最低限の機能はあるのでそれを承知で購入したが、やはり少々不便な時もある。
対応の有無は日本支部公式のPDFを参照。
https://synthax.jp/pdf/RME_TotalMix-FX-2017.pdf
OBSを起動すると他の音量が小さくなる #
-
タスクバー右のスピーカーアイコンの右クリックメニュー -> サウンド -> Windowsが通信アクティビティを検出したとき: 何もしない に設定する
-
設定->詳細設定->音声の"Windowsの音量を自動で下げる機能を無効にする"にチェック
音が出ない #
初期設定が間違っている場合 #
- オーディオの詳細プロパティのトラックが正しくチェックされているか
- 設定->出力の音声トラックが必要分チェックされているか
- FFmpegカスタム出力を使用している場合、設定->出力->録画の音声トラックが必要分チェックされているか
前回は大丈夫だったのに音が突然入らなくなった #
Windowsにおいて、以下の場合にDeviceIDが変更され、OBSの設定と食い違ってしまう場合があります。
- Windows Updateやクリーンインストール
- オーディオインターフェースのドライバの更新
- (WASAPIやASIOを使用するなどして)サンプルレートが変更された
サンプルレートが変更されただけの場合は、サンプルレートを元に戻すだけでOBSに音が入るかもしれませんが、その他の場合は設定->音声の再設定が必要になります。
マイクの音が左からしか聞こえない #
PC直差しの場合は恐らく起こらないが、AIF(オーディオインターフェース)等でモノラルマイクの音声を扱う際、AIFのコンソールかOBS側でL側の音声をLR両方に出すように設定する必要がある。
AIFによっては鎖のアイコンやらステレオ/モノラルトグルやらで設定できると思う。
AIFだけではLのみにしか流せない場合、OBS側で以下のように設定する。
オーディオの詳細プロパティでマイクの"モノラルにダウンミックス"または"モノラル"のチェックボックスを有効にする。
音が返ってくる #
- Windows サウンドのプロパティで"このデバイスを聴く"にチェックが入っていないか
- ブラウザ等で自分の配信をプレビューしている場合、ミュートされているか
- オーディオインターフェースや仮想オーディオデバイスで間違ったルーティングになっていないか
マイクのノイズを消したい #
OBSのフィルタを使う #
Discordで言うところの入力感度と同じ、オーディオインターフェースにあるようなノイズゲートを使用できる。
音量が閾値を超えると、ゲートが開放され音が入る。
音声/映像フィルタを参照。
RTX Voiceを導入する #
NVIDIA GeForce RTXシリーズで利用できる異次元のノイズ除去仮想オーディオデバイス。
一般的なノイズ除去とはまるで違う。机バンバンしてもポテチ食ってもバレない。
RTX Voiceを起動し、マイクを選んで"Remove background noise from my microphone"を有効にし、設定 -> 音声でNVIDIA RTX Voiceを選択することで使用できる。
- Input device"マイク (NVIDIA RTX Voice)"を設定 -> 音声のマイク音声に設定し、自分が話す声にノイズ除去を掛けるのが基本的な使い方。
- Output device"スピーカー (NVIDIA RTX Voice)"は設定 -> 音声の"デスクトップ音声"で使用でき、こちらでボイスチャット相手の声にノイズ除去を掛ける、といった応用的な使い方ができる。ただし、一般的にデスクトップ音声は他のゲーム音等も含まれるため、アプリケーション毎に音声を分けて録音できる環境 向け。
対象外のNVIDIA GTXシリーズで実行させるハックが紹介されている。
ASCII.jp:RTX Voiceの超強力なノイズキャンセルはゲームプレイにどの程度影響するのか検証してみた
オーディオインターフェースを導入する #
ノイズはそもそも最初から少ない方が良い。
そもそもPC内蔵や直挿しのマイクの場合、一定以上の音質はどうあがいても望めない。
因みに、音質を良くするとき、マイクやヘッドホンを更新する例があるが、
実はAD/DA、つまりDACやAIF(オーディオインターフェース)に先に投資したほうが費用対効果が大きい、というのを頭の片隅にでも置いておいてほしい。
予算が少ない・既存のプラグインパワーのマイクをそのまま使いたい・初心者でも使いやすい
予算に余裕がある・今後買い換えたくない・アプリケーション毎に音声を分けて録音したい
映像 #
項目 | 値 | 説明 |
---|---|---|
基本(キャンバス)解像度 | 3840x2160 2560x1440 1920x1080 1280x720 |
|
出力(スケーリング)解像度 | ||
縮小フィルタ | バイキュービック ランチョス |
|
FPS共通値 | 30 60 |
|
FPS分数値 | 30fps: 30/1 60fps: 60/1 |
ホットキー #
ミュート、ミュート解除にDiscordのミュートのキーを割り当てておくと便利だよ!
録画開始・終了に割り当てるのは良いが、配信は誤爆防止の為にここで設定するようなキーの組み合わせを使う一般的なキーボードやマクロには割り当てるべきではない(Elgato Stream Deckの場合は仕組みが違うので例外)。
詳細設定 #
項目 | 値 | 説明 | |
---|---|---|---|
一般 | プロセスの優先度 | 通常 | |
映像 | カラーフォーマット | NV12 | |
YUV色空間 | 709 | ||
YUV色範囲 | 一部 | ||
音声 | 音声モニタリングデバイス | 既定 | |
録画 | ファイル名書式設定 | %CCYY-%MM-%DD_%hh-%mm-%ss | 2020-02-20_20-02-22.ts にようになる。 |
ネットワーク | IP選択 | 既定 | |
輻輳を管理するためにビットレートを動的に変更する(ベータ版) | 無効 | ||
ネットワークの最適化を有効にする 新しいネットワークコードを使用する |
有効 | ||
TCPページングを有効にする 低遅延モード |
無効 |
ソースの表示/非表示のキーとスタジオモードと一緒に使う場合、トランジションに同じキーを割り当てれば可能だが、あまり自由度が無いので敢えてスタジオモードを使わないという選択肢もある。
ソースの右クリックメニュー -> 変換と組み合わせれば、スタジオモードと遜色なく操作できます。
YouTube側の設定 #
配信時はOBSで映像・音声のソース、エンコードの設定を行い、YouTube等の設定でタイトルや概要、公開設定や遅延等のプラットフォーム側のモード選択を行います。
配信プラットフォーム側の設定画面に記載されているRTMP URLに対してストリーミングすることで、YouTube側で設定されたタイトル等が適用され、視聴者側に反映されます。
ライブダッシュボード #
※この項目は古いです
配信・コメントのプレビュー、YouTube側の設定を行う
Live Dashboard - YouTube
基本情報 #
タイトル、概要欄はお好みで。
#Minecraft #Apex #Fortnite のように入れるとタイトルの場合はタイトル文字列内に、概要欄の場合はタイトル上にタグを表示できる。
カテゴリは"ゲーム"を選択し、該当するものを選んでおくと良い。
プライバシーは取り敢えず誤爆防止に"非公開"(又は限定公開)で。配信設定が終わったら"公開"にしてライブしてみよう。
ストリームオプション #
DVRを有効にする: 視聴者が再生時に巻き戻せるか否か。お好みで。
完了時にアーカイブを限定公開にする: 非公開ライブのアーカイブは既定で非公開、限定公開・公開も同様に引き継ぐが、公開でライブ後も既定で限定公開にすることも可能。
ストリームの最適化: 画質を優先する場合や4Kの場合は通常の遅延。品質を犠牲にコメントとの会話を優先するなら低遅延や超低遅延。
エンコーダーの設定 #
ストリーム名/キーをOBSで使用する。サーバURLは基本不要(FFmpegカスタム出力等で使用する)。
ライブ配信を開始 #
YouTubeの新しいライブ配信UIでは、以前とは違い配信ソフトで配信開始した後、こちらで配信を開始すると実際に配信が始まる仕様になっています。
少々面倒になったが、不具合や誤爆等による放送事故を防ぎやすいという意味でも良いアップデートでしょう。
-
YouTubeのトップページから、ライブ配信を開始にアクセスし、エンコーダ配信タブを選択します。
管理タブでは、ライブ予約枠や正しく終了できていないライブの削除を行えます。
-
既定値から全て設定し直す場合は"新しいライブ配信"、
前回のライブの設定を流用する場合は、流用元を選び"コピーして作成"を選択します。
- タイトルや説明を記述してください。
説明欄に#Minecraft
のようにハッシュタグを追加すると、タイトル上に表示されます(3つまで)。
説明欄の改行は正しく表示されないので、テキストエディタで編集してコピペするといいでしょう。
はじめての場合は公開ではなく、限定公開でテストしましょう。非公開はログインが必要になるので、例えばコメントをOBSで表示することは出来ません。
また、どの公開設定でも著作権に触れるものは容赦なく削除されます。クラウドストレージのような使い方は出来ません。
後でスケジュール設定を有効にすると、ライブ配信枠の予約ができます(公開の場合はこの時点でチャンネル登録者に表示され、例えばZapierの連携では通知が飛びます)。無効にすれば、今すぐに配信するモードになります。
- ストリームキーをOBSの設定->配信を参考に設定します。
タイトルやカテゴリ等は後からでも鉛筆アイコンから修正できます。
"設定"をクリックして次へ
- ライブ配信の設定を行います。
設定は1つの枠に1つまでで、配信開始後にそれを変更することはできません。
DVRを有効にすると、視聴者は放送中でも巻戻しが出来ます。
配信が4Kの場合、画質をより良く場合(YouTube側のエンコードの設定が変わります)は通常の遅延、コメントとのタイムラグを小さくしたい場合は低遅延や超低遅延を選択します。
- OBSで配信開始すると、"ライブ配信を開始"が選べるようになります。"ライブ配信を開始"を押下すると、その時点でYouTubeが配信を開始します。視聴者に公開されるのはここからです。
少し遅延があるので、準備している時の映像や音声が流れないよう、プレビューを観ながら余裕を持って開始しましょう。
- 配信が開始されると、新しいライブダッシュボードへ飛ばされます。
この画面はライブ予約または配信中であれば管理タブからもアクセスできます。
配信を終了する場合は、右上の"ライブ配信を終了"を押下してから、OBSで配信終了します。そうすることで、視聴者側で「クルクル」せずスマートに配信を終了できます。
応用 #
配信・録画品質を保つ為に気を付けること #
OBS側を煮詰めても、上流であるプレイ画面や操作画面等の映像、マイクや楽器等の音声ソースが汚ければ、それ以上の品質は出ません。
映像は余裕のあるスペックのマシンでゲームを綺麗に描画し、音声は良いプリアンプとADを載せたAIFを使用しましょう。
そして最後に、出来る限り綺麗なエンコードが可能なTuring世代のNVIDIA製GPUを選びましょう。
次の項で私のメインPCと周辺機器から録画・配信に関連する項目をリストしておきます。
OBSに画質を求めるのは間違っていません。
配信・録画向けPC構成 #
配信・録画には映すソース(ゲーム等のアプリケーション)に必要なリソース+αの処理能力が必要です。
ただし盲目的にCPU、GPUの強化を推奨しているものは、選ぶパーツや不適切なエンコード設定によってはまるで無意味な場合もあります。
正しくOBS側の設定を行う前提で、リアルタイムエンコードのパフォーマンスと品質において優れ、その中でより効率的な組み合わせを選択すると、より快適な配信・録画環境を構築できます。
カテゴリ | 私の環境(例) | 理由 |
---|---|---|
CPU | Intel Core i7 8700 | |
dGPU | NVIDIA Geforce RTX 2080 | |
DRAM | 32GB | |
SSD | Sandisk Extreme Pro NVMe 1TB | |
AIF | RME Babyface Pro FS | |
Mic | SPL(Hong Kong)Limited XCM6035 + RODE VXLR+ + CANARE EC03 |
YouTubeの劣悪エンコード事情への対処法 #
「YouTubeにうpしたらなんか汚いな…」
YouTubeはアップロードされた動画を全て再エンコードすることはよく知られています。
良くある間違いは「できる限り高ビットレートでエンコードしたものをアップロードすると良い」というものです。
-
YouTubeのエンコーダは、解像度に対してビットレートの割り当てが小さく、更にエンコーダの品質自体も決して良くないため、自分のマシンで破綻しない程度に圧縮してからアップロードしたほうが
マシなより良い品質が得られる。 -
YouTubeのビットレート割り当てが小さいなら、擬似的に解像度を盛れば比較的高いビットレートでエンコードしてもらえる。
-
YouTubeが提供するエンコードのうち、映像はH.264とVP9、音声はAACとOpusがあるが、弱小チャンネルや再生数の小さい動画には品質の高いVP9やOpusが提供されない。
上記を満たすために、下記のようなアプローチを行う。
YouTubeの再エンコ品質改善 | ||
---|---|---|
#動画映像の再エンコ品質 | #配信映像の再エンコ品質 | #動画音声の再エンコ品質 |
動画映像の再エンコ品質 #
一応「アップコンバート」や「フレーム補間」をするわけだが、決して滑らかにする目的ではないことに注意。
そのため、ただ編集ソフトで8Kや60fpsを指定しても良い結果は得られない。
-
疑似4K8Kをする場合、スケールアルゴリズムはニアレストネイバー法を選ぶ。
所謂ドット絵を滲ませずに拡大するのと同じで、解像度のかさ増しのために元の映像を滲ませてしまっては元も子もない。 -
補間しない60fps補間。これも同様に、30fpsを60fps、24fpsを48fpsに水増しする際、ヌルヌルな映像になるようフレームを補間するのが目的ではなく、そのfpsに合わせたビットレート設定でYouTubeにエンコードしてもらうことが目的。
-
DCIやシネスコの縦横比にクロップする。更に黒帯を追加し、その分ビットレートを稼ぐ。
上記が出来るソフトとなるとFFmpegほぼ一択となる。
/blog/ffmpeg
1920x1080を3840x2160にニアレストネイバー法でスケーリングするビデオフィルタの例。
-vf scale=3840:2160:sws_flags=neighbor
1920x1080をDCI風のアスペクト比になるような黒帯を追加した7680x4320に拡大し、滑らかなフレーム補間が一切ないフレームの水増しを行う例。
-vf crop=1920:1012,pad=width=1920:height=1080:x=0:y=34,scale=7680:4320:sws_flags=neighbor,fps=60
↑のソースが3840x2160版。
-vf crop=3840:2026,pad=width=3840:height=2160:x=0:y=67,scale=7680:4320:sws_flags=neighbor,fps=60
以下は私が普段使ってる引数なので、-vf ~~
辺りを置き換えると綺麗かつ高速にエンコードできると思う。
-bf 2
はTuring以降のみ使用可能なので、Pascal以前は-bf 0
とすること。
ffmpeg -i input.mp4 -c:a copy -vf ~~ -c:v hevc_nvenc -preset:v slow -profile:v main -rc:v constqp -rc-lookahead 32 -init_qpI 21 -init_qpP 24 -init_qpB 25 -g 30 -bf 2 -refs 6 -pix_fmt yuv420p -movflags +faststart out.mp4
配信映像の再エンコ品質 #
同様にFHDソースをニアレストネイバー補間でUHD 4Kに拡大し、ライブ配信することでより高品質な配信/アーカイブを残させる。
項目 | 値 | 説明 |
---|---|---|
ファイル -> 設定 -> 出力 -> 配信 | ||
エンコーダ | NVIDIA NVENC H.264 (new) | |
レート制御 | VBR | |
ビットレート | 15000 | |
最大ビットレート | 20000 | |
ファイル -> 設定 -> 映像 | ||
基本(キャンバス)解像度 | 3840x2160 | |
出力(スケーリング)解像度 | 3840x2160 | |
FPS共通値 | 30 | |
ソースの右クリックメニュー -> フィルタ -> スケーリング/アスペクト比 | ||
スケールフィルタ | ポイント | |
解像度 | 基本(キャンバス)解像度 |
動画音声の再エンコ品質 #
ほぼこちらの方の内容です。
YouTubeにアップロードする動画の音声は、推奨の44.1kHz/16bitなaacではなく、48kHz/24bitのflacが良さそうです。
https://vocal-edit.com/blog/2019/01/11/youtubeで最高音質を目指す/
-
flac 48kHz/24bit
FFmpegカスタム出力でflac
を選択し、mp4
に無理矢理詰める場合は適切に設定します。
因みに、OBSは宗教上の理由から24bitに対応しないようです(FFmpegカスタム出力で対応)。 -
True peak: -1.0dBFS以下
-
Integrated loudness: -13.5~-13.0LUFS
下記はFFmpegでリアルタイムなマイク音声Analog (1+2) (RME Babyface Pro)
を取得し、True peakとIntegrated loudnessを取得する例。
C:\Rec\obs>ffmpeg -f lavfi -i "amovie='audio\=Analog (1+2) (RME Babyface Pro)':f=dshow,ebur128=peak=true" -f null - (Qキーで終了) [Parsed_ebur128_1 @ 000002670bacbc40] Summary: Integrated loudness: I: -24.0 LUFS Threshold: -35.2 LUFS Loudness range: LRA: 9.9 LU Threshold: -45.5 LUFS LRA low: -31.3 LUFS LRA high: -21.4 LUFS True peak: Peak: -3.1 dBFS
マイク音声Analog (1+2) (RME Babyface Pro)
にあたるデバイスを取得するコマンド。
C:\Rec\obs>ffmpeg -hide_banner -list_devices true -f dshow -i dummy [dshow @ 000001510adffa80] DirectShow video devices (some may be both video and audio devices) [dshow @ 000001510adffa80] Could not enumerate video devices (or none found). [dshow @ 000001510adffa80] DirectShow audio devices [dshow @ 000001510adffa80] "ADAT (7+8) (RME Babyface Pro)" [dshow @ 000001510adffa80] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{635F1A57-FD89-4820-9A1D-F105515D2989}" [dshow @ 000001510adffa80] "SPDIF/ADAT (1+2) (RME Babyface Pro)" [dshow @ 000001510adffa80] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{3DCB7A75-7200-4418-9910-432DC9425902}" [dshow @ 000001510adffa80] "Analog (1+2) (RME Babyface Pro)" [dshow @ 000001510adffa80] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{E8005C12-7765-47D1-90F8-E73C89577884}" ... dummy: Immediate exit requested
カレントディレクトリのinput.wav
を読む例。
C:\Rec\obs>ffprobe -i "amovie=input.wav,ebur128=peak=true"
FFmpegでラウドネスノーマライゼーションをかける例。
loudnorm | |||
---|---|---|---|
意味 | 引数 | 推奨値 | 値 |
Integrated loudness | I | -13.5~-13.0LUFS | -13.5 |
True peak | TP | -1.0dBFS以下、既定値は-2.0 | -2.0 |
Loudness range | LRA | 既定値は7、GoogleやAmazonが11を指定してるので従うことにした | 11 |
C:\Rec\obs>ffmpeg -i rec.mp4 -filter_complex "[0:1]loudnorm=I=-13.5:TP=-2:LRA=11[mic]" -strict -2 -ar 48000 -c:a flac -c:v copy -map 0:0 -map "[mic]" out.mp4
C:\Rec\obs>ffmpeg -i out.mp4 -filter_complex "[0:1]ebur128=peak=true" -f null - [Parsed_ebur128_0 @ 0000022e385d18c0] Summary: Integrated loudness: I: -16.9 LUFS Threshold: -27.7 LUFS Loudness range: LRA: 8.4 LU Threshold: -37.9 LUFS LRA low: -22.7 LUFS LRA high: -14.3 LUFS True peak: Peak: -1.7 dBFS
エンコード無しで数百倍速のタイムラプスをつくる #
一般的な動画編集ソフトのフィルタでは、8倍速まで、のように制限があったり、プレビューが重くなったりと限度がある。
しかし、動画の構造を理解していれば、再エンコード無しで数十、数百、数千倍速の動画、もといタイムラプスを容易につくることができる。
この方法なら24時間録画し続けても、然程のファイルサイズにならないというメリットもある。
例えば、1fpsで録画した動画のタイムスタンプを無視して30fpsとして読み込むと、1x30=30倍速となる。
録画時のFPS | キーフレーム間隔 (フレーム) |
30fpsにした場合の倍率 | |
---|---|---|---|
全フレームを使用 | キーフレームのみ使用 | ||
30fps | 15 | (1x) | 15x |
60fps | 30 | (1/2x) | 15x |
1fps | 4 | 30x | 120x |
1/6fps | 4 | 180x | 720x |
1/15fps | 4 | 450x | 1800x |
30fpsや60fps等の等倍速の動画として使えるものでも、後からキーフレームのみ使用することで簡単に早送りを生成することが可能。
1fpsや1/6fps等のタイムラプス専用の動画も、全フレームを使用する場合とキーフレームのみ使用する場合の2通りの倍速が再エンコード無しで作成可能。
因みに、全フレームがキーフレーム(ALL-I)の場合、"全フレームを使用"="キーフレームのみ使用"となる。
ビタミンC1個分のレモンがビタミンC1個分なのと同様である。
では実際にやってみよう。
- 設定->映像でFPS分数値を選択、分子と分母を指定。
- 設定->出力->録画でキーフレーム間隔を設定。
- 録画
- FFmpegを使う。
/blog/ffmpeg
以下はH.265で録画した場合の例。H.264の場合の拡張子は.264
となる。
rem 素材のある場所に移動
cd "C:\Rec\obs"
rem tsで録画している場合はmp4に変換
ffmpeg -i rec.ts -c copy rec.mp4
rem 音声を含んでる場合はタイムラプスにする前に除外する
ffmpeg -an -i rec.mp4 -c copy rec.mp4
rem 複数ファイルを一括で処理する場合
ffmpeg -f concat -safe 0 -i input.txt -c copy rec.mp4
rem キーフレームのみ使用する場合、-discard nokeyでキーフレーム以外を破棄する
ffmpeg -i rec.mp4 -c:v copy tmp.265
rem キーフレームのみ使用する場合、-discard nokeyでキーフレーム以外を破棄する
ffmpeg -discard nokey -i rec.mp4 -c:v copy tmp.265
rem 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
複数ファイルを一度に処理する場合も再エンコードなしで可能。タイムラプス用に録画したものは、プレビューで確認しながらのカット編集が難しいため、この処理を行った後に行うと良い。
OBSのビルド #
配布されているビルド済みのOBSは、同梱されているFFmpegのバージョンが古かったりするので自分でビルドしたい場合がある。
例えば、下記のように配布されているOBSでは動作しない引数が、
(最新のFFmpegを組み込んで)自ビルドしたOBSでは動作するようになる。
いち早く新機能にアクセスしたい場合や、拡張機能を盛り込んでビルドする時にも有効だ。
下記はOBS公式Wikiの手順を参考にしつつ、コピペできるようCLIでWindows用バイナリをビルドする手順になっている。
WSLやGit、MSBuildの環境構築手順は他に情報が山ほどあるので割愛する。
-
必要な依存関係をダウンロードする
- VS2017/VS2019向けビルド済み依存関係(FFmpeg, x264, cURL, and mbedTLS)
- Chromium Embeded Framework (CEF) branch 3770 Windows 64bit(ブラウザソース)
http://opensource.spotify.com/cefbuilds/index.html#windows64_builds で"CEF source"のリンクがhttps://bitbucket.org/chromiumembedded/cef/get/3770.tar.bz2
になっている最も新しいバージョンをデベロッパーツール等を用いて探す。
2020年09月現在の最新は07/27/2019 - CEF 75.1.14+gc81164e+chromium-75.0.3770.100 / Chromium 75.0.3770.100。
cf. obsproject/obs-browser: CEF-based OBS Studio browser plugin - Qt5
- CMake
インストーラ版推奨、Zip版の場合は環境変数Pathを通しておく - Visual Studio 2019 Community
WindowsにプリインストールされているC:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
で十分かもしれない。
環境変数Pathを通しておく
-
リポジトリのダウンロード
WSLのgit等を利用してリポジトリをクローンする。
GitHubのWebページのDownload Zipではsubmodulesが足りないので下記手順が必須。
git clone --recursive https://github.com/obsproject/obs-studio.git
- CMakeでCEFをビルド
cmake-gui.exeは操作が分かりづらいので、一行コマンドで覚えられるcmale.exeを使うとよい。-S
には1.でダウンロード・展開したCEFのルートディレクトリを指定-B
にはcmakeの出力先を指定
cmake.exe -S "C:\repos\cef_binary_75.1.14+gc81164e+chromium-75.0.3770.100_windows64" -B "C:\repos\cef_binary_75.1.14+gc81164e+chromium-75.0.3770.100_windows64\build"
cmake.exe --build "C:\repos\cef_binary_75.1.14+gc81164e+chromium-75.0.3770.100_windows64\build"
- MSBuildで
build\cef.sln
をビルド
必要なのは${CEF_ROOT_DIR}\build\libcef_dll_wrapper\Release\libcef_dll_wrapper.lib
で、cef.slnをビルドする必要はない。これがないと5.でCould not find the CEF wrapper library
と怒られ、ブラウザソースが追加されない。
MSBuild.exe -maxCpuCount -target:build -property:"PlatformToolset=v142;WindowsTargetPlatformVersion=10.0.19041.0;Configuration=Release;Platform=x64" "C:\repos\cef_binary_75.1.14+gc81164e+chromium-75.0.3770.100_windows64\build\libcef_dll_wrapper\libcef_dll_wrapper.vcxproj"
- CMakeでOBSをビルド
-S
には2.でcloneしたリポジトリのルートディレクトリを指定-B
にはcmakeの出力先を指定-DDepsPath
には1.でダウンロード・展開したdependencies2017\win64
ディレクトリを指定-DQTDIR
には1.でダウンロード・展開したQt_5.10.1\msvc2017_64
を指定- 最新のFFmpegをOBSで使用する場合、media-autobuild_suiteでFFmpegをビルド
-DFFmpegPath
にincludeディレクトリmedia-autobuild_suite\local64\include
を指定media-autobuild_suite\build\media-autobuild_suite.ini
の設定によってOBSのビルドが通らない場合がある。下記で動作確認した。
[compiler list] arch=3 license2=1 standalone=1 vpx2=1 aom=1 rav1e=1 dav1d=1 libavif=1 x2643=1 x2652=1 other265=1 svthevc=1 xvc=1 vvc=1 svtav1=1 svtvp9=1 flac=1 fdkaac=1 faac=2 exhale=1 mediainfo=2 soxB=1 ffmpegB2=3 ffmpegUpdate=3 ffmpegChoice=1 mp4box=2 rtmpdump=2 mplayer2=2 mpv=2 vlc=2 bmx=2 curl=1 ffmbc=2 cyanrip2=2 redshift=2 ripgrep=2 jq=2 jo=2 dssim=2 avs2=2 CC=2 cores=6 deleteSource=2 strip=1 pack=2 logging=1 updateSuite=2 timeStamp=1 ccache=1 noMintty=1
-DBUILD_BROWSER
でブラウザソースを有効にし、-DCEF_ROOT_DIR
に3.4.でビルドが済んでいるCEF Binaryのパスを指定- WindowsのCMakeでビルドする際、OBS_VERSIONを指定しないとビルドできない既知の不具合がある。一応、WSLのcmakeを途中まで走らせて取得したバージョンを
-DOBS_VERSION_OVERRIDE="26.0.0-rc2-12-gb2d42c06"
のように指定すればビルドできる。
cmake.exe -S "C:\repos\obs-studio" -B "C:\repos\obs-studio\build" -DDepsPath="C:\repos\dependencies2017\win64" -DQTDIR="C:\repos\5.10.1\msvc2017_64" -DFFmpegPath="C:\bin\media-autobuild_suite\local64\include" -DCEF_ROOT_DIR="C:\repos\cef_binary_75.1.14+gc81164e+chromium-75.0.3770.100_windows64" -DBUILD_BROWSER=yes -DOBS_VERSION_OVERRIDE="26.0.0-rc3-6-g0b163018"
-- copying C:/Users/sbn/Downloads/5.10.1/msvc2017_64/lib/cmake/Qt5Core/../../../bin/libGLESv2d.dll to C:/bin/obs-studio/additional_install_files/exec64d
-- Configuring done
-- Generating done
-- Build files have been written to: C:/bin/obs-studio/build
cmake.exe --build "C:\repos\obs-studio\build"
obs-ffmpeg-mux.vcxproj -> C:\repos\obs-studio\build\plugins\obs-ffmpeg\ffmpeg-mux\Debug\obs-ffmpeg-mux.exe
Building Custom Rule C:/Rec/obs-studio/plugins/obs-x264/CMakeLists.txt
obs-x264-test.c
obs-x264-test.vcxproj -> C:\repos\obs-studio\build\plugins\obs-x264\Debug\obs-x264-test.exe
Building Custom Rule C:/Rec/obs-studio/CMakeLists.txt
- MSBuildでcmakeで出力された
build\obs-studio.sln
をビルド
Windows 10 SDKのバージョンWindowsTargetPlatformVersion
はWindows10のバージョンによって異なるので、必要に応じて対応したバージョンに書き換えるか、Visual Studio Installerの拡張機能の管理で追加する。
MSBuild.exe -maxCpuCount -target:build -property:"PlatformToolset=v142;WindowsTargetPlatformVersion=10.0.19041.0;Configuration=Release;Platform=x64" "C:\repos\obs-studio\build\obs-studio.sln"
ビルドに成功しました。
と出れば例外吐いてても問題ない。
obs-studio\build\rundirRelease\bin\64bit\obs64.exe
を起動
avcodec-58.dllが見つからないため、コードの実行を続行できません。
と怒られる場合は、media-autobuild_suite\local64\bin-video\*.dll
をこの場所にコピーする