【OBS】画像認識してシーンを自動切り替えするプラグイン|配信者向け・DBD特化[Advanced Scene Switcher]

星詠れい
星詠れい

おはこんばんにちわ🎵

今回はOBSのプラグインを使った、自動でシーンを切り替えるというものを紹介したいと思います。
これはOBSの標準機能である自動シーンスイッチャーと似ている機能だと思われがちですが、全然異なる機能になります。
このプラグインでできることがかなり広く設定するのにも難易度は高いですが、うまく使えれば自動でやってくれるというものになりますので、使ってみたくなったら使ってみてほしいと思います。

よかったら参考にしてみて下さい。

目次

OBS

OBSでの全体的な設定のやり方についてはこちらの記事に記載されています。
ここでは画像認識を使った自動でシーンを切り替えるというものを紹介します。

使うプラグイン【Advanced Scene Switcher】

OBSのプラグインの一つで初期では搭載していないものなのでダウンロードが必要になってきます。
また、記述がすべて英語なので理解するのにも時間がかかってしまいましたが、ここではできるだけ日本語ですべて説明できるように書いてみています。よかったら参考にしてくれるとうれしいです。

また、最後に星詠れい自身がDBDをメインにプレイしていることもあり、DBDのシーン自動切り替えの例も記事の最後に載せています。
もちろん参考にして頂いても大丈夫ですし、ここから独自にアレンジして頂いても大丈夫です。
その場合、このブログのことも紹介して頂けたらありがたいです。
皆様の配信のお役に立てますように。

【Advanced Scene Switcher】について

Advanced Scene SwitcherはWarmUpTill氏が開発したプラグインとなります。
投稿時バージョンは1.23.1となります。
以下のGitHubからダウンロードができます。
Win11やWin10であれば、
「advanced-scene-switcher-windows-x64-installer.exe」
「advanced-scene-switcher-windows-x64.zip」
のいずれかをダウンロードしていきましょう。

こちらではプラグインの導入のやり方が書かれています。
installerの場合とzipの場合で異なるので、こちらの説明を見て行くといいと思います。

また、このプラグインは2019用 Visual C++ 再頒布可能パッケージのインストールが必須となっています。
下のサイトからWin11やWin10であればx64のものをダウンロードしていきましょう。
「Visual Studio 2015、2017、2019、および 2022」のところになります。

こちらのページでは、OBSのForumになります。
Wikiについてもここから飛んでいきますので、英語だけになってしまいますが内容を詳しく知りたいのであれば行ってみることをおすすめします。

【Advanced Scene Switcher】 の機能説明

General

英語日本語訳
Check conditions every毎回の条件チェック
Advanced Scene Switcher is:
・Active
・Stop
アドバンスト・シーン・スイッチャーは :
・実行中
・中止
On startup of OBS:
・Start the scene switcher if it was running
・Always start the scene switcher
・Do not start the scene switcher
OBSを起動した時:
・前回シーンスイッチャーが実行中だったとき、開始する
・常にシーンスイッチャーを開始する
・シーンスイッチャーを開始しない
Automatically start the scene switcher when:
・Never
・Recording
・Streaming
・Recording or Streaming
次の場合にシーンスイッチャーを自動的に有効にする:
・有効にしない
・録画開始時
・配信開始時
・録画または配信を開始時
Hotkeys can be defined in the OBS settingsホットキーはOBSの設定で定義できます。
General behavior一般的な動作
Enable verbose logging詳細ログを有効にする
Save window position and sizeウィンドウの位置とサイズを保存
Show system tray notificationsシステムトレイ通知を表示
Disable UI hintsUIヒントを無効にする
Display warning if plugins cannot be loadedプラグインをロードできない場合の警告表示
Hide tabs which can be represented via macrosマクロで表現できるタブを隠す
After performing actions skip performing actions for 0.00 secondsアクション実行後、0.00秒間アクションをスキップする
if no actions are performed for 0.00 seconds Don’t switch scene0.00秒間アクションが実行されなかった場合、シーンを切り替えない
When changing transitions:Set transition oberridesトランジション変更時:トランジションオーバーライドの設定
When changing transitions:Change active transition typeトランジション変更時:アクティブなトランジションタイプを変更する
Switching methods priority (Highest priority is at the top)切り替え方法の優先順位(優先順位が高いものが上)
Use thread priority Normalスレッドの優先順位を使う 通常
Raising the priority above “Normal” is not recommended優先順位を “Normal “以上にすることは推奨されない

