URLhttps://learnscript.net/zh-hant/obs-python-scripting/sources/audio-and-video/
    複製連結移至說明  範例

    如何操作 OBS 音訊來源,視訊來源,媒體來源

    閱讀 17:00·字數 5104·發佈 
    Youtube 頻道
    訂閱 375

    先決條件

    閱讀本節的先決條件是對 OBS 來源有所掌握,你可以檢視如何操作 OBS 來源?來源物件介紹一節來了解相關資訊。

    OBS 音訊來源和視訊來源

    OBS 的音訊來源可用於輸出的音訊算繪,這包含擷取音訊輸入,擷取音訊輸出,視訊擷取裝置等。OBS 的視訊來源可用於輸出的視訊算繪,比如視訊擷取裝置。Python 腳本可通過obspython模組提供的函式,來控製音訊來源和視訊來源。

    取得和設定 OBS 音訊來源的音量

    音訊來源的音量決定了該音訊在輸出中的聲音大小,在 Python 腳本中,音量可表示為一個取值在01之間的小數,數值越大音量越高。

    obspython模組的obs_source_get_volumeobs_source_set_volume函式,可用於取得和設定音訊來源的音量。

    obs_source_get_volume(source)
    obs_source_set_volume(source, volume)

    source 參數

    source參數為需要取得或設定音量的音訊來源物件。

    volume 參數

    volume參數為希望設定的音量,有效取值在01之間。

    在按鈕的回呼函式test中,我們設定了名稱為OS的擷取音訊輸入的音量。

    audio_and_video.py
    # 匯入模組 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_mutedobs_source_set_muted函式,可用於取得和設定音訊來源的靜音狀態。

    obs_source_muted(source)
    obs_source_set_muted(source, muted)

    source 參數

    source參數為需要取得或設定靜音狀態的音訊來源物件。

    muted 參數

    muted參數為希望設定的靜音狀態,True表示靜音。

    在下面的程式碼中,我們取消了擷取音訊輸入的靜音狀態。

    audio_and_video.py
    def test(props, prop):
    	# …
    	# 如果擷取音訊輸入處於靜音狀態,則取消該狀態
    	if obs.obs_source_muted(audio):
    		obs.obs_source_set_muted(audio, False)
    	# …

    取得和設定 OBS 音訊來源的音訊監測方式

    音訊來源的音訊監測方式,用於控製使用者如何監測音訊來源,他擁有以下三個選項。

    關閉監測,表示使用者不會聽到音訊來源的聲音,但該音訊來源依然會被算繪至輸出,這意味著觀眾可以聽到或錄製的視訊中包含。僅監測,與關閉監測相反,使用者可以聽到音訊來源的聲音,但該音訊來源不會算繪至輸出。監測並輸出,表示音訊來源的聲音不但可以被使用者聽到,還將算繪輸出。

    obspython模組的obs_source_get_monitoring_typeobs_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表示監測並輸出。

    audio_and_video.py
    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_mixersobs_source_set_audio_mixers函式,可用於取得和設定音訊來源的混合音軌。

    obs_source_get_audio_mixers(source)
    obs_source_set_audio_mixers(source, mixers)

    source 參數

    source參數為需要取得或設定音軌的音訊來源物件。

    mixers 參數

    mixers參數為希望設定的混合音軌或音軌組合。

    在下面的程式碼中,我們判斷擷取音訊輸入是否輸出至了第 1 條音軌,如果沒有則新增。

    audio_and_video.py
    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_enabledobs_source_enable_push_to_muteobs_source_push_to_talk_enabledobs_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_delayobs_source_set_push_to_mute_delayobs_source_get_push_to_talk_delayobs_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參數為按住靜音或講話的延時,以毫秒為單位。

    audio_and_video.py
    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 腳本中調整左右聲道的平衡,其有效取值在01之間,數值越大越趨向於右聲道,數值越小越趨向於左聲道,0.5表示左右聲道處於平衡。

    obspython模組的obs_source_get_balance_valueobs_source_set_balance_value函式,可用於取得和設定音訊來源的聲道平衡。

    obs_source_get_balance_value(source)
    obs_source_set_balance_value(source, balance)

    source 參數

    source參數為需要取得或設定聲道平衡的音訊來源物件。

    balance 參數

    balance參數為希望設定的平衡狀態,有效取值在01之間。

    取得 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_modeobs_source_set_deinterlace_mode函式,可用於取得和設定視訊來源的循序掃描模式。循序掃描模式可以是如下obspython模組變數之一,OBS_DEINTERLACE_MODE_DISABLEOBS_DEINTERLACE_MODE_DISCARDOBS_DEINTERLACE_MODE_RETROOBS_DEINTERLACE_MODE_BLENDOBS_DEINTERLACE_MODE_BLEND_2XOBS_DEINTERLACE_MODE_LINEAROBS_DEINTERLACE_MODE_LINEAR_2XOBS_DEINTERLACE_MODE_YADIFOBS_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_orderobs_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_timeobs_source_media_set_time函式,可用於取得和設定媒體來源的目前時間,也就是音訊或視訊檔案的目前播放位置,以毫秒為單位,如果沒有有效的媒體檔案,則會傳回0

    obs_source_media_get_time(source)
    obs_source_media_set_time(source, ms)

    source 參數

    source參數為需要取得或設定目前時間的媒體來源物件。

    ms 參數

    ms參數為希望設定的目前時間,以毫秒為單位。

    下面的程式碼,將取得媒體來源Media的持續時間和目前時間,從而計算播放進度。

    audio_and_video.py
    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_NONEOBS_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參數為需要取得狀態的媒體來源物件。

    在下面的程式碼中,如果媒體來源的狀態為正在播放,那麽將暫停媒體來源,如果媒體來源的狀態為已暫停,那麽將播放媒體來源,如果媒體來源的狀態為已停止或已播放完畢,那麽將重新播放媒體來源。

    audio_and_video.py
    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)
    	# …

    原始碼

    audio_and_video.py·codebeatme/obs-python-scripting·GitHub