如何操作 OBS 音訊來源,視訊來源,媒體來源
訂閱 375
先決條件
閱讀本節的先決條件是對 OBS 來源有所掌握,你可以檢視如何操作 OBS 來源?來源物件介紹一節來了解相關資訊。
OBS 音訊來源和視訊來源
OBS 的音訊來源可用於輸出的音訊算繪,這包含擷取音訊輸入,擷取音訊輸出,視訊擷取裝置等。OBS 的視訊來源可用於輸出的視訊算繪,比如視訊擷取裝置。Python 腳本可通過obspython
模組提供的函式,來控製音訊來源和視訊來源。
取得和設定 OBS 音訊來源的音量
音訊來源的音量決定了該音訊在輸出中的聲音大小,在 Python 腳本中,音量可表示為一個取值在0
至1
之間的小數,數值越大音量越高。
obspython
模組的obs_source_get_volume
,obs_source_set_volume
函式,可用於取得和設定音訊來源的音量。
obs_source_get_volume(source)
obs_source_set_volume(source, volume)
- source 參數
source
參數為需要取得或設定音量的音訊來源物件。- volume 參數
volume
參數為希望設定的音量,有效取值在0
到1
之間。
在按鈕的回呼函式test
中,我們設定了名稱為OS
的擷取音訊輸入的音量。
# 匯入模組 obspython
import obspython as obs
def test(props, prop):
# 取得名稱為 OS 的擷取音訊輸入
audio = obs.obs_get_source_by_name('OS')
# 將擷取音訊輸入的音量設定為 0.5
obs.obs_source_set_volume(audio, 0.5)
# 釋放來源物件
obs.obs_source_release(audio)
# 為腳本新增一個用於測試的按鈕,回呼函式為 test
def script_properties():
props = obs.obs_properties_create()
obs.obs_properties_add_button(props, 'test', '測試', test)
return props
取得和設定 OBS 音訊來源是否靜音
當音訊來源處於靜音狀態時,其感官效果與音量為0
類似。
obspython
模組的obs_source_muted
,obs_source_set_muted
函式,可用於取得和設定音訊來源的靜音狀態。
obs_source_muted(source)
obs_source_set_muted(source, muted)
- source 參數
source
參數為需要取得或設定靜音狀態的音訊來源物件。- muted 參數
muted
參數為希望設定的靜音狀態,True
表示靜音。
在下面的程式碼中,我們取消了擷取音訊輸入的靜音狀態。
def test(props, prop):
# …
# 如果擷取音訊輸入處於靜音狀態,則取消該狀態
if obs.obs_source_muted(audio):
obs.obs_source_set_muted(audio, False)
# …
取得和設定 OBS 音訊來源的音訊監測方式
音訊來源的音訊監測方式,用於控製使用者如何監測音訊來源,他擁有以下三個選項。
關閉監測,表示使用者不會聽到音訊來源的聲音,但該音訊來源依然會被算繪至輸出,這意味著觀眾可以聽到或錄製的視訊中包含。僅監測,與關閉監測相反,使用者可以聽到音訊來源的聲音,但該音訊來源不會算繪至輸出。監測並輸出,表示音訊來源的聲音不但可以被使用者聽到,還將算繪輸出。
obspython
模組的obs_source_get_monitoring_type
,obs_source_set_monitoring_type
函式,可用於取得和設定音訊來源的音訊監測方式。
obs_source_get_monitoring_type(source)
obs_source_set_monitoring_type(source, type)
- source 參數
source
參數為需要取得或設定音訊監測方式的音訊來源物件。- type 參數
type
參數為希望設定的音訊監測方式,可使用如下obspython
模組變數進行設定,OBS_MONITORING_TYPE_NONE
表示關閉監測,OBS_MONITORING_TYPE_MONITOR_ONLY
表示僅監測,OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT
表示監測並輸出。
def test(props, prop):
# …
# 關閉對擷取音訊輸入的監測
obs.obs_source_set_monitoring_type(audio, obs.OBS_MONITORING_TYPE_NONE)
# …
取得和設定 OBS 音訊來源的音軌
OBS 支援音訊來源輸出至一個或多個音軌,串流和視訊錄製可以分別選擇其中的某個音軌進行算繪,這使得串流和視訊中的聲音可能是不同的。
音軌的表示是按照 bit 進行的,在 Python 腳本中,你可以采用類似於1<<n
這樣陳述式,來表示第n+1
條音軌(n
大於等於0
,小於等於5
)。如果希望組合音軌,則可以書寫(1<<n)|(1<<m)
,比如(1<<0)|(1<<5)
表示第 1 條音軌與第 6 條音軌的組合。如果要確定是否含有某條音軌,則可以判斷x&(1<<n)
是否與n+1
相等,其中,x
為音軌組合對應的整數,比如195&(1<<1)==2
可以判斷音軌組合195
是否包含第 2 條音軌。
obspython
模組的obs_source_get_audio_mixers
,obs_source_set_audio_mixers
函式,可用於取得和設定音訊來源的混合音軌。
obs_source_get_audio_mixers(source)
obs_source_set_audio_mixers(source, mixers)
- source 參數
source
參數為需要取得或設定音軌的音訊來源物件。- mixers 參數
mixers
參數為希望設定的混合音軌或音軌組合。
在下面的程式碼中,我們判斷擷取音訊輸入是否輸出至了第 1 條音軌,如果沒有則新增。
def test(props, prop):
# …
# 如果擷取音訊輸入沒有輸出至第 1 條音軌,則新增
mixers = obs.obs_source_get_audio_mixers(audio)
if mixers & (1 << 0) != 1:
obs.obs_source_set_audio_mixers(audio, mixers | (1 << 0))
# …
取得和設定 OBS 音訊來源的按住講話和按住靜音
對於 OBS 的音訊來源,按住靜音表示在按住某個鍵時音訊來源將處於靜音狀態,按住講話表示在按住某個鍵時音訊來源將解除靜音狀態。
obspython
模組的obs_source_push_to_mute_enabled
,obs_source_enable_push_to_mute
,obs_source_push_to_talk_enabled
,obs_source_enable_push_to_talk
函式,可用於取得和設定音訊來源是否啟用了按住靜音,按住講話。
obs_source_push_to_mute_enabled(source)
obs_source_enable_push_to_mute(source, enabled)
obs_source_push_to_talk_enabled(source)
obs_source_enable_push_to_talk(source, enabled)
- source 參數
source
參數為需要取得或設定是否啟用按住靜音或講話的音訊來源物件。- enabled 參數
enabled
參數為是否啟用按住靜音或講話,True
表示啟用。
obspython
模組的obs_source_get_push_to_mute_delay
,obs_source_set_push_to_mute_delay
,obs_source_get_push_to_talk_delay
,obs_source_set_push_to_talk_delay
函式,可用於取得和設定音訊來源的按住靜音和按住講話的延遲時間。
obs_source_get_push_to_mute_delay(source)
obs_source_set_push_to_mute_delay(source, delay)
obs_source_get_push_to_talk_delay(source)
obs_source_set_push_to_talk_delay(source, delay)
- source 參數
source
參數為需要取得或設定按住靜音或講話延時的音訊來源物件。- delay 參數
delay
參數為按住靜音或講話的延時,以毫秒為單位。
def test(props, prop):
# …
# 啟用擷取音訊輸入的按住靜音,並設定延遲時間
obs.obs_source_enable_push_to_mute(audio, True)
obs.obs_source_set_push_to_mute_delay(audio, 2000)
# …
取得和設定 OBS 音訊來源的聲道平衡
如果音訊來源支援左右聲道的話,那麽你可以在 Python 腳本中調整左右聲道的平衡,其有效取值在0
至1
之間,數值越大越趨向於右聲道,數值越小越趨向於左聲道,0.5
表示左右聲道處於平衡。
obspython
模組的obs_source_get_balance_value
,obs_source_set_balance_value
函式,可用於取得和設定音訊來源的聲道平衡。
obs_source_get_balance_value(source)
obs_source_set_balance_value(source, balance)
- source 參數
source
參數為需要取得或設定聲道平衡的音訊來源物件。- balance 參數
balance
參數為希望設定的平衡狀態,有效取值在0
到1
之間。
取得 OBS 音訊來源的喇叭布局
obspython
模組的obs_source_get_speaker_layout
函式,可用於取得表示音訊來源喇叭布局的整數。
obs_source_get_speaker_layout(source)
- source 參數
source
參數為需要取得喇叭布局的音訊來源物件。
取得和設定 OBS 視訊來源的相關資訊
obspython
模組的obs_source_get_color_space
函式,可用於取得表示視訊來源色彩空間的整數。
obs_source_get_color_space(source)
- source 參數
source
參數為需要取得色彩空間的視訊來源物件。
obspython
模組的obs_source_get_texcoords_centered
函式,可用於取得視訊來源是否混合紋理。
obs_source_get_texcoords_centered(source)
- source 參數
source
參數為需要取得是否混合紋理的視訊來源物件。
取得和設定 OBS 視訊來源的循序掃描設定
obspython
模組的obs_source_get_deinterlace_mode
,obs_source_set_deinterlace_mode
函式,可用於取得和設定視訊來源的循序掃描模式。循序掃描模式可以是如下obspython
模組變數之一,OBS_DEINTERLACE_MODE_DISABLE
,OBS_DEINTERLACE_MODE_DISCARD
,OBS_DEINTERLACE_MODE_RETRO
,OBS_DEINTERLACE_MODE_BLEND
,OBS_DEINTERLACE_MODE_BLEND_2X
,OBS_DEINTERLACE_MODE_LINEAR
,OBS_DEINTERLACE_MODE_LINEAR_2X
,OBS_DEINTERLACE_MODE_YADIF
,OBS_DEINTERLACE_MODE_YADIF_2X
。
obs_source_get_deinterlace_mode(source)
obs_source_set_deinterlace_mode(source, mode)
- source 參數
source
參數為需要取得或設定循序掃描模式的視訊來源物件。- mode 參數
mode
參數為需要設定的循序掃描模式。
obspython
模組的obs_source_get_deinterlace_field_order
,obs_source_set_deinterlace_field_order
函式,可用於取得視訊來源的循序掃描場順序。循序掃描場順序可以是如下obspython
模組變數之一,OBS_DEINTERLACE_FIELD_ORDER_TOP
(從頂端開始),OBS_DEINTERLACE_FIELD_ORDER_BOTTOM
(從底端開始)。
obs_source_get_deinterlace_field_order(source)
obs_source_set_deinterlace_field_order(source, order)
- source 參數
source
參數為需要取得或設定循序掃描場順序的視訊來源物件。- order 參數
order
參數為需要設定的循序掃描場順序。
Python 腳本中的 OBS 媒體來源
OBS 媒體來源可用於在 OBS 中播放媒體內容,比如音訊或視訊檔案,Python 腳本可以通過obspython
模組提供的函式,來控製媒體來源。
如何指定媒體來源的本機檔案路徑?
obspython
模組並未給出一個針對性的函式,用於設定媒體來源的本機檔案路徑,你需要修改媒體來源的來源設定物件(設定項名稱為local_file
),並使用obs_source_update
函式進行更新,以完成此目標。
來源
關於設定 OBS 來源的設定,你可以檢視取得和設定 OBS 來源的設定一段。
控製 OBS 媒體來源的播放
obspython
模組的obs_source_media_play_pause
函式,可用於播放或暫停媒體來源,obs_source_media_restart
函式,可用於重新播放媒體來源,obs_source_media_stop
函式,可用於停止媒體來源。
obs_source_media_play_pause(source, pause)
obs_source_media_restart(source)
obs_source_media_stop(source)
- source 參數
source
參數為媒體來源物件。- pause 參數
pause
參數為False
時將播放,為True
時將暫停播放。
取得 OBS 媒體來源的持續時間
obspython
模組的obs_source_media_get_duration
函式,可用於取得媒體來源對應媒體檔案的持續時間,也就是音訊或視訊檔案的時長,以毫秒為單位。
obs_source_media_get_duration(source)
- source 參數
source
參數為需要取得持續時間的媒體來源物件。
取得和設定 OBS 媒體來源的目前時間
obspython
模組的obs_source_media_get_time
和obs_source_media_set_time
函式,可用於取得和設定媒體來源的目前時間,也就是音訊或視訊檔案的目前播放位置,以毫秒為單位,如果沒有有效的媒體檔案,則會傳回0
。
obs_source_media_get_time(source)
obs_source_media_set_time(source, ms)
- source 參數
source
參數為需要取得或設定目前時間的媒體來源物件。- ms 參數
ms
參數為希望設定的目前時間,以毫秒為單位。
下面的程式碼,將取得媒體來源Media
的持續時間和目前時間,從而計算播放進度。
def test(props, prop):
# …
# 取得名稱為 Media 的媒體來源
media = obs.obs_get_source_by_name('Media')
# 取得持續時間和目前時間,並計算播放進度
duration = obs.obs_source_media_get_duration(media)
time = obs.obs_source_media_get_time(media)
obs.script_log(obs.LOG_INFO, f'Media 播放進度 {int(time * 100 / duration)}%')
# 釋放來源物件
obs.obs_source_release(media)
取得 OBS 媒體來源的狀態
obspython
模組的obs_source_media_get_state
函式,可用於取得媒體來源的狀態,他可能等於以下某個obspython
模組變數,OBS_MEDIA_STATE_NONE
,OBS_MEDIA_STATE_PLAYING
(正在播放),OBS_MEDIA_STATE_OPENING
(正在開啟),OBS_MEDIA_STATE_BUFFERING
(正在緩沖),OBS_MEDIA_STATE_PAUSED
(已暫停),OBS_MEDIA_STATE_STOPPED
(已停止),OBS_MEDIA_STATE_ENDED
(已播放完畢),OBS_MEDIA_STATE_ERROR
(錯誤)。
obs_source_media_get_state(source)
- source 參數
source
參數為需要取得狀態的媒體來源物件。
在下面的程式碼中,如果媒體來源的狀態為正在播放,那麽將暫停媒體來源,如果媒體來源的狀態為已暫停,那麽將播放媒體來源,如果媒體來源的狀態為已停止或已播放完畢,那麽將重新播放媒體來源。
def test(props, prop):
# …
# 切換媒體來源的各種狀態
state = obs.obs_source_media_get_state(media)
if state == obs.OBS_MEDIA_STATE_PLAYING:
obs.obs_source_media_play_pause(media, True)
elif state == obs.OBS_MEDIA_STATE_PAUSED:
obs.obs_source_media_play_pause(media, False)
elif state == obs.OBS_MEDIA_STATE_STOPPED or state == obs.OBS_MEDIA_STATE_ENDED:
obs.obs_source_media_restart(media)
# …