Macro

Advanced Scene Switcher 1.23.1 の見た目は以下のようになっています。

Advance Scene Switcher 1.23.1 Macro画面

①マクロリスト

②イベントセクション
 (condition types)

③アクションセクション
 (action types)

イベントセクション

イベントセクションでは、
条件を設定するためのセクションになります。

できる設定例
セクション名どういう条件が設定できるか
Date and time指定の日時になったとき…
Audio音量が指定したデシベルを上回ったとき…
音量が指定したデシベルを下回ったとき…
Idle特定時間内にキーボードとマウスの操作がなかったとき…
Scene指定したシーンを開いているとき…
Source指定したソースを開いているとき…
Video指定した画像に一致したとき…

などという条件を組むことができます。

英語日本語訳
Run macro in parallel to other macros他のマクロと並行してマクロを実行する
Perform actions only on condition change条件変更時にのみアクションを実行する

マクロの期間修飾子(Duration Modifier)

一定の時間変化が観察された場合にのみ条件をトリガーしたい場合は、ビデオ条件に期間修飾子を追加できます。

英語日本語訳
No duration modifier持続時間の修正なし
For at least少なくとも|短くて〇〇秒
For exactly正確に|ちょうど〇〇秒
For at most多くとも|長くて〇〇秒
Within the last過去〇〇以内|直近〇〇秒以内

For at least

イベントセクションの条件を満たした時から〇〇秒経過したら、アクションセクションを実行する。
満たし続ける限りずっとアクションセクションを実行する。

英訳:「少なくとも X 時間の間」は、少なくとも X 時間の間 true であった場合にのみ true を返す条件になります。

For exactly

イベントセクションの条件を満たした時から丁度〇〇秒経過した時のみ、アクションセクションを実行する。
〇〇秒経過したのち、再びやり直す。

英訳:「正確に X 時間の間」と指定すると、基になる条件が (時間制約を無視して) 指定された時間にわたって true になった時点でのみ true を返す条件になります。

For at most

イベントセクションの条件を満たした時から〇〇秒経過するまでの間、アクションセッションを実行する。
その後はずっと満たさない状態となる。

英訳:「最大 X 時間の間」を指定すると、最大 X 時間の間のみ true が返され、その後は false が返されます。基礎となる条件 (期間修飾子を無視する) が false を返す場合、期間修飾子はリセットされます。

Within the last

イベントセクションを満たさなくても、最後の〇〇秒の間はアクションセッションを実行する。
その後は満たさない状態となる。

英訳:「最後の X 時間以内」では、基礎となる条件が false であっても、X 時間の間 true を返す条件になります。

アクションセクション

イベントセクションで条件に合致した時にアクションされる内容を設定します。
もしくは、「イベントセッションで条件に合致してTrueを返された時にアクションセッションの設定したものが起動する」と考えていいと思います。

できる設定例
英語日本語訳
Switch scene設定したシーンに移動する
Audio音量を変更、ミュートのON/OFFができる
Madia指定したファイルを再生する
Fillterシーンにフィルタを掛けられる
Wait待機時間を設ける

イベントセクションでのVideoを選択時の項目

英語日本語訳
exactly matches完全一致
ピクセル数まで一致するときにTrueを返す
does not match一致しない
1つのピクセルでも一致しないときにTrueを返す
has not changed変わらない
ビデオソースに変更がないときにTrueを返す
has changed変化した
ビデオソースに変更があったときにTrueを返す
has no output出力がない
ビデオソースに出力がないor非表示のときにTrueを返す
matches patternパターンにマッチする
ビデオソースの類似性によってTrueを返す
contains objectオブジェクトを含む
ビデオソース内の特定のオブジェクトを検出するときにTrueを返す
brightness明るさ
contains textテキストに含む
指定したテキストがビデオソース内で検出されたときにTrueを返す
matches color色にマッチする

