语法:插件

来自NMM Doc
Lititude讨论 | 贡献2010年1月11日 (一) 10:25的版本
跳到导航 跳到搜索

调用插件

你可以用这些函数载入插件,添加外部函数来使用。

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")