如何使用 Python 腳本操作 OBS 濾鏡,轉場特效
先決條件
閱讀本節的先決條件是對 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_create
和obs_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
函式新增。
# 匯入模組 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
。
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_index
和obs_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
濾鏡移動至第二的位置。
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 場景項的轉場特效一段。
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