画像認識でシーンを自動変更する方法

マクロの追加をする。

マクロを新規追加して名前を入力する。

イベントセクション

以下の2つの条件を満たすとアクションセクションを発生させる
・(論理演算子:If)現在のシーンが稼働中である。
・(論理演算子:And)Videoのマッチングパターンで画像認識をして、特定の画像にほぼぴったりになる。

・(論理演算子:Or)他の条件があれば、これで「いずれか」が条件を満たせばよいことになる。

アクションセクション

切り替えたいシーンを設定して、イベントセクションで満たしたら自動でシーンを切り替えるようにする。

実際にその発動したい場面を試していく

しきい値を調整していきながら、思い通りにうまくいくまで調整を繰り返していく。

イベントセクションで現在のシーンを指定する

英語日本語訳
During transition check for transition target sceneトランジション中にトランジションターゲットシーンのチェック

論理演算でIfとする

「If」としていきます。(画面ではAndとなっていますがIfとしてください)
この条件を満たしたら、アクションセクションを動かせるようになります。

「If not」とした場合

条件を満たしていない場合に、アクションセクションを動かせるようになります。
「If」とは正反対の条件になります。

Sceneを選択し、指定のシーンを決める

ここでは「Scene」を選びます。
そして、特定のシーンを開いたときに条件を満たすようにします。

画像の概要として、
「Current scene is(現在のシーン)」が「配信シーン3:ゲームプレイ」のときに条件を満たす。
といった感じになります。

イベントセクションでマッチングパターンを使う

論理演算でAndとする

ここでは「And」にしていきます。
「And」にすることで、この条件も満たさないとアクションセクションを動かせません。
この条件を満たしたら、アクションセクションを動かせるようになります。

matches patternまで選択する

「+」を押してイベントセクションの選択項目を出すようにしていきます。

番号選択内容
And(画面ではIfとなっていますがAndとしてください)
Video
Scene or Source
参照元のシーンかソースを選択
matches pattern
参照元のシーンかソースか

基本的にはゲーム画面が映し出されているソースかシーンを選択するといいかもしれません。
配信画面の映るシーンでは他のオブジェクトが多く入っていることもあり正確に画像認識がうまくいかない可能性の方が高いです。

ですのでDBDであれば以下のいずれかにするといいでしょう。
①ソース:「ゲームキャプチャ:DBD画面」のソースを直接指定する
②シーン:ソースとして「ゲームキャプチャ:DBD画面」が入っているシーンを指定する
     ※ただし、他の余分なオブジェクトがないものを用意しておく必要があります。

配信シーンを選ぶのであれば、配信シーン内にあるオブジェクトも考慮して選択していきましょう。

ファイルを選択する

「Browse」をクリックすると以下の画像が出るので、いずれかを選択していきます。
IMGファイルを選択していき、設定していきます。

英語日本語訳
Browseブラウズ
英語日本語訳
Do you want to use an existing file or create a screenshot of the currently selected source既存のファイルを使用するか、現在選択されているソースのスクリーンショットを作成するか。
Use exist ing file既存のファイルを使用する
Create screenshotスクリーンショット作成

matches patternの項目

英語日本語訳
Thresholdしきい値
A higher threshold value means that the pattern needs to match the video source more closelyしきい値が高いほど、パターンがビデオソースにより近く一致する必要があることを意味する。
Use alpha channel as mask for patternパターンのマスクとしてアルファチャンネルを使用する。
Use pattern matching mode Cross correlationパターンマッチングモードの相互相関を使用する。
Reduce CPU load by perforrming check only every 900 milliseconds900ミリ秒ごとのチェックのみ実行することでCPU負荷を軽減する。
Perform check only in areaエリア内でのみチェックを行う。
Reduce matching latencyマッチング待ち時間の短縮
Show matchマッチを表示
アルファチャンネルとは

デジタル画像処理において、透過度の情報を扱うために用意された補助的なデータ領域

