obsws-python(OBS WebSocket v5準拠)を操作してシーンアイテムを作成を解説します。
その他にも知りたい方はコチラの記事を見てください。
前提条件、環境
- OBS:28.0以上
- Python:3.9以上
- obsws-python
- OBS WebSocketの接続設定
シーンアイテム(テキスト)の作成
OBSでシーンアイテムを作成するコードは以下になります。
- sceneNameにシーン名を指定
- inputNameにシーンアイテム名を指定
- inputKindに作成するアイテム種類(text_gdiplus_v3ならテキストソース)を指定
- inputSettingsにシーンアイテムの属性を指定
# シーンアイテム(テキスト)を作成
wres = ws.base_client.req("CreateInput",
{"sceneName":"ナニカツクル",
"inputName":"テキストメッセージ2",
"inputKind":"text_gdiplus_v3",
"inputSettings":{'text':'新しいテキストソース','font':{'size':128}},
"sceneItemEnabled":True
}
)
OBS WebSocketの接続を含めた一通りのコードは以下となります。
# OBS WebSocketのインポート
import obsws_python as obsws
# OBS接続情報
host = "localhost"
port = 4455
password = "**********"
# OBS WebSocketクライアントの作成
ws = obsws.ReqClient(host=host, port=port, password=password)
res = ws.base_client.req("CreateInput",
{"sceneName":"ナニカツクル",
"inputName":"テキストメッセージ2",
"inputKind":"text_gdiplus_v3",
"inputSettings":{'text':'新しいテキストソース','font':{'size':128}},
"sceneItemEnabled":True
}
)
# OBSから切断
ws.disconnect()
シーンアイテム(画像)の作成
基本的にはテキストソースと同じですが、inputKindとinputSettingsが異なります。
- inputKindに「image_source」を指定
- inputSettingsに画像ファイルのパスを指定
# OBS WebSocketのインポート
import obsws_python as obsws
# OBS接続情報
host = "localhost"
port = 4455
password = "**********"
# OBS WebSocketクライアントの作成
ws = obsws.ReqClient(host=host, port=port, password=password)
res = ws.base_client.req("CreateInput",
{"sceneName":"ナニカツクル",
"inputName":"イメージソース",
"inputKind":"image_source",
"inputSettings":{"file":"画像のフルパス"},
"sceneItemEnabled":True
}
)
# OBSから切断
ws.disconnect()
公式ドキュメント
シーンアイテムを作成する公式ドキュメントは以下にあります。

シーンアイテムの作成に成功すると以下のレスポンスが返ってきます。
{'requestId': 395, 'requestStatus': {'code': 100, 'result': True}, 'requestType': 'CreateInput', 'responseData': {'inputUuid': 'e7368384-cae5-4555-893e-4c6142a8deb0', 'sceneItemId': 10}}
レスポンスデータからシーンアイテムIDを取得する場合は以下です。
scene_item_id = res["responseData"]["sceneItemId"]
シーンアイテムの作成に失敗した場合は以下のようなレスポンスが返ってきます。
{'requestId': 306, 'requestStatus': {'code': 601, 'comment': 'A source already exists by that input name.', 'result': False}, 'requestType': 'CreateInput'}
resultに成否が返却されるので、成否を判定する場合は以下のような判定で確認できます。
if res["requestStatus"]["result"] == True:
print("シーンアイテムの作成に成功しました。")
else:
print("シーンアイテムの作成に失敗しました。")


コメント