Skip to content

BeatSaberオーバーレイでOBS Studioのシーン自動切り替え

License

Notifications You must be signed in to change notification settings

rynan4818/obs-control

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 

Repository files navigation

obs-control

Beat Saber Overlay 改良版でOBS Studioのシーンコントロールをする追加スクリプトです。

メニュー画面とゲームプレイ画面の枠(カメラ枠とか)を変更したり、画面切替時にトランジションを入れたり、開始や終了時などイベント毎に中間のシーンで違った動画を再生したりできます。

シーン切り替えサンプル

picture_pc_aee6153c9905450e394c81fd0bec7df4

シーン切替を使用しない場合も、BeatSaberプレイ時のOBSのシーンをゲームシーン名、メニューシーン名に設定しておくことでシーン切替忘れ防止になります。

他にも録画忘れ防止機能として、録画ボタンを押さないで譜面のプレイ開始をすると警告音が鳴る機能もあります。

また、HttpPlayButtonStatusを使用すると、ゲームシーンに切り替わるタイミングを、PLAYボタンを押した瞬間に早めことができたり、自動シーン切り替えのON/OFFやオプション用シーン1~3にBeatSaber内から手動切替ができます。

サンプル動画

Streamlabs OBS版はこちら

XSplit Broadcaster用の同様ツールはこちら

使用方法

  1. Beat Saber Overlay 改良版をインストールして使えるようにします

    配布サイト:https://github.com/rynan4818/beat-saber-overlay

    インストールと設定方法は上記サイトに詳細があります。

    オーバーレイ機能を使用しない場合は、OBS Studio上でオーバーレイを非表示にしてください

    (例えば、他のDataPullerとかのオーバーレイを使用している場合など)

    非表示にしても、裏でOBSコントロール機能は動くのでOBS Studioのどこかのシーンのソースにオーバーレイを設定する必要があります

    注意点として 表示されていないときにソースをシャットダウンシーンがアクティブになったときにブラウザの表示を更新 の2つはチェックしないで下さい

    preview

    ページ権限をOBSへの高度なアクセスにして下さい。 image

  2. 本ツールのリリースページから最新リリースをダウンロードします。

  3. 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/09Release v2023/02/18を元にしています。

      オーバーレイがそれ以外のバージョンになっている場合や改造されている場合、他の表示スキンに変更している場合などはindex.html を上書きすると表示内容が変わってしまいます。

      その場合は、インストールしたオーバーレイの index.html をメモ帳で開いて、最後の方の

      <script src="./js/options.js"></script>
      

      の上の行に

      <script src='./js/obs-control.js'></script>
      

      の1行を追加してください。

  4. オーバーレイの js フォルダにコピーした obs-control.js をメモ帳で開きます

    行頭が const obs_ で始まる内容は必要に応じて変更します。

    デフォルト設定のまま使う場合は、メニューシーンのOBS Studioのシーン名を BS-Game ゲームシーンのシーン名を BS-Menu とします。

    シーン切り替え機能を使用せず、録画状態チェックのみ使用する場合は obs_game_scene_nameobs_menu_scene_name を普段BeatSaberで使用するシーン名にして、obs_recording_checktrueにしてください。シーン切り替え忘れ防止、録画忘れ防止になります。

     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"ボタンシーン名
    
  5. HttpPlayButtonStatusを使用する場合は、別途インストールして下さい。

  6. あとは通常通り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データ終了
  1. song-scene.jsの中身の``(バッククオート)内をJSONデータで作成します。
  2. 1曲ごとに、オブジェクトの配列にして下さい。
  3. hashは譜面のハッシュ値です。ScoreSaberの譜面ページなどで確認するのが簡単です。 image
  4. songnameは譜面の曲名です。PRACTICEモード等ではハッシュ値が取得できないので曲名で指定して下さい。譜面エディタ等で正確な曲名を調べて入力して下さい。※hashが同時に設定されている場合は、ハッシュ値が優先されます。
  5. startchangeは、その譜面でゲーム開始時にシーン切り替えを有効・無効の選択をします。trueで有効、falseで無効です。
  6. endchangeは、譜面の終了時のシーン切り替えの有効・無効です。
  7. timelistを各時間ごとにシーン名を入れたオブジェクトの配列にします。
  8. timeは "分:秒.ミリ秒"です。ミリ秒、秒は省略可能です。(小数点以下はミリ秒なので、0.5秒は0.500にして下さい。)
  9. sceneは 切り替えるシーン名です。
  10. gamesceneは、曲専用のゲーム中シーンがあれば設定します。省略時はデフォルトが有効になります。
  11. startsceneは、曲専用のスタートシーンがあれば設定します。設定時は次のstartdurationも設定して下さい。省略時はデフォルト値が有効になります。
  12. startdurationは、曲専用のスタートシーンの表示秒数です。0を指定するとデフォルトでスタートシーンが設定されている場合に無効になります。
  13. menusceneは、曲専用のメニューに戻った時のシーンを設定します。省略時はデフォルトが有効になります。
  14. endsceneは、曲専用の終了シーンがあれば設定します。設定時は次のenddurationも設定して下さい。省略時はデフォルト値が有効になります。曲専用はクリア条件等に関係なく固定です。
  15. 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ライセンスを適用します

About

BeatSaberオーバーレイでOBS Studioのシーン自動切り替え

Resources

License

Stars

Watchers

Forks

Packages

No packages published