通常のRGB方式では赤(Red)・緑(Green)・青(Blue)の3種類の各色の強さを組み合わせて色を表現します。
(255,255,255)は白、(255, 0, 0) は赤、(0, 0, 255) は青、(0, 255, 0) はライム、と表現されています。

それに追加される形で、その画素がどのくらい透けているかを表す「アルファ値」を格納します。
なので使えるファイル形式はPNG形式かWebm形式など色々とありますが、基本はPNG形式を使います。

英語日本語訳
Squared difference2乗の差
Cross correlation相互相関
Correlation coefficient相関係数

しきい値を決める

初期設定では「0.80000」となっています。これを適切な数値に入力していきます。

入力した数値が適切かどうかは「Show match」を押した先の画面で確認することができます。
ピンク色の塗りつぶしが出てきたらそれが合致した(matchした)という意味になります。

大体「0.95000」から「0.99000」の間に収まればかなりの高い精度でほぼ合致したパターンのみ画像認識されるようになると思います。

必要であれば、エリアを決める

Perform check only in area:エリア内でのみチェックを行う。
という項目がありますが、これにチェックを入れていきます。

英語日本語訳
perform check only in areaエリア内でのみチェックを行う。
Select area領域の選択

囲まれた枠の部分でマッチングパターンの画像認識を識別していきます。
範囲が狭くなるので、おそらくですが処理的に軽くなる可能性はあります。
映し出される映像が一定して固定されているのであれば、こちらでも設定していくのもいいでしょう。

Show matchで確認する

「Show match」を押すとプレビュー画面が出てきます。
その画面ではマッチングパターンに一致したと画像認識が判断した時にだけ、反応が起きます。
反応時はピンク色で塗り潰される形になります。

これを見てちゃんと反応されているか、過剰に反応されていないかチェックをしていきましょう。

アクションセクションで切り替えたいシーンを決める

英語日本語訳
Switch to scene 配信シーン2:雑談 using Current Trranstion with a duration of 1.00 seconds1.00秒の継続時間で、現在のトランジションを使用して配信シーン2:雑談に切り替える。
Wait until transition to target scene is completeターゲットシーンへの移行が完了するまで待つ
英語日本語訳
Current Scene現在のシーン
Previous Scene前回のシーン
Preview Scene予告のシーン

Switch sceneを選び、指定のシーンを選択する

「+」を押して最初に出てくる項目が「Switch scene」なので通常変更はしなくても大丈夫です。
そのあとに、「–select scene–」でアクション時に移動したい先のシーンを選択していきます。
画像例では「配信シーン2:雑談」に移動するといった感じになります。

–select transition–は基本そのまま

「–select transition–」以降は選んでしまうと、今ある設定を更新してしまいます。
もしくは「Current Transition」を選びましょう。(現在のトランジション設定の意味)
そのあとの秒数を設定する部分も同じく数値を設定してしまうと、上書きしてずっとこの数値になってしまいます。
基本は入力なしで大丈夫でしょう。

もし、別途の設定が必要になった場合では入力をしていけば大丈夫です。

実際に動かしてみよう

実際の画面を使い動作を試していきます。
画像認識を設定した場面でしっかり読み込まれると自動でアクションセクションで設定したシーン移動が勝手に起こるようになります。
これを実際に確認していきましょう。

もしここで、動かなかったりしたら原因を1つずつ探っていって解消に努めていきましょう。
ここでおそらく多いパターンとしては「しきい値」の調整がうまくいってないパターンだと思います。
多めに数値を下げていってうまく動作できるようになったら数値を調整していってみて下さい。
しきい値「0.99000」⇒「0.95000」⇒「0.90000」と調整しながらうまくいったら間の数値を埋めていくといった感じです。

参考にした記事(英語)

DBDでの設定の一例

DBDにおけるシーン自動切り替えの考え方

星詠れいの環境において
・OBSにおける基本(キャンバス)解像度:1920×1080
・DBDの画面の大きさ:1920×1080

必要なシーン
・「配信シーン2:雑談」
・「配信シーン3:ゲームプレイ」
・「配信シーン3A:リザルト」
・「ソースまとめ:DBD画面」(星詠れいは「ソースまとめ41:DBD画面&音声」)

