如何使用 Python 腳本操作 OBS 濾鏡,轉場特效

閱讀 10:09·字數 3050·更新 
Youtube 頻道
訂閱 133

先決條件

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

Python 腳本中的 OBS 濾鏡和轉場特效

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

如何使用 Python 腳本取得和設定 OBS 濾鏡和轉場特效的相關屬性?

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

如何使用 Python 腳本建立 OBS 濾鏡和轉場特效物件?

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

來源

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

使用 Python 腳本新增和移除輸入來源的 OBS 濾鏡

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

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

source 參數

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

filter 參數

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

使用 Python 腳本取得輸入來源中的 OBS 濾鏡

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

obs_source_get_filter_by_name(source, name)

source 參數

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

name 參數

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

使用 obs_source_release 函式釋放在 Python 腳本中取得的 OBS 濾鏡物件

對於使用obs_source_get_filter_by_name函式取得的 OBS 來源物件,需要通過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

使用 Python 腳本複製輸入來源中的 OBS 濾鏡至另一個輸入來源

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

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

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

dst 參數

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

src 參數

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

filter 參數

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

下面的程式碼,將複製來源Welcome中的 OBS 濾鏡至來源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)

使用 Python 腳本取得輸入來源中 OBS 濾鏡的個數

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

obs_source_filter_count(source)

source 參數

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

使用 Python 腳本備份和還原輸入來源中的 OBS 濾鏡

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

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

obs_source_backup_filters(source)
obs_source_restore_filters(source, array)

source 參數

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

array 參數

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

使用 obs_data_array_release 函式釋放在 Python 腳本中取得的作為濾鏡備份的 OBS 資料陣列物件

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

使用 Python 腳本排序輸入來源中的 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參數為需要移動濾鏡位置的 OBS 輸入來源物件。

filter 參數

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

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

使用 Python 腳本取得和設定場景項的 OBS 轉場特效

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

obs_get_transition_by_name(name)

name 參數

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

使用 obs_source_release 函式釋放在 Python 腳本中取得的 OBS 轉場特效物件

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

場景項,群組

想要了解其他取得或設定場景項轉場特效的函式,你可以檢視使用 Python 腳本取得和設定 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