obsws-python(OBS WebSocket v5準拠)を操作してテキストソースを変更する方法を解説します。
その他にも知りたい方はコチラの記事を見てください。
前提条件、環境
- OBS:28.0以上
- Python:3.9以上
- obsws-python
- OBS WebSocketの接続設定
テキストソースを変更
OBSでテキストソースを変更するコードは以下になります。
- inputNameにテキストソース名を指定
- inputSettingに変更したい内容を指定
# シーンアイテムのテキストを変更
ws.base_client.req("SetInputSettings",
{"inputName":source_name,
"inputSettings":{"text":"テキスト更新"},
"overlay":True
}
)
OBS WebSocketの接続を含めた一通りのコードは以下となります。
# OBS WebSocketのインポート
import obsws_python as obsws
# OBS接続情報
host = "localhost"
port = 4455
password = "**********"
# シーン名とソース名の指定
scene_name = ""
source_name = "テキストメッセージ"
# OBS WebSocketクライアントの作成
ws = obsws.ReqClient(host=host, port=port, password=password)
# シーンアイテムのテキストを変更
ws.base_client.req("SetInputSettings",
{"inputName":source_name,
"inputSettings":{"text":"テキスト更新"},
"overlay":True
}
)
# OBSから切断
ws.disconnect()
サンプルコード
テキストを1秒ごとに変更するサンプルです。
実際のサンプルは以下となります。
# OBS WebSocketのインポート
import obsws_python as obsws
from time import sleep
# OBS接続情報
host = "localhost"
port = 4455
password = "**********"
# シーン名とソース名の指定
source_name = "テキストメッセージ"
# テキストメッセージを指定
messages = ["こんにちは", "テキストを更新する","プログラムです"]
# OBS WebSocketクライアントの作成
ws = obsws.ReqClient(host=host, port=port, password=password)
# メッセージを順番に更新
for msg in messages:
# シーンアイテムのテキストを変更
ws.base_client.req("SetInputSettings",
{"inputName":source_name,
"inputSettings":{"text":msg},
"overlay":True
}
)
sleep(1)
# OBSから切断
ws.disconnect()
公式ドキュメント
シーンアイテムを変更する公式ドキュメントは以下にあります。

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

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


コメント