必要なソース
・「画面_DBD」画面の大きさ:1920×1080

「配信シーン2:雑談」⇨「配信シーン3:ゲームプレイ」

試合開始前のロード中に切り替える
※ロード中画面での下に表示されるバーに注目する

「配信シーン3:ゲームプレイ」⇨「配信シーン3A:リザルト」

試合終了後のリザルト画面になったときに切り替える
※リザルト画面での左上に出る文字に注目する
 キラー陣営:「無慈悲な殺人鬼」「冷酷な殺人鬼」「残忍な殺人鬼」「エンティティは飢えている・・・」
 サバ陣営 :「脱出」「処刑された」

「配信シーン3A:リザルト」⇨「配信シーン2:雑談」

リザルト画面からロビーに戻る途中の画面で切り替える
※ロード画面での画面全体の映像に注目する
 これは「配信シーン2:雑談」⇨「配信シーン3:ゲームプレイ」の時とほぼ一緒の画面になることが多い
 なのでリザルト画面用のシーンを用意し、リザルト画面であることを条件に画像認識で切り替えることにしている

STEP.1「配信シーン2:雑談」に戻り、ループする

STEP.1に戻ってループする
以後はこの繰り返しになる

試合開始時のロード画面で切り替え

マクロ

マクロの名前を入力します。
「マッチに移る」等とします。

イベントセクション

論理演算「IF」
condition types:「Scene」
「Current scene is」「配信シーン2:雑談

イベントセクション2

論理演算「AND」
condition types:「Video」
「Scene」「ソースまとめ41:DBD画面&音声」「matches pattern」指定で「マッチ開始バー.png」を選ぶ
Threshold:「0.99000」
エリア範囲を指定する(Perform check only in areaにチェック入れる)
X:500 Y:950
Width:900 Height:100 (※参考画像の方で範囲の一例があります)

マッチングパターンで使用する画像
ファイル名の一例:DBD_マッチ開始バー.png
※800×80サイズの画面になります。

アクションセクション

action types:「Switch Scene」
移行先のシーンが「配信シーン3:ゲームプレイ
「Current Transition」で「-」seconds

マクロ全体

マッチングパターンでのエリア指定範囲

マッチングパターンに使う画像(ハロウィン2023時)

ファイル名の一例:DBD_マッチ開始時_ハロウィン.png
※1920×1080サイズの画面になります。

リザルト画面になるときに画面切り替え(キラーの場合)

マクロ

マクロの名前を入力します。
「ロビーに戻る」等とします。

イベントセクション

論理演算「IF」
condition types:「Scene」
「Current scene is」「配信シーン3A:リザルト画面

イベントセクション2

論理演算「AND」
condition types:「Video」
「Scene」「ソースまとめ41:DBD画面&音声」「matches pattern」指定で「DBD_リザルト_エンティティは飢えている.png」を選ぶ
Threshold:「0.99000」
エリア範囲を指定する(Perform check only in areaにチェック入れる)
X:0 Y:100
Width:1000 Height:300 (※参考画像の方で範囲の一例があります)

マッチングパターンで使用する画像
ファイル名の一例:DBD_エンティティは飢えている.png
※900×200サイズの画面になります。

イベントセクション3

論理演算「OR
condition types:「Video」
「Scene」「ソースまとめ41:DBD画面&音声」「matches pattern」指定で「DBD_リザルト_残忍な殺人鬼.png」を選ぶ
Threshold:「0.99000」
エリア範囲を指定する(Perform check only in areaにチェック入れる)
X:0 Y:100
Width:1000 Height:300 (※参考画像の方で範囲の一例があります)

マッチングパターンで使用する画像
ファイル名の一例:DBD_残忍な殺人鬼.png
※900×200サイズの画面になります。

イベントセクション4

論理演算「OR
condition types:「Video」
「Scene」「ソースまとめ41:DBD画面&音声」「matches pattern」指定で「DBD_リザルト_冷酷な殺人鬼.png」を選ぶ
Threshold:「0.99000」
エリア範囲を指定する(Perform check only in areaにチェック入れる)
X:0 Y:100
Width:1000 Height:300 (※参考画像の方で範囲の一例があります)

