⚠ OBS WebSocket v4 に関する注意
OBS WebSocket v4 は旧バージョンであり、OBS 28 以降では v5 が標準です。
v4 を使用する場合は互換性に注意してください。
最新の仕様については
OBS WebSocket v5 の解説記事
を参照してください。
OBSをPythonから操作してテキストソースを変更する方法を解説します。
その他にも知りたい方はコチラの記事を見てください。
前提条件、環境
- OBS:28.0以上
- Python:3.9以上
- obs-websocket-py
- OBS WebSocketの接続設定
テキストソースを変更
OBSでテキストソースを変更するコードは以下になります。
- inputNameにテキストソース名を指定
- inputSettingに変更したい内容を指定
# シーンアイテムのテキストを変更
ws.call(obs_req.SetInputSettings(
inputName="テキストメッセージ",
inputSettings={"text":"テキスト更新"},
overlay=True
)
)
OBS WebSocketの接続を含めた一通りのコードは以下となります。
# OBS WebSocketのインポート
from obswebsocket import obsws,requests as obs_req
# OBS接続情報
host = "localhost"
port = 4455
password = "**********"
# シーン名とソース名の指定
source_name = "テキストメッセージ"
# OBS WebSocketクライアントの作成
ws = obsws(host,port,password)
# OBSに接続
ws.connect()
# シーンアイテムのテキストを変更
ws.call(obs_req.SetInputSettings(
inputName=source_name,
inputSettings={"text":"テキスト更新"},
overlay=True
)
)
# OBSから切断
ws.disconnect()
動作イメージ
テキストを1秒ごとに変更するサンプルです。
実際のサンプルは以下となります。
# OBS WebSocketのインポート
from obswebsocket import obsws,requests as obs_req
from time import sleep
# OBS接続情報
host = "localhost"
port = 4455
password = "**********"
# シーン名とソース名の指定
source_name = "テキストメッセージ"
# テキストメッセージを指定
messages = ["こんにちは", "テキストを更新する","プログラムです"]
# OBS WebSocketクライアントの作成
ws = obsws(host,port,password)
# OBSに接続
ws.connect()
# メッセージを順番に更新
for msg in messages:
# シーンアイテムのテキストを変更
ws.call(obs_req.SetInputSettings(
inputName=source_name,
inputSettings={"text":msg},
overlay=True
)
)
sleep(1)
# OBSから切断
ws.disconnect()
公式ドキュメント
シーンアイテムを変更する公式ドキュメントは以下にあります。

他の属性を変更する方法
他の属性も変更したい場合はシーンアイテム情報を取得するGetInputSettingsで設定できる属性を確認し、SetInputSettingsに指定することで可能です。

GetInputSettingsで変更したいソースの属性を確認し、その属性をSetInputSettingに指定することで変更可能です。
以下は留意事項とサンプルコードです。
留意事項
GetInputSettingsで取得できる情報はソースの設定がデフォルトだとほとんど表示されないようです。
なので、OBS上で変更したい属性を更新したのちに確認するとうまく表示ができます。
例)OBS上でフォントサイズ変更後にGetInputSettingで確認する
以下がデフォルトの表示です。
<GetInputSettings request ({'inputName': 'テキストメッセージ'}) called: success ({'inputKind': 'text_gdiplus_v3', 'inputSettings': {'text': 'プログラムです'}})>
以下がフォントサイズ変更後の表示です。
<GetInputSettings request ({'inputName': 'テキストメッセージ'}) called: success ({'inputKind': 'text_gdiplus_v3', 'inputSettings': {'font': {'face': 'Arial', 'flags': 0, 'size': 72, 'style': 'Regular'}, 'text': 'プログラムです'}})>
サンプルコード
テキストソースの文字サイズを変更するサンプルコードです。
文字サイズ以外にもフォントやスタイルも変更できます。
# OBS WebSocketのインポート
from obswebsocket import obsws,requests as obs_req
# OBS接続情報
host = "localhost"
port = 4455
password = "**********"
# シーン名とソース名の指定
scene_name = "テスト用"
source_name = "テキストメッセージ"
# OBS WebSocketクライアントの作成
ws = obsws(host,port,password)
# OBSに接続
ws.connect()
# シーンアイテムの情報を取得
settings = ws.call(obs_req.GetInputSettings(
inputName=source_name,
)
)
# 取得した情報を表示
print(settings)
# フォントサイズを変更
ws.call(obs_req.SetInputSettings(
inputName=source_name,
inputSettings={'font':{'size':256}},
overlay=True
)
)
# OBSから切断
ws.disconnect()


コメント