OBSでソースの表示非表示を自動化する方法

テキストの表示・非表示自動化のアイキャッチ OBS
⚠ OBS WebSocket v4 に関する注意

OBS WebSocket v4 は旧バージョンであり、OBS 28 以降では v5 が標準です。
v4 を使用する場合は互換性に注意してください。
最新の仕様については
OBS WebSocket v5 の解説記事
を参照してください。

OBSをPythonから操作してソースを表示・非表示する方法を解説します。

その他にも知りたい方はコチラの記事を見てください。

前提条件、環境

ソースを表示・非表示するコード

OBSでソースを表示・非表示するためには、SceneItemIDを指定して行う必要があります。
そのために必要な情報は2つです。

  • シーン名:テスト用
  • ソース名:テキストメッセージ

上記のシーン名とソース名をもとにソースの表示・非表示するコードは以下になります。

# シーンアイテムIDの取得
sceneItemId = ws.call(
    obs_req.GetSceneItemId(
        sceneName="テスト用",   # シーン名を指定
        sourceName="テキストメッセージ") # ソース名を指定
    ).datain['sceneItemId']
# シーンアイテムの有効化
ws.call(obs_req.SetSceneItemEnabled(sceneName="テスト用", sceneItemId=sceneItemId, sceneItemEnabled=True))
# シーンアイテムの無効化
ws.call(obs_req.SetSceneItemEnabled(sceneName="テスト用", sceneItemId=sceneItemId, sceneItemEnabled=False))

表示・非表示のサンプル

OBS WebSocketの接続を含めた一通りのコードは以下となります。

# 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()

# シーンアイテムIDの取得
sceneItemId = ws.call(
    obs_req.GetSceneItemId(
        sceneName=scene_name,   # シーン名を指定
        sourceName=source_name) # ソース名を指定
    ).datain['sceneItemId']

# シーンアイテムの有効化
ws.call(obs_req.SetSceneItemEnabled(sceneName=scene_name, sceneItemId=sceneItemId, sceneItemEnabled=True))

# シーンアイテムの無効化
ws.call(obs_req.SetSceneItemEnabled(sceneName=scene_name, sceneItemId=sceneItemId, sceneItemEnabled=False))

# OBSから切断
ws.disconnect()

動作イメージ

実際にソースを表示・非表示した場合は以下のような感じになります。

テキスト表示・非表示のサンプル動画

録画開始から5秒ごとに表示と非表示を繰り返すサンプルとなっています。
実際のサンプルは以下となります。
参考にする際は終了条件(whileを抜ける契機)を見直してください。

# OBS WebSocketのインポート
from obswebsocket import obsws,requests as obs_req
from time import sleep

# OBS接続情報
host = "localhost"
port = 4455
password = "**********"

# シーン名とソース名の指定
scene_name = "テスト用"
source_name = "テキストメッセージ"

# OBS WebSocketクライアントの作成
ws = obsws(host,port,password)

# OBSに接続
ws.connect()

# シーンアイテムIDの取得
sceneItemId = ws.call(
    obs_req.GetSceneItemId(
        sceneName=scene_name,   # シーン名を指定
        sourceName=source_name) # ソース名を指定
    ).datain['sceneItemId']

while True:
    # 録画状態の取得
    record_flg = ws.call(obs_req.GetRecordStatus())

    if record_flg.datain['outputActive']:
        sleep(5)  # 5秒待機

        # シーンアイテムの有効化
        ws.call(obs_req.SetSceneItemEnabled(sceneName=scene_name, sceneItemId=sceneItemId, sceneItemEnabled=True))

        sleep(5)  # 5秒待機

        # シーンアイテムの無効化
        ws.call(obs_req.SetSceneItemEnabled(sceneName=scene_name, sceneItemId=sceneItemId, sceneItemEnabled=False))


# OBSから切断
ws.disconnect()

公式ドキュメント

シーンアイテムID取得、シーンアイテム有効・無効化の公式ドキュメントは以下にあります。

コメント

タイトルとURLをコピーしました