OBSをPythonから制御してみる

2023年6月17日

はじめに

最近Youtubeで配信を始めて、配信ソフトとしてOBSを使用しているまりもです。
こちらのチャンネルで配信していますので、見に来てもらえると嬉しいです。

配信している時に、PythonからOBSを触れたら便利だなぁと思うことが多々あり、
ある程度触れるようになったので、備忘録としてまとめておきます。

準備

obs-websocketのインストール

まず、OBSを外部から制御する上で欠かせないobs-websocket(プラグイン)を導入します。
これを導入することにより、WebSocketを用いた通信でOBSの様々な制御が行えるようになります。

私が導入した時点ではver4.9.1が最新リリースで、ver5.0.0-alpha3がプレリリースとしての最新でしたが、基本的に最新リリース(Latest)のもの(ここでは4.9.1)を導入してください。
※プレリリース版で実装された内容によってはobs-websocket-pyと嚙み合わずエラーになります。

obs-websocket-pyのインストール

インストールはいつものやつです。

pip install obs-websocket-py

OBSのWebSocketサーバー設定

obs-websocketのインストールが完了していると、OBSでツール>WebSocketサーバー設定という項目が追加されているはずです。
こちらからサーバーポートとパスワードを設定し、OKボタンを押下します。

ドキュメント

こちらを見るのが一番だと思います。

サンプル

公式サンプル(シーン変更)の他に使いそうな内容のサンプルをあげておきます。
気が向いた時に徐々に追加していくかもです。

テキスト変更

テキスト(GDI+)のテキスト変更サンプルです。
アクティブシーンのソース名称を用いて、テキストを変更する動きです。
※SetTextGDIPlusPropertiesを使用する方が適切かと思いますが、とりあえずテキスト変更程度なら下記でも動きます。

from obswebsocket import obsws, requests

#テキスト変更関数
def obsTextChange(source_name: str, strtext: str):
    ws.call(requests.SetSourceSettings(source_name, {"text": strtext}))

host = "localhost"
port = 4444
password = "設定したパスワード"

ws = obsws(host, port, password)
ws.connect()

obsTextChange("変更したいソース名称", "変更後文字列")

ws.disconnect()

OBS,Python,プログラム

Posted by marimo