語法:插件

出自NMM Doc
跳至導覽 跳至搜尋

調用插件

你可以用這些函數載入插件,添加外部函數來使用。

LoadPlugin ( "文件名" [,...] )

調用一個或幾個Avisynth的外部插件(DLL文件)

LoadVirtualPlugin( "文件名" , "滤镜名" , 整数 Preroll )

這個函數調用一個VirtualDub的插件。「文件名」是.vdf文件的文件名。在用了這個函數之後,這個濾鏡在Avisynth里會被當作名字叫「濾鏡名」的濾鏡。VirtualDub濾鏡只支持色彩空間,如果一個視頻剛好是RGB24格式,那麼必須用色彩空間轉換(ConvertToRGB是不夠的)。

某些濾鏡的輸出取決於之前的幀;這些濾鏡的Preroll(預滾動)參數至少需要設到這個濾鏡預處理所需的幀數,用來滿足緩衝,或更新內部變量。

LoadVFAPIPlugin ( "文件名" [,...] )

這個函數允許你使用VFAPI插件(TMPEGEnc輸入插件)

LoadCPlugin ( "文件名" [,...] )
Load_Stdcall_Plugin ( "文件名" [,...] )

調用所謂的Avisynth C-插件(DLL文件)

Load_Stdcall_Plug() 是 LoadCPlugin() 的一個同義名稱。C-插件是用純的C語言寫的,使用特殊的「Avisynth C接口」(不像普通的用MS C++編譯的Avisynth插件)。C-插件必須使用LoadCPlugin() 或Load_Stdcall_Plugin() 調用。

Kevin提供了一個LoadCPlugin.dll,會超過 LoadCPlugin() ,也就是支持調用C編譯的插件的子程序的調用順序。當有Kevin的插件時,應該用Load_Stdcall_Plugin()來實現標準的調用順序。建議:把這個插件放在Avisynth自動調用插件目錄之外,以避免崩潰。[討論] [AVISynth C API (by kevina20723)]

插件自動調用和名字優先級(v2)

可以把所有的插件及用戶自定義的函數和變量腳本放在一個文件夾中,在啟動時,Avisynth會根據腳本的需要自動調用,不調用或是動態調用擴展名是.AVSI(v2.08和v2.5,在v2.05-v2.07里是.AVS)和.DLL的所有文件。

此文件夾里的.AVSI腳本只能包含定義的函數和全局變量,不能有主要處理的部分(不然會發生奇怪的錯誤)。而且也不推薦往這個文件夾里放其他的文件。

自動載入插件的文件夾路徑保存在註冊表裏,(v2.5的註冊表鍵值調整過)。你可以雙擊包含下面語句的.REG文件來設置這個路徑(當然要輸入絕對路徑)

REGEDIT4


[HKEY_LOCAL_MACHINE\SOFTWARE\Avisynth]
"plugindir2_5"="c:\\program files\\avisynth 2.5\\plugins"

函數名優先級順序如下:

用户定义的函数(优先级一直最高)

插件的函數(比內建的函數優先級高,會無視掉內部的函數) 內部函數

在每一類的內部,最後調用的函數起作用,這樣一來在函數名這方面就沒有衝突了。

插件自動調用和有衝突的函數名(v2.55)

從v2.55開始,支持DLLName_Function()(「DLL文件名_函數名()」)。原先的問題在於兩個插件的功能不同,但是函數名卻相同。為了調用需要的函數,支持DLLName_Function()語句。自動調用的插件和LoadPlugin()調用的插件都會自動生成這種額外的函數名。

比如:

#使用decomb510.dll的fielddeinterlace
AviSource("D:\captures\jewel.avi")
decomb510_fielddeinterlace(blend=false)

假設你的自動調用插件文件夾里有mpeg2dec.dll和mpeg2dec3.dll,現在你希望用mpeg2dec.dll載入d2v文件(輸出YUY2)

#用mpeg2dec.dll的mpeg2source
mpeg2dec_mpeg2source("F:\From_hell\from_hell.d2v")

或用mpeg2dec3.dll載入(輸出YV12)

#用mpeg3dec.dll的mpeg2source
mpeg2dec3_mpeg2source("F:\From_hell\from_hell.d2v")