
OBS Studio上で画像認識を用いて配信管理を自動化する【Advanced Scene Switcher】
たぐやんです。スマブラSPのオフラインコミュニティ大会「渋谷BeeSmash」を中心に、オフイベントを500回以上主催しています。
今回は配信技術の話です。スマブラの大会において、スコアボードやリプレイ再生などの配信の管理を自動化したことについてまとめます。
・セットカウントの自動更新
— taguyan/たぐやん (@Tagg_ssbu) May 14, 2024
・スコアボードへのStartgg上の選手データの自動反映
・リプレイの自動録画、再生
・試合、カメラ、リプレイシーンの自動切替
を導入したので、配信中にOBSやスコアボードアプリに一度も入力しないオフ大会配信環境が完成しました pic.twitter.com/tEnpIIkH9A
導入した経緯
スマブラのコミュニティ大会の配信は独自に発展しており、10年以上前から試合中のカメラやスコアボードを積極的に取り入れています。
特に最近の大型大会では「EGS」等の配信団体が非常に高品質な配信を行っています。
そんな中、人手の無い小規模コミュニティ対戦会でも参加者の思い出を彩れるような配信を出来ないかと考えた結果、配信管理の自動化の導入に至りました。
実装した機能
渋谷BeeSmashや渋谷達の配信では、以下の機能を導入しています。
カメラ切り替え機能
試合前は会場カメラを大きく映す
試合中はゲーム画面を大きく映す
試合終了後に会場カメラを写す
試合終了後、7秒経ったらリプレイを写す
リプレイが終わったら選手をアップしたカメラを写す
リプレイ機能
ストックを奪ったタイミングでリプレイを録画する
試合終了後にリプレイを再生する
スコアボード自動化機能
試合終了後に、勝利した選手ののスコアを+1する
Startggから選手情報を取得して表示する
以上の機能を実装することで、このような配信の(ほぼ)全自動化をしています。
実装内容
VLC media player
同じフォルダに入っている動画ファイルをまとめてOBSに読み込むことができるアプリ、OBSプラグインです。
録画した複数のリプレイをまとめて再生するのに利用します。
導入方法はこちらの動画が分かりやすいです。
リプレイフォルダ構成
リプレイ動画のファイルを管理するフォルダです。
Highlightフォルダ…このフォルダに入っている動画が再生されます
bkupフォルダ…次の試合が始まると、以前の動画はこのフォルダに退避します。
bkupmove.batファイル…リプレイ動画をHighlightからbkupに退避するためのバッチファイルです。
C:.
│ bkupmove.bat
│
├─bkup
│ 250124-203311.mp4
│ 250124-203716.mp4
│ 250124-203814.mp4
│ 250124-203839.mp4
│ 250124-203939.mp4
│
├─Highlight
│ 250124-205238.mp4
│ 250124-205252.mp4
bkupmove.batファイルの中身↓
move Highlight\.mkv bkup
move Highlight\.mp4 bkup
リプレイバッファ
OBSのリプレイバッファ機能を設定しましょう。自分の環境ではリプレイ時間を7秒に設定しています。
また、リプレイバッファで録画された動画を前述のリプレイフォルダに格納されるように「録画ファイルのパス」を設定しています。


Advanced Scene Switcher
Advanced Scene Switcherというプラグインを用いて画像認識マクロを組みます。導入方法は以前書いたこちらのノートにまとめています。
自分の環境では、現在以下のマクロを組んでいます。少し長くなりますが、一つ一つご紹介します。

Game Start
試合開始画面を認識し、シーンを「試合」に切り替える

Highlight_Remove
試合開始画面を認識し、.batファイルを起動しリプレイが残っているフォルダを綺麗にする

Highlight_REC
撃墜画面の「3-2」のような表示を認識し、OBSの「リプレイバッファ」機能を動かし、その瞬間より前の7秒間をリプレイとして記録する

Highlight_GamesetREC
「GAME SET」の表示を認識し、OBSの「リプレイバッファ」機能を動かし、その瞬間より前の7秒間をリプレイとして記録する

GAMESET
「GAME SET」の表示を認識し、シーンを「風景」に切り替える

ScoreUp_1PWin
1P勝利時の試合結果画面を認識し、ショートカットキーを入力する。スコアボード側で同じショートカットキーを設定しておき、1Pのスコアを「+1」する。

ScoreUp_2PWin
2P勝利時の試合結果画面を認識し、ショートカットキーを入力する。スコアボード側で同じショートカットキーを設定しておき、2Pのスコアを「+1」する。

Highlight_Get
「GAME SET」の表示を認識して5秒後に、これまで録画したリプレイフォルダを読み込む

Highlight_Play
「GAME SET」の表示を認識して7秒後に、「Replay」シーンに切り替えてリプレイを再生する

Highlight_Stop
リプレイ内で「GAME SET」の文字が表示されたら、シーンを「プレイヤーカメラ」に切り替える

風景に戻る
「プレイヤーカメラ」のシーンで30秒以上経った場合、シーンを「風景」に切り替える

以上が実装内容となります。駆け足の紹介となってしまいましたがご了承を…。
おわりに
自動化は継続的に運営をしていくための投資です。環境を作るのは大変ですが、適切に導入できれば大きな力になります。
このNoteが皆さんの配信管理の一助となれば幸いです。
自分の運営するコミュニティでももっと様々な分野での自動化に取り組んでいければと考えています。
またそのうちBeeスマにまつわることを書きます!
いいなと思ったら応援しよう!
