OBS Studio オーディオ機能調査レポート
OBS Studioのオーディオ機能と、obs-websocket v5によるプログラム制御の包括的な調査。
1. オーディオソースの種類
- マイク、ウェブカメラマイク、ライン入力、キャプチャーカードの音声入力をキャプチャ
- シーンごとにローカルなソースとして追加可能
- Settings → Audio でグローバル入力デバイスとしても設定可能(全シーンに適用)
Audio Output Capture(音声出力キャプチャ)
- スピーカー、ヘッドセット、モニターなどの出力デバイスの音声をキャプチャ
- 「Desktop Audio」としてグローバルに設定するか、シーンローカルで追加可能
- メディアソース(動画・音声ファイル)に含まれる音声
- メディアソース自体がオーディオ出力を持つ
Browser Source Audio(ブラウザソース音声)
- ブラウザソースで再生される音声(Web Audio API、HTML5
<audio>等)
- 「Control audio via OBS」チェックボックスで、ブラウザ音声をOBSミキサーにルーティング可能
- obs-websocket では
reroute_audio: true で設定
- 有効にするとミキサーに表示され、音量・モニタリング・トラック割り当てが可能
Application Audio Capture(アプリケーション音声キャプチャ)
- OBS Studio 28以降、Windows 10 (Version 2004+) / Windows 11で利用可能
- 特定のアプリケーションの音声のみを個別にキャプチャ
- アプリごとに独立したオーディオソースとして追加可能
- ウィンドウが不要(音を出していれば良い)
- OBS 30.1以降: Window Capture / Game Capture にも音声キャプチャオプション追加
2. オーディオミキサー
チャンネル表示
- モノラル: 1本のメーター(自動的に左右両方にルーティング)
- ステレオ: 2本のメーター(左・右)
- サラウンド: Settings → Audio → Channels がステレオ(デフォルト)の場合、自動的にステレオにミックスダウン
音量制御
- フェーダースライダー: 音量をdB単位で調整
- ミュートボタン: 該当ソースの音声を完全にミュート
- 音量は乗数(mul: 0.0〜20.0)またはdB値(-100.0〜26.0)で指定可能
オーディオモニタリングタイプ
| モニタリングタイプ |
配信/録画出力 |
モニタリングデバイス |
用途 |
| Monitor Off |
聞こえる |
聞こえない |
通常のソース(デフォルト) |
| Monitor Only (mute output) |
聞こえない |
聞こえる |
自分だけ確認したい音声 |
| Monitor and Output |
聞こえる |
聞こえる |
自分も視聴者も聞く音声 |
obs-websocket でのmonitorType値:
- OBS_MONITORING_TYPE_NONE
- OBS_MONITORING_TYPE_MONITOR_ONLY
- OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT
オーディオトラック(1〜6)
- Track 1: Simple モードのストリーミング・録画で使用(デフォルト)
- Track 1〜6: Advanced モードで全トラック利用可能
- Edit → Advanced Audio Properties で各ソースのトラック割り当てを設定
- 各ソースを0個以上のトラックに割り当て可能
- 用途例: Track 1=配信用ミックス、Track 2=マイクのみ、Track 3=ゲーム音のみ
3. 高度なオーディオプロパティ(Advanced Audio Properties)
Audio Mixer の歯車アイコンまたは右クリックからアクセス。全ソースの一覧表で以下を設定:
| 設定項目 |
説明 |
obs-websocket対応 |
| Volume (%) |
音量パーセンテージ |
SetInputVolume |
| Balance |
左右バランス(0.0=左, 0.5=中央, 1.0=右) |
SetInputAudioBalance |
| Sync Offset (ms) |
音声同期オフセット(ミリ秒) |
SetInputAudioSyncOffset |
| Audio Monitoring |
モニタリングタイプ(上記3種) |
SetInputAudioMonitorType |
| Tracks 1-6 |
各トラックへの出力On/Off |
SetInputAudioTracks |
4. オーディオフィルター
内蔵フィルター一覧
| フィルター |
filterKind(内部ID) |
機能 |
| Gain |
gain_filter |
入力信号の音量を増減 |
| Noise Suppression |
noise_suppress_filter_v2 |
背景ノイズ除去(Speex / RNNoise) |
| Noise Gate |
noise_gate_filter |
閾値以下の音声を自動ミュート |
| Compressor |
compressor_filter |
大きい音を圧縮して均一化 |
| Limiter |
limiter_filter |
0dB超えを防止するハードリミッター |
| Expander |
expander_filter |
ノイズゲートの高品質版(段階的に減衰) |
| Upward Compressor |
upward_compressor_filter |
小さい音を持ち上げる |
| Invert Polarity |
invert_polarity_filter |
位相を反転 |
| 3-Band EQ |
eq_filter |
3バンドイコライザー |
| VST 2.x Plugin |
vst_filter |
外部VSTプラグイン(ReaPlugs等) |
推奨フィルター順序
- Noise Gate / Expander
- Noise Suppression
- Compressor
- Limiter
Noise Suppressionの方式
- Speex: 低CPU使用率、低品質
- RNNoise: 高品質、CPU使用率高め(機械学習ベース)
5. オーディオルーティング(音声の流れ)
[音声ソース] → [ソースフィルター] → [音量/ミュート] → [トラック割り当て]
↓
[Track 1-6]
↓
[Output (配信/録画)]
[Monitor (モニタリングデバイス)]
- 各ソースは独立したフィルターチェーンを持つ
- フィルター後の音声がミキサーで音量調整される
- トラック割り当てにより配信・録画の出力先を制御
- モニタリング設定により自分への音声ルーティングを制御
6. ブラウザソース音声の詳細
reroute_audio 設定
- ブラウザソースのプロパティ「Control audio via OBS」(
reroute_audio: true)
- 有効にすると:
- ブラウザ内の音声がOBSのオーディオパイプラインに入る
- ミキサーに表示される
- 音量・モニタリング・フィルター・トラック割り当てが可能
- 無効の場合: 音声はOBSを介さずシステムのデフォルト出力に直接流れる
重要な注意点
reroute_audio: true のみでは配信に音声が乗らない場合がある
- Advanced Audio Properties でモニタリングを
Monitor and Output に設定する必要がある場合あり
- obs-websocketでの設定:
# ブラウザソース作成時
input_settings = {
"url": "http://...",
"reroute_audio": True
}
# モニタリング設定
SetInputAudioMonitorType(inputName="...", monitorType="OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT")
7. obs-websocket v5 オーディオ関連API
| リクエスト |
パラメータ |
レスポンス |
説明 |
GetInputMute |
inputName or inputUuid |
inputMuted (Boolean) |
ミュート状態取得 |
SetInputMute |
inputName, inputMuted (Boolean) |
- |
ミュート状態設定 |
ToggleInputMute |
inputName |
inputMuted (Boolean) |
ミュートトグル |
GetInputVolume |
inputName |
inputVolumeMul (Number), inputVolumeDb (Number) |
音量取得 |
SetInputVolume |
inputName, inputVolumeMul or inputVolumeDb |
- |
音量設定 |
GetInputAudioBalance |
inputName |
inputAudioBalance (Number) |
バランス取得 |
SetInputAudioBalance |
inputName, inputAudioBalance (Number, 0.0-1.0) |
- |
バランス設定 |
GetInputAudioSyncOffset |
inputName |
inputAudioSyncOffset (Number) |
同期オフセット取得 |
SetInputAudioSyncOffset |
inputName, inputAudioSyncOffset (Number, ms) |
- |
同期オフセット設定 |
GetInputAudioMonitorType |
inputName |
monitorType (String) |
モニタリングタイプ取得 |
SetInputAudioMonitorType |
inputName, monitorType (String) |
- |
モニタリングタイプ設定 |
GetInputAudioTracks |
inputName |
inputAudioTracks (Object) |
トラック割り当て取得 |
SetInputAudioTracks |
inputName, inputAudioTracks (Object) |
- |
トラック割り当て設定 |
注意: すべてのリクエストで inputName (String) の代わりに inputUuid (String) も使用可能。
Source Filter Requests(ソースフィルター操作)
| リクエスト |
パラメータ |
レスポンス |
説明 |
GetSourceFilterKindList |
- |
kinds (Array\<String>) |
利用可能なフィルター種類一覧 |
GetSourceFilterList |
sourceName |
filters (Array\<Object>) |
ソースのフィルター一覧 |
GetSourceFilterDefaultSettings |
filterKind |
defaultFilterSettings (Object) |
フィルターのデフォルト設定 |
CreateSourceFilter |
sourceName, filterName, filterKind, ?filterSettings, ?filterIndex |
- |
フィルター作成 |
RemoveSourceFilter |
sourceName, filterName |
- |
フィルター削除 |
SetSourceFilterName |
sourceName, oldFilterName, filterName |
- |
フィルター名変更 |
GetSourceFilter |
sourceName, filterName |
filterEnabled, filterIndex, filterKind, filterSettings |
フィルター情報取得 |
SetSourceFilterIndex |
sourceName, filterName, filterIndex |
- |
フィルター順序変更 |
SetSourceFilterSettings |
sourceName, filterName, filterSettings, ?overlay |
- |
フィルター設定変更 |
SetSourceFilterEnabled |
sourceName, filterName, filterEnabled (Boolean) |
- |
フィルター有効/無効 |
Audio Events(オーディオイベント)
| イベント |
データフィールド |
説明 |
InputMuteStateChanged |
inputName, inputUuid, inputMuted |
ミュート状態変化 |
InputVolumeChanged |
inputName, inputUuid, inputVolumeMul, inputVolumeDb |
音量変化 |
InputAudioBalanceChanged |
inputName, inputUuid, inputAudioBalance |
バランス変化 |
InputAudioSyncOffsetChanged |
inputName, inputUuid, inputAudioSyncOffset |
同期オフセット変化 |
InputAudioTracksChanged |
inputName, inputUuid, inputAudioTracks |
トラック割り当て変化 |
InputAudioMonitorTypeChanged |
inputName, inputUuid, monitorType |
モニタリングタイプ変化 |
InputVolumeMeters |
inputs (Array\<Object>) |
全アクティブ入力の音量レベル(50ms間隔、高頻度) |
{
"1": true,
"2": true,
"3": false,
"4": false,
"5": false,
"6": false
}
8. プログラム制御の実用例
ソースの音量をフェードイン/アウト
import asyncio
import obsws_python as obs
# 音量を段階的に変更(フェードイン)
async def fade_in(client, input_name, duration=2.0, steps=20):
for i in range(steps + 1):
vol = i / steps # 0.0 → 1.0
client.set_input_volume(name=input_name, vol_mul=vol)
await asyncio.sleep(duration / steps)
BGMソースにコンプレッサーを追加
client.create_source_filter(
source_name="BGM",
filter_name="Compressor",
filter_kind="compressor_filter",
filter_settings={
"ratio": 4.0,
"threshold": -18.0,
"attack_time": 6,
"release_time": 60,
"output_gain": 0.0
}
)
ブラウザソースの音声を有効化
# ソース作成時にreroute_audioを有効化
client.create_input(
scene_name="Main",
input_name="Overlay",
input_kind="browser_source",
input_settings={
"url": "http://...",
"reroute_audio": True
}
)
# モニタリングタイプを設定
client.set_input_audio_monitor_type(
name="Overlay",
monitor_type="OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT"
)
参考リンク