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

    如何操作 OBS 濾鏡,轉場特效

    閱讀 9:44·字數 2924·更新 
    Youtube 頻道
    訂閱 375

    先決條件

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

    OBS 濾鏡和轉場特效

    OBS 的濾鏡和轉場特效是特殊的來源,OBS 的輸入來源(OBS_SOURCE_TYPE_INPUT)可以擁有濾鏡,以針對輸入來源新增更多的效果,比如,改變色彩,調整聲音等。場景中的場景項可以擁有顯示和隱藏兩種轉場特效,比如,淡入淡出,滑出等。

    如何取得和設定濾鏡和轉場特效的相關屬性?

    obspython模組沒有為每一種濾鏡和轉場特效,提供取得或設定其相關屬性的函式,比如色彩校正中的色彩疊加,你需要修改濾鏡和轉場特效的來源設定物件,並使用obs_source_update函式進行更新,以完成此目標。

    如何建立濾鏡和轉場特效物件?

    濾鏡和轉場特效作為一種來源,可以通過函式obs_source_createobs_source_create_private建立,這需要給出濾鏡或轉場特效對應的來源類型識別碼,比如色彩校正的來源類型識別碼為color_filter,滑出的來源類型識別碼為swipe_transition

    來源

    關於設定 OBS 來源的設定,你可以檢視取得和設定 OBS 來源的設定一段。

    新增和移除輸入來源的 OBS 濾鏡

    當你建立了新的濾鏡後,可通過obspython模組的obs_source_filter_add函式,將其新增至某個輸入來源。對於已經新增的來源,可通過obspython模組的obs_source_filter_remove函式將其移除。

    obs_source_filter_add(source, filter)
    obs_source_filter_remove(source, filter)

    source 參數

    source參數為需要新增或移除濾鏡的輸入來源物件。

    filter 參數

    filter參數為需要新增或移除的濾鏡物件。

    取得輸入來源中的 OBS 濾鏡

    輸入來源可擁有多個濾鏡,obspython模組的obs_source_get_filter_by_name函式,可根據濾鏡名稱取得指定的濾鏡物件,如果濾鏡不存在,則會傳回空值None

    obs_source_get_filter_by_name(source, name)

    source 參數

    source參數為包含濾鏡的輸入來源物件。

    name 參數

    name參數為需要取得的濾鏡的名稱。

    使用 obs_source_release 函式釋放取得的濾鏡物件

    對於使用obs_source_get_filter_by_name函式取得的來源物件,需要通過obs_source_release釋放參考,否則 OBS 可能會出現錯誤。

    在下面的程式碼中,我們通過obs_source_get_filter_by_name函式判斷文字(GDI+)中是否存在名稱為blue的濾鏡,如果不存在,則建立並通過obs_source_filter_add函式新增。

    filters_and_transitions.py
    # 匯入模組 obspython
    import obspython as obs
    
    def test(props, prop): # 取得文字(GDI+)來源中名稱為 blue 濾鏡 welcome = obs.obs_get_source_by_name('Welcome') blue = obs.obs_source_get_filter_by_name(welcome, 'blue')
    if not blue: # 如果 blue 濾鏡不存在,則建立新增該濾鏡 settings = obs.obs_data_create_from_json('{"color_multiply":' + str(0xFF0000) + '}') blue = obs.obs_source_create('color_filter_v2', 'blue', settings, None) obs.obs_source_filter_add(welcome, blue)
    # 釋放 OBS 資料設定物件 obs.obs_data_release(settings)
    # 釋放 OBS 來源物件 obs.obs_source_release(blue) obs.obs_source_release(welcome)
    # 為腳本新增一個用於測試的按鈕,回呼函式為 test def script_properties(): props = obs.obs_properties_create() obs.obs_properties_add_button(props, 'test', '測試', test) return props

    複製輸入來源中的 OBS 濾鏡至另一個輸入來源

    obspython模組的obs_source_copy_filters函式,可用於將一個輸入來源中的濾鏡,複製到另一個輸入來源,複製產生的新濾鏡的名稱將被修改,如果他們與目標來源中的濾鏡名稱相同的話。

    obspython模組的obs_source_copy_single_filter函式,可用於將一個濾鏡複製到某個輸入來源,複製產生的新濾鏡的名稱將被修改,如果他們與目標來源中的濾鏡名稱相同的話。

    obs_source_copy_filters(dst, src)
    obs_source_copy_single_filter(dst, filter)

    dst 參數

    dst參數為接受新濾鏡的輸入來源物件。

    src 參數

    src參數為被複製濾鏡的輸入來源物件。

    filter 參數

    filter參數為被複製濾鏡物件。

    下面的程式碼,將複製來源Welcome中的濾鏡至來源Bye

    filters_and_transitions.py
    def test(props, prop):
    	# …
    	# 複製 Welcome 中的濾鏡到 Bye
    	bye = obs.obs_get_source_by_name('Bye')
    	obs.obs_source_copy_filters(bye, welcome)
    	# 釋放 OBS 來源物件
    	obs.obs_source_release(bye)

    取得輸入來源中 OBS 濾鏡的個數

    obspython模組的obs_source_filter_count函式,可用於取得輸入來源中的濾鏡的個數。

    obs_source_filter_count(source)

    source 參數

    source參數為需要計算濾鏡個數的輸入來源物件。

    備份和還原輸入來源中的 OBS 濾鏡

    obspython模組的obs_source_backup_filters函式,可用於將輸入來源中的濾鏡備份至一個資料陣列物件並傳回。

    obspython模組的obs_source_restore_filters函式,可用於將資料陣列物件中的濾鏡還原至輸入來源。

    obs_source_backup_filters(source)
    obs_source_restore_filters(source, array)

    source 參數

    source參數為需要備份或還原濾鏡的輸入來源物件。

    array 參數

    array參數為備份了濾鏡的資料陣列物件。

    使用 obs_data_array_release 函式釋放作為濾鏡備份的資料陣列物件

    對於使用obs_source_backup_filters函式取得的資料陣列物件,需要通過obs_data_array_release釋放參考,否則 OBS 可能會出現錯誤。

    排序輸入來源中的 OBS 濾鏡

    obspython模組的obs_source_filter_set_order函式,可將濾鏡的位置向上,向下移動,以及將濾鏡移動至開頭或末尾。

    obspython模組的obs_source_filter_get_indexobs_source_filter_set_index函式(需要 OBS 版本為 30.0 或更高),可將濾鏡移動到指定索引位置。

    obs_source_filter_set_order(source, filter, movement)
    obs_source_filter_get_index(source, filter)
    obs_source_filter_set_index(source, filter, index)

    source 參數

    source參數為需要移動濾鏡位置的輸入來源物件。

    filter 參數

    filter參數為需要移動的濾鏡物件。

    movement 參數

    movement參數為移動方式,可使用如下obspython模組變數進行設定,OBS_ORDER_MOVE_UP表示向上移動,OBS_ORDER_MOVE_DOWN表示向下移動,OBS_ORDER_MOVE_TOP表示移動至開頭,OBS_ORDER_MOVE_BOTTOM表示移動至末尾。

    index 參數

    index參數為目標位置的索引,0表示末尾(倒數第一),倒數第二為1

    在下面的程式碼中,我們使用obs_source_filter_count函式取得來源Welcome的濾鏡個數,並根據個數將blue濾鏡移動至第二的位置。

    filters_and_transitions.py
    def test(props, prop):
    	# …
    	if not blue:
    		# …
    		# 取得來源的濾鏡個數,並將 blue 濾鏡移動至第二的位置
    		count = obs.obs_source_filter_count(welcome)
    		if count > 1:
    			obs.obs_source_filter_set_index(welcome, blue, count - 2)
    		# …

    取得和設定場景項的 OBS 轉場特效

    如果希望取得或設定場景項的轉場特效,需要通過obspython模組提供的與場景項有關的函式進行,不過,這裏將介紹另一個函式obs_get_transition_by_name,他可以取得指定名稱的轉場特效。對於由使用者設定的轉場特效,其名稱格式通常為<item> 顯示轉場特效<item> 隱藏轉場特效,其中item為場景項的名稱。

    obs_get_transition_by_name(name)

    name 參數

    name參數為需要取得的 OBS 轉場特效物件的名稱。

    使用 obs_source_release 函式釋放取得的轉場特效物件

    對於使用obs_get_transition_by_name函式取得的轉場特效物件,需要通過obs_source_release釋放參考,否則 OBS 可能會出現錯誤。

    場景項,群組

    想要了解其他取得或設定場景項轉場特效的函式,你可以檢視取得和設定 OBS 場景項的轉場特效一段。

    filters_and_transitions.py
    def test(props, prop):
    	# …
    	# 取得來源 Welcome 的隱藏轉場特效
    	t = obs.obs_get_transition_by_name('Welcome 隱藏轉場特效')
    	obs.obs_source_release(t)

    原始碼

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