查看“语法”的源代码
←
语法
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于这些用户组的用户执行:ninja、
机器人
、
管理员
您可以查看和复制此页面的源代码。
所有基本的Avisynth脚本声明都符合以下的某种形式。 :#''变量名'' = ''表达式'' :#''表达式'' :#'''return''' ''表达式'' (也存在两种更高级的结构 - [[语法:用户自定义脚本函数|函数声明]]和[[语法:控制结构|try..catch声明]] 第一种情况,计算''表达式''的结果,赋给''变量名''。第二种情况,计算''表达式''的结果,如果类型是Clip,则赋给一个特殊的变量'''last'''。第三种情况,计算出的表达式成为活动脚本的“返回值”——可以是一个函数的“返回值”,也可以是整个脚本的“返回值”。在之后会提到的情况里,返回值往往是可以由打开AVS文件的应用程序看到的视频。简单的说,如果一个表达式中有关键字'''return''',它就会成为一个脚本(或一个脚本block)的结束声明语句。 绝大多数时间,表达式的结果是一个视频Clip,但实际上表达式的结果可以是本脚本语言支持的任何类型(Clip、整数、浮点、布尔、字符串),而且是靠像[[内部脚本函数]]这样的模块运算的。 一个''表达式''有如下的一种形式: :#''数字常数''、''字符串常数''或''布尔常数'' :#''变量名''或''Clip属性'' :#''函数''(''参数'') :#''表达式''.''函数''(''参数'') :#''表达式1'' '''运算符号''' ''表达式2'' :#''布尔表达式'' ? ''表达式1'' : ''表达式2'' 第一种情况,表达式的值就是常数的值。第二种情况,值和[[Clip属性]]或[[语法:脚本变量]]有关(之前必须经过初始化)。第三种情况,值是AVS函数的返回值(见下文)。第四种情况,是一个替代的写法,(成为“OPP记号”),和''函数''(''表达式'',''参数'')等价。 最后两种情况,可以使用普通的算数和逻辑[[语法:运算符号|运算符号]](来自C)操作表达式,计算整数、浮点和布尔,甚至使用三重符号的条件执行语句。字符串可以用相关运算符号比较,也可以用“+”合并。以下的运算符号也对视频Clip有定义:''a + b''等价于[[UnalignedSplice|Splice]](''a'',''b''),''a ++ b''等价于[[AlignedSplice|Splice]](''a'',''b'')。 Avisynth脚本语言中大部分的函数是视频滤镜。尽管函数可以是它选择的任意类型(这个特性对创建在脚本中重复使用的模块代码很有用的特性,你可以定义自己的脚本函数),但是'''不'''返回一个'''Clip'''的函数的作用往往被局限在中间变量的处理,用来给滤镜传递变量。脚本最终应该返回一个Clip。总之,Avisynth是一个视频处理程序。 函数可以有60个参数(希望足够了),而且可以返回任何Avisynth支持的类型(Clip、整数、浮点、布尔和字符串)。函数一般计算出一个新值,而从不会更改已经存在的值。这就意味着函数所有的参数都是“按值”传递的而不是“按参考 - By reference”传递的。在Avisynth脚本语言中,为了改动一个值应该首先去赋一个新的值。 参考[[内部滤镜]]一节,学习调用内部滤镜函数的语法。同样也有[[内部函数]],对非Clip变量进行运算。 ''参数''是一个由逗号分开的函数参数列表,可以留空。每个参数必须是一个匹配函数所期望类型的表达式(比如文本字符串、整数、浮点/小数、布尔值或Clip)。如果函数期望第一个参数是Clip类型,而且没有提供这个参数,那么Clip会使用'''last'''这个特殊的变量。 Avisynth函数可以使用有名字的参数。有名字的参数能以任意顺序给出,滤镜也会给未指定的参数选择默认值。某些滤镜因此用起来很简单。比如你可以这样写: Subtitle("Hello, World!", text_color=$00FF00, x=100, y=200),而不用写成Subtitle("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00)。颜色可以像上面的例子里,以十六进制或十进制的数给出。两种情况下颜色都应该用RGB值,即使Clip本身是YUV的。 如果没有给函数传递函数,还是可以不需要括号就调用函数的。比如:'''函数名'''。作这种保留的主要原因是考虑老脚本的兼容性。但是当没有混淆的时候,不写括号也很方便。 Avisynth忽略每行#后面的任何字符。这个功能能用来在脚本中添加注释。 # Comment(注释) 在v2.58里允许使用以下的方式添加块注释和嵌套注释 # 块注释: /* comment 1 comment 2 */ # 嵌套注释: [* [* a meaningful example will follow later :) *] *] Avisynth忽略关键字__END__(两个下划线)到脚本结束的所有文字。这个功能可以用来把脚本末尾的命令全部注释掉。 Version() __END__ ReduceBy2() Result is not reduced and we can write any text here Avisynth忽略大小写:aViSouRCe和AVISource等效。 单行之内复合的Avisynth声明只能以OOP记号书写或作为参数内嵌在其他函数内,比如: AviSource("c:\video.avi").Trim(0, 499) -或- AudioDub(AviSource("c:\video.avi"), WavSource("c:\audio.wav")) Avisynth的声明可以用反斜杠(“\”)分成多行,反斜杠可以是此行的最后一个非空格字符或下一行的第一个非空格字符。 分行示例(两种都可行而且等效): Subtitle("Hello, World!", 100, 200, 0, \ 999999, "Arial", 24, $00FF00) -或- Subtitle("Hello, World!", 100, 200, 0, \ 999999, "Arial", 24, $00FF00) 当跨行时,注释只能写在最后一行的后面。在中间行里混杂分行反斜杠会导致错误信息或对寻找脚本漏洞造成困难。 以下的例子错在混杂了注释和分行反斜杠,丢失了信息: ColorBars ShowFrameNumber Trim(0,9) # select some frames \ + Trim(20,29) 以上的例子并不如期返回<nowiki>[0..9,20..29]</nowiki>帧,因为“\”被前面的#注释掉了,因此两行不可能相连。 [[Category:AviSynth 语法]]
返回至“
语法
”。
导航菜单
个人工具
登录
名字空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
社区门户
新闻动态
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息
其他资源
AviSynthWiki(英语)
avisynth.info(日语)
NMM论坛(讨论区)