OBSに画質を求めるのは間違っているだろうか
TL;DR #
この記事はOSSのOpen Broadcaster Software(OBS Studio)のチュートリアルです。
OBSは配信の品質向上、処理の軽量化に最適なアプリケーションです。たとえ録画用途であってもBandicamやShadowPlay等の他のアプリケーションを選ぶ余地はありません。
日本語の情報が少なく、OBS関連では辿り着けない情報も含めて解説するので、何かに躓いている方や更に配信・録画品質を上げたい方は必見です。
目次・Ctrl
-F
を活用してね!
更新履歴 #
日時 | 内容 |
---|---|
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 |
|
2020-12-10 |
|
2020-12-15 |
|
2020-12-17 |
|
2021-05-01 |
|
2021-06-28 |
|
ダウンロードとインストール #
OBSは開発が盛んなOSSなので、更新はチェックしておくと良い。
StreamlabsやN Airの場合、バージョンが古かったり録画機能が削除されているので、本家がオススメ。
下記の公式サイトにインストーラとポータブル版(Zip)のURLがある。
Open Broadcaster Software | OBS
ポータブル版をProgram Files以外のディレクトリにインストールする場合、bin・data・obs-pluginsが含まれるOBS Studioディレクトリのセキュリティ権限にALL APPLICATION PACKAGES
というオブジェクト名を追加して、アクセス許可する必要がある。この権限がないと、特定の機能(UWPアプリのゲームキャプチャ)が正しく機能しない場合がある。
OBS 26.0で追加されたVirtual Camera機能を使用するにはインストーラ版を選択する。
因みに"GitHubで見る"をクリックすれば、正式リリース前のRelease Candidate版(リリース候補版)等をいち早く試すこともできる。
勿論ここからソースコードを入手し、自前ビルドすることも可能。
非公式ドキュメント(頻繁に更新されています)
Open Broadcaster Software Studio Multiplatform Help Guide [PDF] | OBS Forums
初回起動と画面構成 #
OBSを管理者として実行すると、GPU高負荷時に統計 -> レンダリングラグが原因で逃したフレームが低減し、配信のカクつきがを最小限にできる可能性があります(OBS 24.0.3~)。
OBS Studio 24.0.3 GPU Priority Fix Testing | OBS Forums
自動構成ウィザードは、実行中のマシンに合わせて適切に設定してくれる。
らしいが、何れにせよ設定し直す必要があるので勉強も兼ねて"いいえ"を選択。
メニューバー #
ファイル #
項目 | 説明 |
---|---|
録画を表示 | |
録画の再多重化 |
録画が最多重化されましたが、ファイルが未完成の可能性があります と表示され失敗する。 |
設定 | |
設定フォルダーを表示 | |
プロファイルフォルダーを表示 | |
常に手前に表示 | |
終了 |
編集 #
項目 | 説明 |
---|---|
全画面インターフェイス | |
ドック | |
ツールバー | |
ステータスバー | |
マルチビュー(全画面) | |
マルチビュー(ウィンドウ) |
プロファイル #
プロファイルを分けることで、異なる配信先やキャンバスサイズ・フレームレート、エンコード設定を切り替えられる。
プロファイルには設定 -> 一般 設定 -> 音声 -> グローバル音声デバイス以外の設定が含まれる。
配信・録画中に切り替えることはできない。
シーンコレクション #
シーンコレクションを分けることで、用途別に複数シーンを一括で切り替え、不必要なシーンを読み込まない状態にできるので、軽量化・安定化に役立つ。
シーンコレクションにはシーンやそれに含まれるソース、音声ミキサーが含まれる。
ツール #
項目 | 説明 |
---|---|
自動構成ウィザード | |
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).*VoiceChat$ |
||
どのウィンドウにも一致しない場合 | 切り替える: 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で保存。This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters#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フィルタに登録
スケーリング/アスペクト比 #
スケールフィルタ | |
解像度 |
音声フィルタ #
推奨フィルタ (適用順) | ||
---|---|---|
項目 | 説明 | |
ノイズゲート Noise Gate |
|
|
閉鎖閾値 Close Threshold |
0.00 dB に、閉鎖閾値を最小-96.00 dB にし、開放閾値を適切に声が入るまで小さくしてから、閉鎖閾値を大きくする。
|
|
開放閾値 Open Threshold |
||
動作開始時間 Attack Time |
25 ms では、開放閾値に余裕がなく語頭にアクセントがないと子音が掠れてしまう場合がある。5 ms がオススメだが、実際に聞いてブチブチ言わないか確認が必要。 |
|
保持時間 Hold Time |
200 ms で問題ない。 |
|
解除時間 Release Time |
150 ms では語尾が不自然に切れる場合があるので、SNRが大きい環境なら1000 ms (1秒)に設定するとよい。 |
|
ノイズ抑制 Noise Suppression |
|
|
方式 |
libspeexに基づくノイズ抑制アルゴリズム。低品質で低負荷。 AIベースのノイズ抑制アルゴリズム。高品質で高負荷。 RTX Voiceと異なり、RTX GPUでのみ使用できる。高品質。 NVIDIA Display Driver 456.38以降とAudio Effects SDKが必要。Studio Driver 462.31でも動作した。 |
|
Suppression Level |
|
|
Suppression Intensity |
|
|
リミッター Limiter |
|
|
閾値 Threshold |
|
|
Attack |
|
|
リリースタイム Release |
|
項目 | 説明 | |
---|---|---|
VST 2.x プラグイン | VST 2.x Plug-in |
|
コンプレッサー Compressor エキスパンダー Expander |
|
|
プリセット Presets |
|
|
比率 Ratio |
10.00:1 、つまりThresholdより大きい音はAttackを経て1/10に減衰される。 |
|
閾値 Threshold |
|
|
アタックタイム Attack |
1000ms 程度にすると語尾が切れなくてよいかもしれない。 |
|
リリースタイム Release |
||
出力ゲイン Output Gain |
|
|
サイドチェーン/ダッキングソース Sidechain/Ducking Source |
|
|
Detection |
|
|
ゲイン Gain |
|
|
映像の遅延 (非同期) Video Delay (Async) |
|
|
極性を反転する Invert Polarity |
|
Compressor | Groove Agent SE | steinberg.help
キャンバス解像度が変わってもレイアウトが崩れない相対的なソースをつくる #
プロファイル -> 設定 -> 映像 で指定したキャンバス解像度がプロファイルの切り替えによって変更されると、折角つくったレイアウトも崩れてしまう。
ここに書かれているように、基本(キャンバス)解像度と出力(スケーリング)解像度は同じが好ましい。
よって、共通のシーンコレクションを異なる解像度のプロファイルで使用し、配信と録画を異なる解像度で行いつつ同じシーンコレクションを使用することを諦めている方も多いはず。
しかし、実はソースに対して変換・グループ化・スケールフィルタの組み合わせによって相対レイアウトを実現できる。勿論、ソースはキャンバス解像度と同じ縦横比(16:9等)でなくても動作する。
- 変換のバウンディングボックスでキャンバス解像度の縦横比に合わせる
項目 | 値 | 解説 |
---|---|---|
バウンディングボックスの種類 | 境界の内側に合わせる |
|
最大サイズのみ |
|
|
バウンディングボックスの配置 | 中央 | |
バウンディングボックスのサイズ | 1280x720 1920x1080 2560x1440 3840x2160 |
|
- 画面端に表示するコメント欄等のオーバーレイ表示
前述のように、オーバーレイそれぞれが16:9になるようにバウンディングボックスで管理してもよいが、オーバーレイものは解像度がまちまちなので直観的ではない。
ダミーの16:9の色ソースを置いて(非表示にし)、2.や3.を行ってからグループ内のソースの位置を調整するとよい。
-
1つあるいは複数のソースを選択し、グループ化する
このとき、それぞれのソースの最終的なサイズ(バウンディングボックスのサイズ)が同じでないと、一番大きなソースに合わせてレイアウトが崩れてしまう。
グループを分けるか、1.の時点でリサイズを行って解像度を揃える。 -
グループ全体にスケールフィルタでキャンバス解像度を適用する
キャンバス解像度の異なるプロファイルを切り替えてみましょう。あら不思議、全くレイアウトが変わりません。
音声ミキサー #
設定->音声で設定したオーディオソースが表示される。
歯車又は右クリックでオーディオルーティング等の各種設定項目が表示される。
項目 | 説明 |
---|---|
すべて再表示/非表示 | 音声ソースの表示/非表示を切り替える |
名前を変更 | 表示名を変更できる |
フィルタをコピーする/貼り付ける | "フィルタ"で設定した項目をコピー&ペースト出来る |
垂直レイアウト | 既定では横だが、縦のレベルメータ表示に変えることができる。多くの音声デバイスを使用する人にオススメ。 |
フィルタ | オーディオフィルタを使用できる。下記参照。 |
プロパティ | ここでもデバイスの選択を行える。 |
オーディオの詳細プロパティ | オーディオルーティングやパンの設定が出来る。下記参照。 |
フィルタ #
#音声フィルタを参照。
オーディオの詳細プロパティ #
項目 | 説明 |
---|---|
名称 | |
音量(%) | |
モノラルにダウンミックス | |
バランス | |
同期オフセット | |
音声モニタリング | |
トラック |
統計 #
ここでは何が原因で配信がカクついているのかの原因の特定を行える。
OBSが重い、配信がカクつく、それらは全てここの値に現れる。統計を表示しパフォーマンスをモニターすることが、快適な配信への近道なので、表示 -> ドックで必ず追加しておきましょう(OBS 23.0~)。
レンダリングラグが原因で逃したフレーム #
- シーン切り替え等で一瞬増える程度は問題ない。
- この値が増えていく場合、ソースのレンダリングが間に合ってない。そのPCで行っている処理内容全体に対して、PCのスペックが不足している。
- 原因となっているソースを削除するか、ソースを減らす。
- ゲームなら設定を妥協する。
- OBSを管理者として実行すると改善する場合がある。
エンコードのラグが原因で逃したフレーム #
- 設定->出力->配信を見て、x264ではなくハードウェアエンコーダを選択したり、プリセットを軽量なものに変更する。GPUのドライバやOSが古いと、ハードウェアが対応しているのに選択できない場合がある。
- それでも間に合わない場合はマシンスペックが不足している。全体的にマシンスペック不足している場合と、使用しているエンコーダがCPUやGPUの性能に対して厳しい場合がある。
ドロップフレーム(ネットワーク) #
ネットワークが原因のドロップは、金を積めばいいというものではなく、知識と手間と心労と手間と面倒臭さがピカイチなので、お使いのインターネッツ環境が良いことを願う。
- この値が増えるとき、上り回線の速度にビットレートが収まっていないので、各プラットフォームの推奨値や設定 -> 出力 -> 配信を参照し、環境に見合った値にする。
-
まずYouTubeのせいにしない
-
回線速度計測は下記を使用するとよい。
- サービス情報サイト(NTT東日本) -> フレッツ光 通信速度測定
- サービス情報サイト(NTT西日本) -> 同上
これはインターネットではなく、NGN閉域網の速度計測を行う。フレッツ系の回線でサービス情報サイトへの接続設定がないと使用できない。 - iNoniusスピードテスト
おすすめ - Speedtest
サーバ/地域によっては参考にならない - fast.com -> 詳細を表示
値は不正確だが、fast.comと打つだけなので人に紹介しやすい
-
例えば、上りが安定して50Mbps出るなら、30Mbps(OBSのビットレート設定なら30000kbps)まで使えると推測できる。
- 1桁MbpsやKbpsは厳しい。いやKbpsはインターネッツが厳しいはず
なのでISPに殴りこむべき。 - 2桁Mbpsが安定して出るならおk。50MbpsもあればYouTubeで4K配信が可能。エンコードラグの領域になってくる。
- 3桁Mbps前半出ていれば十分。
- ただし、スピードテスト結果が何Mbpsだろうが正直どうでもよく、単位がmsのRTT(通称レイテンシ, ping)が重要。
- RTTが悪いと理論上どう足掻いてもスループット(速度)は出ず、輻輳(混雑してパケットドロップが発生している状態)しRTTが変動する残念な回線状況の場合は、スピードテスト結果から多めにマージンをとってもネットワークドロップが避けられない。
要するにスピードテストは参考にすらならない場合も多く、その性質上、例え有線より速くてもWi-Fiは配信ではNG。
cf. News & Views コラム:オンラインゲームとインターネットの遅延 – JPNIC Blog
- 1桁MbpsやKbpsは厳しい。いやKbpsはインターネッツが厳しいはず
-
早朝や昼間は速度が出るが、夕方から夜間のゴールデンタイムにかけて著しく遅くなる場合、
- 電力系やCATV、NURO、集合住宅共有インターネットの場合、結局のところ自前のルータでNAPTできない場合が多いので、もし遅いなら乗り換えるしかやれることないかも。
- フレッツ光の通信設備を使うISPを契約している場合、IPv6 IPoEを使うと回線速度が改善する場合が多い。
これはIPv6自体が速いのではなく、フレッツのIPv4 PPPoEの設計上輻輳しやすく、結果的に遅いから。- 回線事業者 - ISP - HGW/ルータ - PCまでIPv6接続環境が整っている場合、タスクマネージャのパフォーマンスタブ -> イーサネットに
IPv6アドレス: 2001:db8:b0ba:10ee...
のようなグローバルIPv6アドレスが表示される。
ローカルIPv4アドレスと違い、グローバルIPv6アドレスは絶対に配信で映してはいけない。それを求めてくる視聴者や友人が居るなら縁を切ること。
ローカルIPv4アドレスも、よく分からなければ見せないほうが良い。 - リンクローカルアドレス
fe80...
の場合は、IPv6インターネット環境がない。 - フレッツ光のIPv6 IPoEを使用したv6プラスやtransix(IPv4 over IPv6トンネルでIPv4も一緒に速くする凄いやつ)が使えるかはISP次第なので、ISPの契約を確認する。
- 現在契約中のプランが対応していない場合、対応したプランに変更して、工事してもらう。
- ISPが対応していないなら、解約して別のISPと契約する。
- ISPとの契約上IPv6 IPoEが既に可能なら、
- ONUと自前ルータの構成の場合、ルータの設定でIPv6 IPoEの項目がないか探して、あれば設定する。PPPoEのように認証設定は不要。
なければ、ISPまたはフレッツに問い合わせてHGWをレンタルするか、対応したルータを購入する。コンシューマ向けならAtermかBuffalo辺りだろうか。因みにHGWはNECなどが製造している。
HGW一覧: Product Finder Results | Wi-Fi Alliance
Wi-Fi APではなくルータとして購入する場合、日本のフレッツのIPv6 IPoEやRDNSSオプションに対応したものを選ぶとよい。
国内メーカ初!【IPv6 RA RDNSSオプション通知】に対応:IPv6通信ならAtermで決まり!ネット高速化 虎の巻 | ルータ活用コンテンツ | AtermStation - ONUとHGWまたは一体型HGWの場合は、ひかり電話ありの可能性が高い。
- HGWにフレッツ・ジョイントによってIPv4 over IPv6 IPoE機能が降ってきていないか確認する。
- HGWにも新旧や当たり外れがあるので、交換工事をNTTに依頼することもできる。
- IPv6 IPoEやIPv4 over IPv6 IPoEトンネルには以前にも増して処理能力やセキュリティ面が要求される。HGWやルータが対応していても処理能力が不足したり、利用可能ポートが少ないことで安定しない場合もある。
ルータへの費用対効果は甘く見られがちだが、周辺機器というよりは、1台のPCと同じ扱いで予算を組むべき。家の鍵であり、インフラだから。
家族またはサーバ公開によって同時接続台数が多いなど、HGWやコンシューマ向けWi-FiルータのNAPT性能では足りない場合、高性能なルータとしてYAMAHA RTXやUNIVERGE IXを導入する手もある。HGWでポート開放するには、IPv4 over IPv6トンネル機能とトレードオフなので、そういった場合にも効果的だ。
ただし、ひかり電話を使っているなら、ここで言うルータは安易に買うべきでない。収容方法を考慮する必要がある。
コンシューマ向けWi-Fiルータを適当に買ってきても、Wi-Fi APとしてしか使えないので注意。
cf. フレッツ光 ひかり電話を使いながら、IPoEのIPv6を自前ルータで直収する方法 - notokenの覚書
- ONUと自前ルータの構成の場合、ルータの設定でIPv6 IPoEの項目がないか探して、あれば設定する。PPPoEのように認証設定は不要。
- 集合住宅で電話線を使ったVDSL配線方式なら、理論上100Mbpsを超えることはなく、RTTも大きい。メタルは落雷にも弱い。
- 保守コストからNTTには光配線方式に変えるインセンティブがあるので、提供エリアを調べる。確認が必要と言われたら、ISPやフレッツに電話で詳しく問い合わせる。今時FTTHになってないところはダメかも。
賃貸を選ぶ場合は、予めフレッツのサイトで下見しておくとよい。
cf. https://flets.com/
私に質問するときは速度は伏せてRTTだけ教えてほしい。辛くなるので。 - VDSL終端装置の交換で回線速度が改善する場合がある。焦げていたり型番が古かったら問い合わせて交換して貰おう。私は上下最大70/30が95/100Mbpsになったので、似たような状況の方は試す価値あり。
- 問い合わせ先はフレッツとの直接契約ならフレッツに、コラボ光ならISP。後者でも最終的にはNTTに引き継がれるが、交渉事はISPにインセンティブがなく対応が悪い場合があるので、言葉巧みに親切なサポートを引っ張り出すか、コラボ光をやめる。
インターネッツにはコラボ光を勧めるアフィ記事が乱立しているが、要するにそういうこと。値段はサポート対応の良し悪しに直結する。コンシューマ向けのベストエフォート回線な時点で既に安い。
- 保守コストからNTTには光配線方式に変えるインセンティブがあるので、提供エリアを調べる。確認が必要と言われたら、ISPやフレッツに電話で詳しく問い合わせる。今時FTTHになってないところはダメかも。
- 回線事業者 - ISP - HGW/ルータ - PCまでIPv6接続環境が整っている場合、タスクマネージャのパフォーマンスタブ -> イーサネットに
-
しばしばLANケーブルが現在契約中の回線品質を下回っている環境がある。
- 断線疑惑があるのはダメ。また、Cat5, 5eモドキで、4つしか結線されていないものは100Mbpsリンクなので
新聞を縛るのに使って捨てよう。 - Cat5e-Cat6Aの、できればきしめんではないUTPケーブルを購入しよう。
- 家電量販店が
情jy逸般向けに販売しているCat7~を謳うケーブルがあるが、Cat7以上はRJ45(8P8C, LANケーブルの端子)と互換性がなく、STPは一般家庭でも逸般家庭でも施工が難しい機能用接地(家にあるアースとは目的が異なる)が義務付けられている(ANSI/TIA/EIA-568-B.1-2)。
正しい施工がない状態で使えば、お金をドブに捨てるだけでなく、速度の悪化や機器の不具合に繋がるので私はお勧めしない。
RJ45プラグ付の「Cat.7」と表記された製品について
Q3
RJ45プラグ付の「Cat.7」と表記されたパッチコードが販売されておりますが、これについて教えてください。
これは、Cat.7の性能はあるのでしょうか。A3
RJ45プラグではCat.7性能を満足することはできません。よって、これは不適切な表現であり「誤表記」と考えられます。
Cat.7性能を満足するプラグは、一般的にTERA、GG45、ARJ45コネクタであり、よって、「Cat.7」と表記されたRJ45プラグ付コードは、Cat.7の性能を満足しておりません。cf. TSUKO 通信興業株式会社 配線規格概要 ANSI/TIA/EIA-568-B.*-* 商用ビル通信配線規格 Addendum(追補) (NL20号 LAN関連規格より)
cf. TSUKO 通信興業株式会社 配線工事関連 LANケーブルのノイズ対策のために接地について教えてください(NL22号 Q&Aより)
cf. TSUKO 通信興業株式会社 LANケーブリング入門 ケーブリングの規格と要求されている電気特性- そもそもLANケーブルはツイストペア構造により、通信品質は十分に保たれている。
- LANケーブルへ、あるいはLANケーブルからのノイズを気にするなら、ノイズ源との距離を離せば大きく軽減される。~~最大のノイズ源である照明を外し、スマートフォンを窓から投げ捨ててから、~~XLRやデジタル伝送、誤家庭内ファイバー化を考えよう。
- JEITAとは少々矛盾する日本製線による見解もある。RJ45で10GbEという規格的に無理をした需要がある中で、STPは巷で言われているほど無用の長物ではなく、機能用設置がなくとも効果があるらしい。UTPが混在すると意味がないことから、一般家庭で効果的に導入するには住宅自体の配線からネットワーク機器まで見直す必要があり、家電量販店で品質の怪しいCat7モドキを買ってきてポン付けで解決!とはならないようだ。
結局、STPはダメなの? UTPでいいの? LANケーブルの専門家に聞く【イニシャルB】 - INTERNET Watch
#Mac Cat6Aケーブルを使用した10GBASE-T伝送検証【日本製線株式会社 公式】 - YouTube
- 断線疑惑があるのはダメ。また、Cat5, 5eモドキで、4つしか結線されていないものは100Mbpsリンクなので
-
- ネットワーク設定の最適化も有効な場合もある。
- 映像品質をできるだけ落とさずビットレートを下げるとき、ソース解像度の変更は負荷と品質の観点から推奨できない。
ゲームの描画とエンコードの品質を上げ、フレームレートを60から30fpsに落とす方が効率が良い。
シーントランジション #
シーン切り替え時に様々なトランジションを適用できる。
コントロール #
項目 | 説明 |
---|---|
配信開始 | |
録画開始 | |
スタジオモード | |
リプレイバッファ開始 | |
Virtual Camera | |
設定 | |
終了 |
設定 #
ファイル -> 設定
一般 #
項目 | 値 | 説明 | |
---|---|---|---|
一般 | 言語 | 日本語 | |
出力 | 配信を開始するときに確認ダイアログを表示する | 有効 | |
配信を停止するときに確認ダイアログを表示する | 有効 | ||
録画を停止するときに確認ダイアログを表示する | 有効 | ||
配信時に自動的に録画 | 任意 |
|
|
配信時に自動的にリプレイバッファを開始 | 任意 |
|
|
プロジェクター | 終了時にプロジェクターを保存する | 有効 | |
スタジオモード | ダブルクリックしたときにシーンに遷移 | 有効 | |
縦長/垂直レイアウトを有効にする | 任意 | ||
プレビュー/番組ラベルを表示する | 無効 |
配信 #
配信プラットフォームを選択する。
項目 | 値 | 説明 |
---|---|---|
サービス | YouTube - RTMPS |
RTMPS を使用して配信を暗号化する - YouTube ヘルプ |
YouTube - HLS |
|
|
カスタム |
rtmp://a.rtmp.youtube.com/live2 rtmps://a.rtmps.youtube.com/live2 RTMPS を使用して配信を暗号化する - YouTube ヘルプ |
|
サーバー | 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 | |
ビットレート |
8000-12000 Kbps 12000-18000 Kbps 24000-34000 Kbps 7000 Kbps |
|
最大ビットレート | ビットレート+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対応リスト
Video Encode and Decode GPU Support Matrix [NEW] | NVIDIA Developer
OBS 23.0からNVIDIAと共同で開発された最適化されたNVEncが利用できます。
Turing以降だけでなく、Pascal以前にも有効とのことなので、既存ユーザは今すぐアップデートしましょう。
OBS公式TwitterやNVIDIAによると、配信専用に別GPUを使用してもメリットが無いため推奨されないとのこと。
遊びたいゲームがある程度余裕を持ってプレイできるスペックを選ぶと良いでしょう。
NVEncが選べない #
廉価GPU・古い世代の場合、使えない・一部機能が制限されている可能性があるため、
以下のNVIDIA公式ドキュメントの対応表を確認する。
Video Encode and Decode GPU Support Matrix [NEW] | NVIDIA Developer
-
古い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~ということがわかる。
Windows 8や10の古いバージョンを使っていて、要件を満たしておらず選べない場合もある。
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の推奨値。あくまでもアップロード用の最終出力の推奨値であり、編集前のソースとして使う場合はこの値は推奨されない。
アップロードする動画におすすめのエンコード設定 - YouTube ヘルプ
項目 | 値 | 説明 | |
---|---|---|---|
種別 | カスタム出力 (FFmpeg) | ||
FFmpegの出力の種類 ファイルパスまたはURL |
ファイルに出力 | フォルダを参照又は直接ディレクトリのパスを記述。基本的に録画機能。 | |
URLに出力 | |||
スペースなしのファイル名を生成 | 有効 | ||
コンテナフォーマット | mpegts mkv(matroska) 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 |
|||
映像ビットレート | 0 Kbps | ||
キーフレーム間隔(フレーム) | 15-60 | ||
出力をリスケールする | 無効 | ||
映像エンコーダ 映像エンコーダ設定(ある場合) |
hevc_nvenc h264_nvenc h264_qsv utvideo dnxhd x264 |
||
すべてのコーデックを表示(潜在的に互換性がない場合でも) | 有効 | ||
音声ビットレート | 320 | ||
音声トラック | オーディオの詳細プロパティに対応したトラックを有効にする。#出力の音声に関する項を参照。 | ||
音声エンコーダ | aac |
| |
libfdk_aac |
|
||
flac |
|
||
pcm_s16le pcm_s24le pcm_s32le |
|
||
音声エンコーダ設定(ある場合) | aac_coder=twoloop |
音声エンコーダにFFmpeg標準のAACエンコーダを使用する場合。 |
映画&ビデオはデフォルトではMPEG-2 TSに非対応のため、Microsoft Storeから拡張機能をインストールする必要があります。
mp4にflacのような、規格外のフォーマットを扱う場合、MPC-BEをオススメします。
hevc_nvenc #
この設定を使用して録画すれば、ShadowPlayの1/10のファイルサイズで同等以上の品質を得られるでしょう。
項目 | 値 | 説明 |
---|---|---|
映像ビットレート | 0 Kbps | 0 Kbps にして無視してもらう。 |
映像エンコーダ | hevc_nvenc |
|
映像エンコーダ設定(ある場合) | preset=medium profile=main rc=constqp init_qpI=21 init_qpP=21 init_qpB=23 bf=0 |
preset はp4(medium, slow)か、負荷が大きい場合はp3(≒llhq, ll)が品質と負荷とサイズのバランスが良い。profile はmain(8bit)。highはなく、10bitのmain10はOBSが非対応なので指定する意味がない。rc レート制御には録画に適したCQPを使う。NVIDIAも推奨している。cq Constant Qualityの値を大きくするとファイルサイズが小さくなる代わりに品質が落ちる。bf Bフレームは世代毎にサポートされている値を使うか、編集に差し支える場合はbf=0 に設定する。 |
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(7th Gen NVEnc)では間に合わなかった。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から拡張機能をインストールする必要がある。
無料、ハードウェアデコード版(これで十分)
有料、ソフトウェアデコードにも対応版
h264_nvenc #
項目 | 値 | 説明 |
---|---|---|
映像ビットレート | 0 Kbps | #録画 |
映像エンコーダ | h264_nvenc |
|
映像エンコーダ設定(ある場合) | preset=medium profile=high rc=vbr cq=23 bf=0 |
preset はp4(medium, slow)か、負荷が大きい場合はp3(≒llhq, ll)が品質と負荷とサイズのバランスが良い。profile はhigh(8bit)。rc レート制御は録画に適し、結果の優れているVBR CQを使う。cq Constant Qualityの値を大きくするとファイルサイズが小さくなる代わりに品質が落ちる。bf Bフレームは世代毎にサポートされている値を使うか、編集に差し支える場合はbf=0 に設定する。 |
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 #
項目 | 値 | 説明 |
---|---|---|
映像ビットレート | 0 Kbps | #録画 |
映像エンコーダ | h264_qsv |
|
映像エンコーダ設定(ある場合) | preset=veryslow look_ahead=1 look_ahead_depth=30 look_ahead_downsampling=2x profile=high global_quality=25 g=60 bf=0 |
編集ソースとして適し、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 |
かなり重たい。 |
負荷ゼロで配信と同時に録画する #
YouTubeやTwitch等の配信プラットフォーム側のアーカイブ機能に任せず、配信と同時に手元に録画したい人向け。
とは言え、配信と録画双方でエンコードが走って負荷が増えたら元も子もないので、同時に録画しても全く負荷が増えない設定を紹介する。
項目 | 値 | 説明 |
---|---|---|
種別 | 標準 |
|
録画フォーマット | mkv |
|
音声トラック | 音声ミキサーと設定 -> 音声に登録されている分チェックする |
|
エンコーダ | (ストリームエンコーダを使用) |
|
負荷を掛けずに同時配信する方法 #
現在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=medium rc=vbr_hq maxrate=7M bf=2 rc-lookahead=1 |
音声ビットレート | 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の処理も止まります。
HLSを使ってHEVCでYouTubeに配信する #
Delivering Live YouTube Content via HLS | YouTube Live Streaming API
YouTube で HDR 動画を配信する - YouTube ヘルプ
@Dennis S. Fun fact: you can use ffmpeg (including OBS' ffmpeg output) to ingest HEVC over HLS to YouTube. / Twitter
OBS StudioがHDRや10bitに対応したら詳しく触れたいが、今までの非効率なH.264 RTMPがHEVC HLSになるだけでも、マシンスペックさえあれば同じ帯域で圧倒的な品質が得られるので、是非使いたいところ。
低遅延のストリームキーは使用できるが、HLSの性質上低遅延向きではないので悪しからず。
設定 -> 出力 -> 録画を参考にエンコード設定
項目 | 値 | 説明 |
---|---|---|
種別 | カスタム出力 (FFmpeg) | |
FFmpegの出力の種類 | URLに出力 | |
ファイルパスまたはURL | https://a.upload.youtube.com/http_upload_hls?cid=STREAMKEY©=0&file=playlist.m3u8 |
STREAMKEY はYouTubeのストリームキーに置き換える。 |
コンテナフォーマット | hls |
|
マルチプレクサーの設定(ある場合) | hls_time=6 hls_segment_filename=https://a.upload.youtube.com/http_upload_hls?cid=STREAMKEY©=0&file=fileSequence%d.ts color_range=tv color_primaries=bt709 color_trc=bt709 colorspace=bt709 |
hls_time=4 までと書いてあるが、6や8にした方が安定する。STREAMKEY はYouTubeのストリームキーに置き換える。 |
映像ビットレート | 12000 Kbps (1440p30) | |
キーフレーム間隔(フレーム) | 60 |
hls_time=2 でも、キーフレーム間隔が大き過ぎる場合その限りではない。 |
すべてのコーデックを表示(潜在的に互換性がない場合でも) | 有効 | |
映像エンコーダ | hevc_nvenc |
|
映像エンコーダ設定(ある場合) | preset=p3 profile=main rc=vbr bf=3 maxrate=15M |
preset=p3 が使えない(メニューバー -> ヘルプ -> ログファイル -> 現在のログを表示)場合はOBSをビルドするかpreset=llhq rc=vbr_hq を使用する。 |
音声ビットレート | 320 | 設定 -> 出力 -> 録画 |
音声トラック | 1 | |
音声エンコーダ | aac | |
音声エンコーダ設定(ある場合) | aac_coder=twoloop |
音声 #
項目 | 値 | 説明 | |
---|---|---|---|
トラック1 | 音声ビットレート | 128 | |
320 | |||
名称 | 任意 | ||
トラック2 |
iTunesが入っている環境では配信の音質が向上する #
AppleのAACエンコーダは他のAACエンコーダに比べてエンコード結果が高品質だと評価されているが、プロプラエタリなソフトウェアな為、OBSに同梱して配布できない。
AAC encoders - Hydrogenaudio Knowledgebase
しかし、実はiTunesがインストールされたWindows上のOBSでは、以下のようなログが表示される。
[CoreAudio encoder]: Adding CoreAudio AAC encoder
CoreAudioとはまさに、あの天下のApple様が先端技術の粋を集めて開発した世界最強AACエンコーダを含む音声系フレームワークである。
WindowsにiTunesがインストールされていれば、AppleのありがたいAACエンコーダを使わせて頂けるという訳だ。
言わずもがなMacOSはデフォルトで対応している。
設定 -> 出力 -> 音声で音声ビットレートにマウスオーバーすると確認できる。
- iTunesが入っていない環境: FFmpeg 既定のAACエンコーダ
- iTunesが入っている環境: CoreAudio AACエンコーダ
iTunesを入れる必要がない環境でもAppleのAACエンコーダを使うために、旧バージョンのiTunesのインストーラからAppleApplicationSupportのインストーラだけを取り出してインストールする方法もある。
OBS-Studio: Enable CoreAudio AAC encoder (Windows) | OBS Forums
Troubleshooting issues with iTunes for Wi… - Apple Community
- Appleのコミュニティフォーラムから旧バージョンの
iTunes 12.9.1.4 for Windows (64-bit)
インストーラをダウンロード
https://itunes.apple.com の previous versions of iTunes でもよい iTunes64Setup.exe
は実行しない- 7-Zip等を利用して
iTunes64Setup.exe
を展開しAppleApplicationSupport64.msi
を取り出す。
7z x iTunes64Setup.exe
AppleApplicationSupport64.msi
を実行してApple AACエンコーダをインストール
OBSはiTunesを入れると音質が劇的に向上する - 科学無謬論 - Medium
根津ちずも🧀さんはTwitterを使っています 「OBSの音質わるいっぽい問題、どうやら元から導入されてるFFmpeg AACエンコーダが原因っぽくて... / Twitter
リプレイバッファ #
リプレイバッファを実行しながらゲームをプレイしておけば、名場面の後に保存を押すことで、ストレージ容量を気にせず動画を残せる。
バックグラウンドでエンコードが常に実行され、保存する秒数分システムメモリ上に直近の動画が置かれる仕組みなので、あくまでも名場面だけをストレージに残す目的で、負荷軽減の機能ではない。
ShadowPlay インスタントリプレイ | OBS Studio リプレイバッファ | |
---|---|---|
負荷 | 小さい | 小さくも大きくもできる |
ファイルサイズあたりの品質 | あまりよくない | よくできる |
リプレイのキャッシュ先 | ストレージ(SSD, HDD) -> 高耐久なSSDが必要。CrystalDiskInfoで寿命を確認した方がよい。 |
システムメモリ(RAM) -> システムメモリに空きが必要というほど使わない |
遡れる時間 | 20分 | システムメモリ次第(基本的に劣る) |
HDR | 対応 | 未対応 |
配信中にリプレイを流す #
- 負荷ゼロで配信と同時に録画するの設定を行った上で、配信中にリプレイバッファを動かしても負荷は増えない。
- 録画やリプレイの保存ファイル名は、日付を含めず固定でき、上書き可能。
設定 -> 詳細設定 -> 録画- ファイル名書式設定:
Replay
等の半角英数 - ファイルが存在する場合は上書き: 有効
- 自動的にmp4に再多重化: (配信は1トラック目に音声が入っていると想定して)無効
- リプレイバッファのファイル名の接頭辞: (空欄)
- ファイル名書式設定:
- メディアソースでは動画を再生できる。
これらを駆使すれば、負荷を増やさず配信を遡ってリプレイを配信に載せられる。
リプレイ専用のシーンをつくると尚よい。
音声 #
設定 -> 音声
項目 | 値 | 説明 |
---|---|---|
サンプリングレート | 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(UHD 4K) 2560x1440(WQHD) 1920x1080(FHD) 1280x720(HD) |
|
出力(スケーリング)解像度 |
|
|
縮小フィルタ | バイリニア 面積(エリア) バイキュービック ランチョス |
|
FPS共通値 | 30 60 |
|
FPS分数値 | 30fps: 30/1 60fps: 60/1 |
|
936p60の罠 #
Twitchというゲーマー向け配信プラットフォームでは、上限8500kbpsという少ないビットレートの制約のなかで、FHD(1920x1080)ではなく1664x936という謎規格の解像度が一部で絶大な支持を受けているようだ。
1664x936は一見中途半端だが、縦横共に8で割り切れる値という意味があるようで、これは恐らくH.264のブロックサイズのことを言いたいのだと思うが、これは8x8だけではないし、FHD(1920x1080)やHD(1280x720)も同じ条件だから考えなくてよい。
HEVCやAV1ではより細かなマクロブロックを柔軟に組み合わせられるようになり、負荷が上がるもののビットレートあたり品質が向上しているので、今後考えなくてよくなるだろう。
そもそもの目的に目を向けると、確かに8.5Mbpsは物足りないがTuring NVEnc H.264 VBRにおけるビットレートと品質の関係のグラフを見れば、近年の高品質なハードウェアエンコーダであれば十分な品質を出せることがわかる。
1664x936で配信する場合、キャンバス解像度及びゲーム解像度を1664x936に合わせないと、かえってスケーリングで大きく品質が悪化する。もしかすると、スケーリングによってディテールを失った分も含めて、少ないビットレートでも破綻しづらいだけかもしれない。
近年のスマートフォンは、OLEDのペンタイル配列によってドットバイドットのドの字もないから気にしなくてよいが、それでも不必要なスケーリングによって失われるディテールや色は、お手元にあるiPhoneのような高品質な端末ではかなり目立つはずだ。
また、多くのPC環境で1664x936を1920x1080に再度引き延ばして視聴することになるので、これも滲んで宜しくない。
オススメは設定を煮詰めて1920x1080で配信すること。次点で1280x720。
画面解像度 - Wikipedia
Twitch Streamers - Broadcasting Guidelines
Guide to Broadcast Health and Using Twitch Inspector
ホットキー #
ミュート、ミュート解除にDiscordのミュートのキーを割り当てておくと便利だよ!
録画開始・終了に割り当てるのは良いが、配信は誤爆防止の為にここで設定するようなキーの組み合わせを使う一般的なキーボードやマクロには割り当てるべきではない(Elgato Stream Deckの場合は仕組みが違うので例外)。
詳細設定 #
項目 | 値 | 説明 | |
---|---|---|---|
一般 | プロセスの優先度 | 通常 | |
映像 | カラーフォーマット | NV12 | |
YUV色空間 | 709 | ||
YUV色範囲 | 一部 | ||
音声 | 音声モニタリングデバイス | 既定 | |
録画 | ファイル名書式設定 | %CCYY-%MM-%DD_%hh-%mm-%ss | 2020-02-20_20-02-22.ts にようになる。 |
ネットワーク | IP選択 Bind to IP |
既定 |
既定 からIPv6アドレスが付与されたネットワークインターフェースに変更する。2001:db8:b0ba:10ee... のようなグローバルIPv6アドレスや一時IPv6アドレスを選ぶ。リンクローカルアドレスfe80... ではない。
ただし、長時間のネットワーク切断やPCのNICの初期化、または通信事業者側の工事などで予告なく変更される場合がある。 配信開始時に 無効な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 |
OBSが使用するスレッド数を制限する #
Ryzen 9やThreadripper等のメニーコア環境で、論理コアを半分ずつOBSとゲームに割り当てたり、プロセスがCCXを跨がないようにする設定。
既に起動しているプロセスにしか効果がないので注意。
- タスクマネージャー
taskmgr.exe
の詳細タブでobs64.exe
や任意のゲームプロセスで右クリック -> 関係の設定から変更する方法
- Windows PowerShell
powershell.exe
でプロセスに対しProcessorAffinityを設定する方法
# obsのプロセスを見つける
Get-Process | Where-Object {$_.ProcessName -match "obs"}
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
4354 84 1150624 474372 6,940.42 4240 1 obs64
350 21 7856 24216 0.13 1552 1 obs-browser-page
524 27 50596 45448 0.36 19420 1 obs-browser-page
301 28 28496 50948 14.67 21232 1 obs-browser-page
# obs64プロセスの詳細を見る
Get-Process obs64
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
4354 87 1212196 473740 6,994.94 4240 1 obs64
# obs64プロセスのProcessorAffinityを設定する
# 2進数000011111111はCPUの論理コアを表す この例では8/12スレッドをOBSに割り当てている
(Get-Process obs64).ProcessorAffinity = [Convert]::ToInt32(000011111111,2)
cf. Process.ProcessorAffinity プロパティ (System.Diagnostics) | Microsoft Docs
因みに、エクスプローラexplorer.exe
のProcessorAffinityを変更すると、その後に起動したプロセスはそれに従って同じProcessorAffinityになる。
タスクスケジューラtaskschd.msc
でシステム起動時に指定するなど、色々応用できると思う。
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では動作するようになる。
いち早く新機能にアクセスしたい場合や、FFmpegカスタム出力でfdk-aacを使用して高音質に録画したい場合、拡張機能を盛り込んでビルドする時にも有効だ。
下記はOBS公式Wikiの手順を参考にしつつ、コピペできるようCLIでWindows用バイナリをビルドする手順になっている。
WSLやGit、MSBuildの環境構築手順は他に情報が山ほどあるので割愛する。
Install Instructions · obsproject/obs-studio Wiki
Wiki - Install Instructions | OBS
-
必要な依存関係をダウンロード・インストールする
- Development packages of FFmpeg, x264, cURL, and mbedTLS. Pre-built Windows dependencies for VS2019
依存関係はよく更新されるので、リビルド時は更新が必要かも - Chromium Embeded Framework (CEF) branch 3770 Windows 64bit(ブラウザソース)
https://cef-builds.spotifycdn.com/index.html#windows64 で"CEF source"のリンクがhttps://bitbucket.org/chromiumembedded/cef/get/3770.tar.bz2
になっている最も新しいバージョンをデベロッパーツール等を用いて探す。
2020年12月現在の最新は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
cf. https://cdn-fastly.obsproject.com/downloads/cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal.zip - Download Qt Open Source からQt Online Installerをダウンロードしてインストール。
Qtアカウントを持っていない場合は https://login.qt.io/register で作成する。インストーラの実行にはVerificationも必要。
Custom installationを選択し、Select ComponentsでInstall Instructions · obsproject/obs-studio Wikiに記載されたQtバージョンのMSVC 2019 64-bit
のみ選択すればよい(2GB未満)。 - CMake
インストーラ版推奨、Zip版の場合は環境変数Pathを通しておくとよい。 - Visual Studio 2019 Community
WindowsにプリインストールされているC:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
で十分かもしれない。
MSBuildは環境変数Pathを通しておくとよい。
- Development packages of FFmpeg, x264, cURL, and mbedTLS. Pre-built Windows dependencies for VS2019
-
リポジトリのダウンロード
WSLのgit環境等を利用してリポジトリをクローンする。
GitHubのWebページのDownload Zipではsubmodulesが足りないので下記手順が必須。
git clone --recursive https://github.com/obsproject/obs-studio.git
# タグ指定
git clone --recursive https://github.com/obsproject/obs-studio.git -b 27.0.0-rc6 --depth=1
2回目以降、OBSのリポジトリを更新するとき
git pull --recurse-submodules
- CMakeでCEFをビルド
cmake-gui.exeは操作が分かりづらいので、CLIなcmake.exeを使うとよい。-S
には1.でダウンロード・展開したCEFのルートディレクトリを指定-B
にはcmakeの出力先を指定- ディレクトリの場所がダメって怒られたら
build\CMakeCache.txt
を消す。エラーメッセージを読もう(自戒を込めて)。
cmake.exe -S "C:\repos\cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal" -B "C:\repos\cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal\build"
cmake.exe --build "C:\repos\cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal\build"
- MSBuildで
build\cef.sln
をビルド
Windows 10 SDKのバージョンWindowsTargetPlatformVersion
はWindows10のバージョンによって異なるので、必要に応じて対応したバージョンに書き換えるか、Visual Studio Installerの拡張機能の管理で追加する。
必要なのは${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.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal\build\libcef_dll_wrapper\libcef_dll_wrapper.vcxproj"
ビルドに成功しました。
と出ていれば警告を吐いていても問題ない。
- CMakeでOBSをビルド
-S
には2.でcloneしたリポジトリのルートディレクトリを指定-B
にはcmakeの出力先を指定-DDepsPath
には1.でダウンロード・展開したdependencies2019\win64
ディレクトリを指定-DQTDIR
には1.でQtをインストールした先C:\Qt\5.15.2\msvc2019_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を指定しないとビルドできない既知の不具合がある。
Tags · obsproject/obs-studioで選んだバージョンを-DOBS_VERSION_OVERRIDE="27.0.0-rc2"
のように指定するか、WSLのcmakeを途中まで走らせて取得したバージョンを-DOBS_VERSION_OVERRIDE="26.0.0-gb2d42c06"
のように指定すればビルドできる。
cmake.exe -S "C:\repos\obs-studio" -B "C:\repos\obs-studio\build" -DDepsPath="C:\repos\dependencies2019\win64" -DQTDIR="C:\Qt\5.15.2\msvc2019_64" -DFFmpegPath="C:\repos\media-autobuild_suite\local64\include" -DCEF_ROOT_DIR="C:\repos\cef_binary_75.1.16+g16a67c4+chromium-75.0.3770.100_windows64_minimal" -DBUILD_BROWSER=yes -DOBS_VERSION_OVERRIDE="27.0.1"
-- 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
をビルド
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
をこの場所にコピーする