查看“语法:用户自定义脚本函数”的源代码
←
语法:用户自定义脚本函数
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于这些用户组的用户执行:ninja、
机器人
、
管理员
您可以查看和复制此页面的源代码。
==定义和结构== 你可以像下面描述的一样,在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的函数只能包含单个返回声明。因为这个脚本语言并不支持分支(也就是复合声明)。 ==一些关于用户自定义脚本函数的真相== *函数可以有60个参数,而且可以返回任何Avisynth支持的类型(Clip、整数、浮点、布尔和字符串)。 *虽然不推荐,但实际上可以忽略参数的类型,这种情况下参数类型被定为通用类型“val”。 *如果函数期望第一个参数是Clip类型,而且没有提供这个参数,那么Clip会使用'''last'''这个特殊的变量。 *函数支持''命名参数''(named argument)。只要把参数名用双引号引起来,就成为命名参数。当定义完一个命名参数后需要注意: #参数列表中所有后面的参数都必须也是命名参数。 #'''命名参数是一个可选的参数''',也就是说在调用函数时可以不提供。 #当调用函数时,如果不提供可选的参数,那么这个参数会被设为void(“undifined”)(空/未定义)类型。但并不是乱来一个参数值 - 纯粹只是表示这个类型既不是Clip、整数、浮点,也不是布尔或字符串,仅仅“没有”可用的值而已。 #一般性,需要用[[Define]]函数测试一个可选的参数是否有明确的值,或用[[语法:控制函数|Default]],既有Define的测试功能,在适当情况下也能传递一个默认值。 #一个void(“undifined”)值可以传递给其他的函数,也作为那个函数的可选参数。当你想创建一套调用别的函数的函数,这个功能可以保持相同的默认设置。 *函数一般计算出一个新值,而从不会更改已经存在的值。这就意味着函数所有的参数都是“按值”传递的而不是“按参考 - By reference”传递的。在Avisynth脚本语言中,为了改动一个值应该首先去赋一个新的值。 *函数可以调用另一个函数,包括它本身。这个方式称为递归。递归是一个创建实现复杂任务的非常有用的功能。 *局部的函数变量会把相同变量名的全局变量覆盖掉。例如,如果给''myvar''赋值,定义一个''myvar''变量,那在函数内部就无法访问叫''myvar''的全局变量了。 *上述情况对参数同样成立,因为在函数看来,参数是最初的局部变量。 ==相关链接== [http://avisynth.org/mediawiki/Shared_functions 共享函数],一个由AviSynth成员共同创建的,不断增多的共享函数合集。 [[Category:AviSynth 语法]]
返回至“
语法:用户自定义脚本函数
”。
导航菜单
个人工具
登录
名字空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
社区门户
新闻动态
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息
其他资源
AviSynthWiki(英语)
avisynth.info(日语)
NMM论坛(讨论区)