语法:用户自定义脚本函数

出自NMM Doc
跳转到: 导航, 搜索

定义和结构

你可以像下面描述的一样,在AviSynth中定义、调用自己的函数。函数能返回任意的变量类型。一个用户自定义脚本函数是一个独立的脚本代码模块,每调用一次脚本中的函数,都会执行这个脚本代码一次。下面紧接着的是一个简单的的用户自定义脚本函数(是一个自定义的滤镜):

function MuteRange(clip c, int fstart, int fend)
{
    before = c.Trim(0, -fstart)
    current = c.Trim(fstart, fend) 
    after = c.Trim(fend + 1, 0)
    audio = Dissolve(Dissolve(before, current.BlankClip, 3), after, 3)
    return AudioDub(c, audio)
}

用户自定义脚本函数以关键字“function”开始,后跟函数名。脚本函数命名规则和脚本变量规则一致。

函数参数列表紧随函数名之后。列表(可以为空)以(所期望的参数类型 - 参数名)对组成。各参数类型可以是AviSynth支持的任意变量类型

function MuteRange(clip c, int fstart, int fend)

然后是函数主体,也就是每次调用函数时执行的代码。参数在函数主体内按名称进行访问。函数主体由一对大括号{...}括起来。

{
    before = c.Trim(0, -fstart)
    current = c.Trim(fstart, fend) 
    after = c.Trim(fend + 1, 0)
    audio = Dissolve(Dissolve(before, current.BlankClip, 3), after, 3)
    return AudioDub(c, audio)
}

在函数主体的结尾处,需要有一个return声明,返回从参数和函数主体中计算出的最终结果。

    return AudioDub(c, audio)

需要注意的是,不像其他的脚本语言那样在函数主体里支持多重返回声明,AviSynth的函数只能包含单个返回声明。因为这个脚本语言并不支持分支(也就是复合声明)。

一些关于用户自定义脚本函数的真相

  1. 参数列表中所有后面的参数都必须也是命名参数。
  2. 命名参数是一个可选的参数,也就是说在调用函数时可以不提供。
  3. 当调用函数时,如果不提供可选的参数,那么这个参数会被设为void(“undifined”)(空/未定义)类型。但并不是乱来一个参数值 - 纯粹只是表示这个类型既不是Clip、整数、浮点,也不是布尔或字符串,仅仅“没有”可用的值而已。
  4. 一般性,需要用Define函数测试一个可选的参数是否有明确的值,或用Default,既有Define的测试功能,在适当情况下也能传递一个默认值。
  5. 一个void(“undifined”)值可以传递给其他的函数,也作为那个函数的可选参数。当你想创建一套调用别的函数的函数,这个功能可以保持相同的默认设置。

相关链接

共享函数,一个由AviSynth成员共同创建的,不断增多的共享函数合集。

个人工具
名字空间
动作
导航
工具箱
其他资源