マッチングパターンで使用する画像
ファイル名の一例:DBD_冷酷な殺人鬼.png
※900×200サイズの画面になります。

イベントセクション5

論理演算「OR
condition types:「Video」
「Scene」「ソースまとめ41:DBD画面&音声」「matches pattern」指定で「DBD_リザルト_無慈悲な殺人鬼.png」を選ぶ
Threshold:「0.99000」
エリア範囲を指定する(Perform check only in areaにチェック入れる)
X:0 Y:100
Width:1000 Height:300 (※参考画像の方で範囲の一例があります)

マッチングパターンで使用する画像
ファイル名の一例:DBD_無慈悲な殺人鬼.png
※900×200サイズの画面になります。

アクションセクション

action types:「Switch Scene」
移行先のシーンが「配信シーン3A:リザルト画面
「Current Transition」で「-」seconds

マクロ全体

Videoの一部分のみ

マッチングパターンでのエリア指定範囲

リザルト画面になるときに画面切り替え(サバの場合)

※基本的にはキラーの時と一緒です。
画像を置き換えるのみになります。

マクロ

マクロの名前を入力します。
「ロビーに戻る」等とします。

イベントセクション

論理演算「IF」
condition types:「Scene」
「Current scene is」「配信シーン3A:リザルト画面

イベントセクション2

論理演算「AND」
condition types:「Video」
「Scene」「ソースまとめ41:DBD画面&音声」「matches pattern」指定で「DBD_リザルト_処刑された.png」を選ぶ
Threshold:「0.99000」
エリア範囲を指定する(Perform check only in areaにチェック入れる)
X:0 Y:100
Width:1000 Height:300 (※参考画像の方で範囲の一例があります)

マッチングパターンで使用する画像
ファイル名の一例:DBD_処刑された.png
※900×200サイズの画面になります。

イベントセクション3

論理演算「OR
condition types:「Video」
「Scene」「ソースまとめ41:DBD画面&音声」「matches pattern」指定で「DBD_リザルト_脱出.png」を選ぶ
Threshold:「0.99000」
エリア範囲を指定する(Perform check only in areaにチェック入れる)
X:0 Y:100
Width:1000 Height:300 (※参考画像の方で範囲の一例があります)

マッチングパターンで使用する画像
ファイル名の一例:DBD_脱出.png
※900×200サイズの画面になります。

アクションセクション

action types:「Switch Scene」
移行先のシーンが「配信シーン3A:リザルト画面
「Current Transition」で「-」seconds

マクロ全体

マッチングパターンでのエリア指定範囲

リザルト画面の後にロビー画面に戻るときの画面切り替え

マクロ

マクロの名前を入力します。
「ロビーに戻る」等とします。

イベントセクション

論理演算「IF」
condition types:「Scene」
「Current scene is」「配信シーン3A:リザルト画面

イベントセクション2

論理演算「AND」
condition types:「Video」
「Scene」「ソースまとめ41:DBD画面&音声」「matches pattern」指定で「DBD_マッチ終了時.png」を選ぶ
Threshold:「0.99000」
エリア範囲は指定しない

マッチングパターンで使用する画像
ファイル名の一例:DBD_マッチ終了時.png
※1920×1080サイズの画面になります。

アクションセクション

action types:「Switch Scene」
移行先のシーンが「配信シーン2:雑談
「Current Transition」で「-」seconds

マクロ全体

他にもいろいろ

例えば、無慈悲な殺人鬼だった時にだけに、何かのビデオを流したり、メディアを表示させたりすることも可能じゃないかなと思います。
画像認識によって自動で再生されるようになるので便利になるんじゃないかとは思います。

参考サイトブログ

おわりに

この記事で参考になりましたら、ぜひとも星詠れいをフォローしてください!
色々書かれていますが、あくまでも一例ということで皆様のOBSの構築への一つの参考となっていただければと思います。

OBS 総合まとめ

OBSの基本設定

OBS 関連記事

星詠れいのおすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です