
OBS Studioでスケジュールにあわせて自動配信してみた
はじめに
清水です。動画の録画やライブストリーミングに利用できるフリーでオープンソースのソフトウェア OBS Stuidoで、事前に指定した時刻に自動でストリーミング(配信)の開始ならびに終了ができないか確認してみました。
様々な実現方法が考えられますが、本ブログエントリでは (1) コマンドラインでOBS Studioを操作する方法 、 (2) プラグインAdvanced Scene Switcherを利用する方法 、の2通りについて動作を検証してみました。
動作検証環境について
まずはじめに、本ブログエントリで動作検証を行った環境についてまとめておきます。OBS Studioを稼働させる環境はMacBook Pro (14インチ, 2021)(10コアCPUと24コアGPU搭載M1 Max、メモリ32GB)、macOSのバージョンはSonomaです。
OSがmacOSですので、自動ストリーミングの実現方法「(1) コマンドラインでOBS Studioを操作する方法」では、macOSで利用できるコマンドラインツールの使用が前提となります。
また、OBS Studioはバージョン31.1.0を使用しました。macOSでのMultitrack Videoに対応したバージョンですね。
% /Applications/OBS.app/Contents/MacOS/OBS --version
OBS Studio - 31.1.0
また「自動でストリーミング(配信)する」ということで、この配信先にはAWS Elemental MediaLiveを利用しました。MediaLiveのRTMP (push) InputにOBS Stuidoから映像を打ち上げます。MediaLiveではArchive output gropuを使用し、打ち上げられた映像をM2TSファイルにしてAmazon S3に出力します。
OBS Studio側ではソースとしてメディアソースを作成、ローカルに保存してあるBig Buck Bunnyの動画ファイルをループ再生しておきます。また確認用として左上に現在時刻を表示させました。以下ページの方法・ツールを利用しています。
現在時刻自体は外部WebサイトからJavaScript経由で表示されているものを使用し、OBS Stuido側ではソースとしてブラウザを追加して表示する、というぐあいですね。なお秒表示のあとに表示されている数字.N
はミリ秒(小数点以下一桁)のです。フレーム番号ではない点に注意しましょう。
配信の設定として、サービスでカスタム…
を選択、サーバとストリームキーにMediaLiveのRTMP (push) InputのEndponit情報を設定しておきます。
出力設定などは基本的にOBS Studioのデフォルト値を利用、特段変わった設定はしていません。
コマンドラインでOBSを操作して配信を自動化する
まずはOBS Studioをコマンドラインから操作する方法で、指定した時刻に自動でストリーミングの開始ならびに終了を行ってみます。
コマンド操作の確認
OBS StudioはGUI(アプリケーションのアイコン)からの起動のほか、コマンドラインからの起動も可能です。macOSであれば以下コマンドをターミナルから実行することで起動できます。
% /Applications/OBS.app/Contents/MacOS/OBS
この際に起動パラメータを指定することで、起動と同時にストリーミングや録画を開始する、起動時のプロファイルやシーンを指定するといったことが可能となります。指定できるパラメータなど詳細は下記をご確認ください。
ストリーミングの開始にはパラメータ--startstreaming
をつけてOBSを起動します。
% /Applications/OBS.app/Contents/MacOS/OBS --startstreaming
ストリーミングの終了の指定はコマンドラインからは実現できないようです。また、例えばフォアグラウンドジョブの状態でCtrl-C
したり、バックグラウンドで実行中の状態でosascript -e 'tell application "OBS" to quit'
コマンドで終了させたりしようとすると、終了に対するダイアログが表示されます。
通常の利用であればこのダイアログはありがたいものの、自動でストリーミングを停止させたいと考えた場合は、逆にその妨げになってしまいます。
このダイアログの回避策としてコマンドpkill -f "OBS"
やkillall OBS
の実行でOBSのプロセス自体を終了させる、という手段もあります。しかしこのプロセス終了の方法を採った場合、次回OBS Studio起動時に「正しくシャットダウンされなかったので、セーフモードで起動しますか?」といったダイアログが表示されます。
このセーフモードで起動を促すダイアログ回避のため、OBS Studioの設定 > 詳細設定 > 一般から、[終了時にアクティブな出力の警告を表示する]のチェックを外しておきます。これで、ストリーミング中にosascript -e 'tell application "OBS" to quit'
コマンドでOBS Studioを終了させても、ダイアログは表示されなくなります。(コマンドラインからの自動化を前提としてのダイアログ非表示の設定変更です。自動化を行わなくなった場合などは、本警告を再表示するよう設定を戻すようにしましょう。)
(なお、この[出力時にアクティブな出力の警告を表示する]のチェックを外すほか、コマンドpkill -f "OBS"
やkillall OBS
の実行でOBSのプロセス自体を終了させつつ、次回OBS Studioの起動の際にはパラメータ--disable-shutdown-check
をつけて起動する、といった回避策も考えられます。)
コマンド操作を自動実行
コマンドラインからのOBS Studioのストリーミング開始状態での起動と終了方法が確認できました。これらをシェルスクリプトにまとめておきます。開始用のスクリプトをstart-obs-stream.sh
、終了用のスクリプトをstop-obs-stream.sh
という名称にしました。それぞれ以下の内容となります。
#!/bin/sh
/Applications/OBS.app/Contents/MacOS/OBS --startstreaming
#!/bin/sh
osascript -e 'tell application "OBS" to quit'
あらかじめシェルスクリプトには実行権限を付与しておきます。
% chmod 755 start-obs-stream.sh stop-obs-stream.sh
% ls -l | grep "obs-stream.sh\*"
-rwxr-xr-x 1 user staff 69 7 24 17:20 start-obs-stream.sh*
-rwxr-xr-x 1 user staff 57 7 24 17:20 stop-obs-stream.sh*
これらのシェルスクリプトを指定した時刻にあわせて実行すれば、自動配信ならびに停止が実現できます。macOSでのシェルスクリプトのスケジュール実行についてはlaunchdやatコマンドなどが考えられますが、今回はcrontabでの実行としました。
crontab -e
コマンドでcrontabを編集、以下2行を設定します。本ブログエントリの動作検証は2025/07/24に行いました。17:35
にstart-obs-stream.sh
を実行、また3分後の17:38
にstop-obs-stream.sh
を実行します。シェルスクリプトの実行ならびに出力をログファイルに保存しています。
35 17 24 7 * /Users/user/path/to/start-obs-stream.sh >> /Users/user/path/to/start-obs-stream.log 2>&1
38 17 24 7 * /Users/user/path/to/stop-obs-stream.sh >> /Users/user/path/to/stop-obs-stream.log 2>&1
編集後はcrontab -l
コマンドできちんと設定されているか確認しておきましょう。操作の流れとして以下のようになります。
% crontab -l
% crontab -e
crontab: installing new crontab
% crontab -l
35 17 24 7 * /Users/user/path/to/start-obs-stream.sh >> /Users/user/path/to/start-obs-stream.log 2>&1
38 17 24 7 * /Users/user/path/to/stop-obs-stream.sh >> /Users/user/path/to/stop-obs-stream.log 2>&1
それでは実際の動作検証です。指定した時刻の前に、あらかじめ配信先となるMediaLive ChannelをStartさせておきます。
OBS Studioは終了した状態で待機します。指定した時刻の17:35
になるとOBS Studioが自動で起動して配信を開始します。
その後17:38
になるとOBS Studioが終了、ここでMediaLiveへの配信も停止します。
MediaLiveのChannelを停止後、出力されたアーカイブファイルをローカルにダウンロードして確認してみます。Macのクイックルックで映像を確認しました。M2TSファイルの先頭では、OBS Studio側で焼き付けていた時刻は17:35:04.8
を示していました。またアーカイブファイルで確認できた最後のOBS Studioからの映像は17:38:00.5
です。(その後はOBS Studioからの配信は途絶えるため、真っ黒な映像が続きます。)OBS Studioの起動から実際の配信の開始まで多少なりともタイムラグがあるため少しの誤差はありますが、自動で配信を開始、終了するという目的は実現できていますね。
なお、このコマンドラインを使ったOBS Studioの自動化ですが、起動オプションには録画を開始する--startrecording
もあります。録画の自動化といったことも実現できそうですね。
プラグインAdvanced Scene Switcherを利用して配信を自動化する
続いてはAdvanced Scene Switcher(高機能シーンスイッチャー)を使った配信の自動化を検証してみます。
Advanced Scene Switcherのインストール
まずはOBS Studioにプラグイン Advanced Scene Switcherをインストールします。
Advanced Scene SwitcherのWiki、Installationのページも参考にしながら進めました。
OBS Studio PluginsのAdvanced Scene Switcherのページ、右上の[Go to download]ボタンを押下しGitHubのReleasesページに進みます。
現時点での最新版、1.31.0をダウンロードします。今回はmacOSのパッケージ版(.pkg)を利用しました。advanced-scene-switcher-1.31.0-macos-universal.pkgですね。
パッケージファイルをダウンロード後、SHA-256のハッシュ値がsha256:a52cad3773c1bc5c3b80f3e756fd61ee40ec5c05eab83b0025d444e0f03a0c23
と一致することを確認しておきます。
% shasum -a 256 /path/to/advanced-scene-switcher-1.31.0-macos-universal.pkg
a52cad3773c1bc5c3b80f3e756fd61ee40ec5c05eab83b0025d444e0f03a0c23 /path/to/advanced-scene-switcher-1.31.0-macos-universal.pkg
ダウンロードしたファイルadvanced-scene-switcher-1.31.0-macos-universal.pkg
をダブルクリックで開こうとすると、「開発元が未確認のため開けません。」というエラーが出現します。
WikiのInstallationの項目にも記載がありますが、Finderで右クリックから「開く」を選択してadvanced-scene-switcher-1.31.0-macos-universal.pkg
を開き直します。今度は「開発元を検証できません。開いてもよろしいですか?」という内容に変わりますね。内容をきちんと確認の上、[開く]ボタンを押下して開きます。
パッケージを開くとインストーラが起動しますので、インストーラに従いインストールを完了させます。
なお、インストール先は~/Library/Application Support/obs-studio/plugins
となるようでした。
% ls -la ~/Library/Application\ Support/obs-studio/plugins
total 0
drwxr-xr-x 3 user staff 96 7 18 01:07 ./
drwxr-xr-x@ 10 user staff 320 7 23 18:08 ../
drwxr-xr-x 3 user staff 96 7 18 01:07 advanced-scene-switcher.plugin/
Advanced Scene Switcherのインストール完了後、OBS Studioを起動します。メニューのツールから高性能シーンスイッチャーを選択しましょう。初回起動のダイアログが出現し、[OK]ボタンを押下すると高性能シーンスイッチャーの「マクロ」タブが表示されます。
ここで、指定時刻になったら自動で配信を開始、もしくは停止するマクロを設定していけば良さそうですね。設定前にあらかじめ「全般」タブでプラグインが実行中であることを確認しておきましょう。
Advanced Scene Switcherのマクロの追加と自動配信の確認
Advanced Scene Switcherのインストールならびに設定画面、そしてプラグインが実行中であることを確認しました。それでは実際にこのAdvanced Scene Switcherに自動で配信を開始、停止するマクロを追加していきます。
「マクロ」タブの左側の[+]ボタンで名前を指定してマクロを追加できます。(スクリーンショットの(1))マクロの追加後、マクロ編集画面の上段で[+]ボタンを押下してマクロ条件を定義、このマクロ条件に対するマクロアクションを下段の[+]で追加します。(スクリーンショットの(2)と(3))
まずはストリーム開始用のマクロです、start-obs-stream
という名称にしました。マクロ条件としてIf
、日付条件
を選択し、On いつでも
(曜日を指定しない)のAt
で時刻を指定します。今回は例としてAt
19:00:00
と指定してみました。この条件、つまり指定した日付時刻となったら実行されるマクロアクションについては、配信
の配信開始
を設定します。
続いてストリーム停止用のマクロです、stop-obs-stream
という名称にし、start-obs-stream
と同様に日付条件を指定します。時刻はstart-obs-streamマクロ実行後3分経過の19:03:00
としました。マクロアクションは配信
の配信の停止
を設定します。
これら2つのマクロを設定後、高機能シーンスイッチャーの画面自体は閉じておきます。OBS Studio自体は起動したままです。
またマクロで指定した時刻になる前にMediaLiveはStartさせ、Runningの状態にしておきます。
19:00になるとOBS Studioが自動的に配信を開始しました。MediaLive側にも映像が送信されていますね。
19:03直前まではこのまま配信を続けますが、19:03を回ると自動で配信が停止します。
OBS Studioからの配信停止を確認後にMediaLiveのChannelを停止して、出力されたアーカイブファイルを確認してみます。アーカイブ動画ファイルのの先頭の時刻は19:00:01.4
、確認できた最後の映像の時刻は19:02:59.9
でした。
Advanced Scene Switcherを利用した場合、あらかじめOBS Studio自体は起動しておき指定した時刻になったら配信が開始されます。OBS Studioをコマンドラインから操作するよりも配信のタイムラグはいくぶん少なるという結果になりました。(指定した時刻になったらOBS Studioを起動するコマンドラインからの操作の場合は、特にアーカイブの先頭時刻で4秒ほどのタイムラグが発生していました。)
いずれにせよ、多少のタイムラグは発生しつつも、Advanced Scene Switcherを利用した配信の開始ならびに停止の自動化ができることが確認できましたね。
なお、Advanced Scene Switcherのマクロアクションでは録画開始や録画停止など、録画に関するアクションも指定可能です。Advanced Scene Switcherを利用する方法でも、録画の自動化ができそうですね。
まとめ
OBS Studioを使って指定した時刻になったら自動でストリーミング(配信)を開始ならびに停止する方法を2つ、確認してみました。
OBS StudioはGUIでの操作のほか、コマンドラインで起動したり、起動の際にストリーミングやレコーディングを開始したりすることが可能です。コマンドライン操作でのストリーミングの停止はできませんが、設定によりダイアログなどを出現させずにOBS Studioを終了させることができます。これらコマンドラインの操作をスケジュール実行することが1つ目の方法でした。
2つ目の方法としてAdvanced Scene Switcher(高性能シーンスイッチャー)というOBS Studioのプラグインを利用したストリーミングの自動化を確認しました。指定した条件のタイミングで配信の開始・停止や録画操作のほか、シーンの切り替えなど多種多様なアクションが可能なプラグインです。今回扱ったストリーミングの自動化のほかにもいろいろな使い方ができそうですね。
筆者はこれまであまりOBS Studioの深いところには触らず、動画配信の検証用としてシンプルにOBS Studioを使ってきたのですが、多様な使い方ができ、OBS Studioが非常にパワフルなツールであることを実感したしだいです。機会があればほかの機能も使ってみたと思いました。