Beat Saber Overlay 改良版でOBS Studioのシーンコントロールをする追加スクリプトです。
メニュー画面とゲームプレイ画面の枠(カメラ枠とか)を変更したり、画面切替時にトランジションを入れたり、開始や終了時などイベント毎に中間のシーンで違った動画を再生したりできます。
シーン切替を使用しない場合も、BeatSaberプレイ時のOBSのシーンをゲームシーン名、メニューシーン名に設定しておくことでシーン切替忘れ防止になります。
他にも録画忘れ防止機能として、録画ボタンを押さないで譜面のプレイ開始をすると警告音が鳴る機能もあります。
また、HttpPlayButtonStatusを使用すると、ゲームシーンに切り替わるタイミングを、PLAYボタンを押した瞬間に早めことができたり、自動シーン切り替えのON/OFFやオプション用シーン1~3にBeatSaber内から手動切替ができます。
※XSplit Broadcaster用の同様ツールはこちら
-
Beat Saber Overlay 改良版をインストールして使えるようにします
配布サイト:https://github.com/rynan4818/beat-saber-overlay
インストールと設定方法は上記サイトに詳細があります。
オーバーレイ機能を使用しない場合は、OBS Studio上でオーバーレイを非表示にしてください
(例えば、他のDataPullerとかのオーバーレイを使用している場合など)
非表示にしても、裏でOBSコントロール機能は動くのでOBS Studioのどこかのシーンのソースにオーバーレイを設定する必要があります
注意点として
表示されていないときにソースをシャットダウン
とシーンがアクティブになったときにブラウザの表示を更新
の2つはチェックしないで下さい -
本ツールのリリースページから最新リリースをダウンロードします。
-
1.でインストールしたオーバーレイのフォルダに、本ツールのファイルをコピーしてください。
-
js
フォルダに、obs-control.js
を追加本ツールの
js
フォルダのファイルは、Beat Saber Overlay 改良版のRelease v2022/04/25以降のjs
フォルダのファイルを対象にしています。それ以前の場合は最新版のjs
フォルダのファイルに差し替えて下さい。 -
インストールフォルダの
index.html
を本ツールの物に差し替え(上書き)本ツールの
index.html
は、Beat Saber Overlay 改良版のRelease v2021/05/09~Release v2023/02/18を元にしています。オーバーレイがそれ以外のバージョンになっている場合や改造されている場合、他の表示スキンに変更している場合などは
index.html
を上書きすると表示内容が変わってしまいます。その場合は、インストールしたオーバーレイの
index.html
をメモ帳で開いて、最後の方の<script src="./js/options.js"></script>
の上の行に
<script src='./js/obs-control.js'></script>
の1行を追加してください。
-
-
オーバーレイの
js
フォルダにコピーしたobs-control.js
をメモ帳で開きます行頭が
const obs_
で始まる内容は必要に応じて変更します。デフォルト設定のまま使う場合は、メニューシーンのOBS Studioのシーン名を
BS-Game
ゲームシーンのシーン名をBS-Menu
とします。シーン切り替え機能を使用せず、録画状態チェックのみ使用する場合は
obs_game_scene_name
とobs_menu_scene_name
を普段BeatSaberで使用するシーン名にして、obs_recording_check
をtrue
にしてください。シーン切り替え忘れ防止、録画忘れ防止になります。const obs_game_scene_name = 'BS-Game'; //ゲームシーン名 const obs_menu_scene_name = 'BS-Menu'; //メニューシーン名 const obs_game_event_delay = 0; //ゲームシーン開始タイミングを遅らせる場合に遅らせるミリ秒を設定して下さい。タイミングを早めること(マイナス値)はできません。[0の場合は無効] const obs_menu_event_delay = 0; //ゲームシーン終了(メニューに戻る)タイミングを遅らせる場合に遅らせるミリ秒を設定して下さい。タイミングを早めること(マイナス値)はできません。[0の場合は無効] const obs_menu_event_switch = false; //[true/false]ゲームシーン終了タイミングをfinish/failした瞬間に変更する場合は true にします。約3~4秒程度早まりますのでobs_menu_event_delayと合わせて終了タイミングの微調整に使えます。 const obs_start_scene_duration = 0; //ゲームシーンに切り替える前に開始シーンを表示する時間(秒単位[小数3位までOK]) [0の場合は無効] const obs_start_scene_name = 'BS-Start'; //開始シーン名 ※使用時はobs_start_scene_durationの設定要 const obs_finish_scene_duration = 0; //Finish(クリア)時にメニューシーンに切替わる前に終了シーンを表示する時間(秒単位[小数3位までOK]) [0の場合は無効] const obs_finish_scene_name = 'BS-Finish'; //Finish(クリア)用終了シーン名 ※使用時はobs_finish_scene_durationの設定要 const obs_fullcombo_scene_duration = 0; //フルコンボクリア時にメニューシーンに切替わる前に終了シーンを表示する時間(秒単位[小数3位までOK]) [0の場合は無効] const obs_fullcombo_scene_name = 'BS-FullCombo'; //フルコンボクリア用終了シーン名 ※使用時はobs_fullcombo_scene_durationの設定要 const obs_fail_scene_duration = 0; //Fail(フェイル)時にメニューシーンに切替わる前に終了シーンを表示する時間(秒単位[小数3位までOK]) [0の場合は無効] const obs_fail_scene_name = 'BS-Fail'; //Fail(フェイル)用終了シーン名 ※使用時はobs_fail_scene_durationの設定要 const obs_pause_scene_duration = 0; //Pause(ポーズ)してメニューに戻る場合にメニューシーンに切替わる前に終了シーンを表示する時間(秒単位[小数3位までOK]) [0の場合は無効] const obs_pause_scene_name = 'BS-Pause'; //Pause(ポーズ)用終了シーン名 ※使用時はobs_pause_scene_durationの設定要 const obs_recording_check = false; //[true/false]trueにするとゲームシーン開始時に録画状態をチェックする。 const obs_not_rec_sound = 'file:///C://Windows//Media//Windows%20Notify%20Calendar.wav' //ゲームシーン開始時に録画されていない場合に鳴らす音(適当な音声ファイルをブラウザに貼り付けて、アドレス欄のURLをコピーする) const obs_option1_scene_name = 'BS-Option1'; //HttpPlayButtonStatus の "Option Scene 1"ボタンシーン名 const obs_option2_scene_name = 'BS-Option2'; //HttpPlayButtonStatus の "Option Scene 2"ボタンシーン名 const obs_option3_scene_name = 'BS-Option3'; //HttpPlayButtonStatus の "Option Scene 3"ボタンシーン名
-
HttpPlayButtonStatusを使用する場合は、別途インストールして下さい。
-
あとは通常通りOBS Studioで記録・配信すればOKです。
曲専用にゲームスタート・エンドのシーンを変えたり、プレイ中の曲時間に合わせてシーン切り替えが可能です。
オーバーレイやobs-controlの時間はHttpSiraStatusから毎秒送信される曲時間に同期するようになっていますが、スタート(0秒)はプレイ開始イベント(ゲームシーン切り替え)のタイミングからカウントスタートします。なので、実際に曲がスタートする0~1,2秒ぐらいまではずれる可能性が高いです。できれば2~3秒後以降を指定してください。これは環境(modの導入状況やPC性能)や譜面によって異なります。
ただし、BeatSaberで動作するHttpSiraStatusがwebsocket通信でOBSのオーバーレイに送信している仕組みのため、中間に入るものが多いので1秒未満の精度は高くありません。音楽に合わせて、高精度のタイミングでシーン切替をしたい場合は、AutoItControlを使用してBeatSaberから直接OBSのショートカットキーを操作する方法の方が上手くいくと思います。
通常は曲専用シーン切り替えは無効になっています。有効にするには、index.html
をメモ帳(エディタ)で開いて
<script src='./js/obs-control.js'></script>
の行の上に ※obs-control.js
より下だと動作しません。
<script src='./js/song-scene.js'></script>
を追加して保存して下さい。
次にjs
フォルダのsong-scene.js
ファイルに曲ごとのシーン切り替え情報を設定します。
song-scene.js
は、こちらの説明コメント付きではなくzipファイルに付属しているコメントの無い方を使用して下さい。コメント付きだと動作しません
//JSON内にコメントを入れるとエラーで動作しないので、こちらの説明は使用しないで下さい。zip内のsong-scene.jsを使用して下さい。
const song_scene_json = ` //バッククオートからJSONデータ開始
[ //設定したい譜面の数だけ並べる
{ //1譜面目の情報
"hash": "06121351C6BC732112B20D2C524FB84C036DDF5E", //譜面のハッシュ値
"startchange": true, //開始時にデフォルトのゲーム中用シーンに true:切り替える false:切り替えない
"endchange": true, //終了時にデフォルトのメニュー用シーンに true:切り替える false:切り替えない
"timelist": [ //曲時間で切り替えるシーンを必要な数並べる
{
"time": "0:10.500", //譜面の曲時間0分10.5秒でTEST3シーン切り替え(10.5秒は10.500として下さい。10.5だと10.005秒になります)
"scene": "TEST3"
},
{
"time": "0:20", //譜面の曲時間0分20秒でTEST1シーンに切り替え
"scene": "TEST1"
} //最後は,不要
]
},
{ //2譜面目の情報
"songname": "Mainichi Kashimashi Pharmacy", //譜面の曲名
"startchange": true,
"gamescene": "GAME", //開始時に曲専用のGAMEシーンに切り替える
"endchange": true,
"menuscene": "MENU", //終了時に曲専用のMENUシーンに切り替える
"timelist": [
{
"time": "0:10.500",
"scene": "TEST3"
}
]
},
{ //3譜面目の情報
"hash": "6D1FA74C517A03EA76170345789C85F9077DC7A4",
"startchange": true,
"gamescene": "GAME",
"startscene" : "START", //開始時に曲専用のSTARTシーンを3秒間表示してGAMEシーンに切り替える
"startduration" : 3, //※duration値を0にするとスタートシーンを無効
"endchange": true,
"menuscene": "MENU",
"endscene": "END", //終了時に曲専用のENDシーンを3秒間表示してMENUシーンに切り替える
"endduration" : 3,
"timelist": [
{
"time": "0:15",
"scene": "TEST2"
},
{
"time": "0:20.550",
"scene": "TEST3"
},
{
"time": "0:50",
"scene": "TEST4"
}
]
} //最後は,不要
]
`; //バッククオートまででJSONデータ終了
song-scene.js
の中身の``(バッククオート)内をJSONデータで作成します。- 1曲ごとに、オブジェクトの配列にして下さい。
hash
は譜面のハッシュ値です。ScoreSaberの譜面ページなどで確認するのが簡単です。songname
は譜面の曲名です。PRACTICEモード等ではハッシュ値が取得できないので曲名で指定して下さい。譜面エディタ等で正確な曲名を調べて入力して下さい。※hash
が同時に設定されている場合は、ハッシュ値が優先されます。startchange
は、その譜面でゲーム開始時にシーン切り替えを有効・無効の選択をします。trueで有効、falseで無効です。endchange
は、譜面の終了時のシーン切り替えの有効・無効です。timelist
を各時間ごとにシーン名を入れたオブジェクトの配列にします。time
は "分:秒.ミリ秒"です。ミリ秒、秒は省略可能です。(小数点以下はミリ秒なので、0.5秒は0.500にして下さい。)scene
は 切り替えるシーン名です。gamescene
は、曲専用のゲーム中シーンがあれば設定します。省略時はデフォルトが有効になります。startscene
は、曲専用のスタートシーンがあれば設定します。設定時は次のstartduration
も設定して下さい。省略時はデフォルト値が有効になります。startduration
は、曲専用のスタートシーンの表示秒数です。0を指定するとデフォルトでスタートシーンが設定されている場合に無効になります。menuscene
は、曲専用のメニューに戻った時のシーンを設定します。省略時はデフォルトが有効になります。endscene
は、曲専用の終了シーンがあれば設定します。設定時は次のendduration
も設定して下さい。省略時はデフォルト値が有効になります。曲専用はクリア条件等に関係なく固定です。endduration
は、曲専用の終了シーンの表示秒数です。0を指定するとデフォルトで終了シーンが設定されている場合は無効になります。
Release 2022/05/22以降は、最近のOBS Studioにデフォルトで内蔵されたobs-browserの機能を使用しています。
obs-browserの機能デバッグにはOBSでの動作が必須のため、通常のブラウザを使ったデバッグが出来ません。OBS Studioの起動オプションに
--remote-debugging-port=44444 ※44444は任意のポート番号
を付けて起動すると、ブラウザからhttp://localhost:44444/
でアクセスしてDevToolを使ってデバッグが可能です。
本ツールのライセンスはMITライセンスを適用します