打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[转载]AVS教程:AviSynth学习手册【第一节 AviSynth简介及基本语法】

(资料均来自互联网收集,非本人原创)

1、AviSynth简介

AviSynth是AVISYNTHesizer的缩写,意思就是AVI合成器,是一个Frameserver。(Frameserver就是一个把影像文件从一个程序转换到另外一个程序的过程,其间没有临时文件或中介文件产生)
  AviSynth是由BenRudiak-Gould首创的一种非常有用的工具,能够提供各种方式来处理影像文件。最独特的就是AviSynth并不是一个独立的影像处理程序,而是在影像文件和影像处理软件之间担任“中间人”的角色。
AviSynth的基本工作原理是这样的:
  首先由使用者建立一个包含特定命令的文本,称之为“脚本”(后缀为avs),这些命令指定要运行处理的影像文件和滤镜;
然后运行影像应用程序,比如VD(VirtualDub)或ND(?),打开脚本。此时AviSynth就开始工作了,打开脚本中指定的影像文件,运行特定的滤镜,并把输出结果提供给  影像应用程序。但影像应用程序并不了解AviSynth在后台所做的处理,而认为是直接打开了一个“被处理过”的影像文件。

 

2、AVS语法及基本应用技巧(写给新手)

既然要编写脚本,就要知道怎么写。在本节中,我们结合实例来了解一下AVS脚本的基本语法。只有懂得了写法,才能更好的运用。当然,不少人会觉得本节都是废话——那么恭喜你,你已经是老手了,你可以直接跳到下一节。
   AVS脚本的语法非常类似于C语言的语法,但比C要简单得多。如果你有一定的C语言(或以C为基础的脚本语言,如PHP)的编写经验,那么你会发现AVS竟然是如此的简单——你甚至可以跳过本节直接进行下节的内容。比如,笔者有过将近一年的PHP编程经验,当接触到AVS的时候,几乎没有花费任何力气就上手了。


  跟往常一样,先了解几个概念。
  函数——函数的英文名字叫function,这个词在英文中还有“功能”意思,没错!AVS中绝大部分的功能都是通过各种各样的函数来实现的。至于“函数”的确切定义,高一《数学(上册)》中写得很明白,笔者就不废话了。AVS中的函数按调用方式分为两类,一种是内置函数,一种是外挂函数。内置函数已经放置在AviSynth软件内部,可以在脚本中直接调用;外挂函数不包含于AviSynth中,需要在脚本中额外加载相应的DLL文件或其他AVS脚本函数才能调用。AVS包含的众多内置函数我们将会专门抽出一节来介绍。
  外置函数可以在网上下载得到。正是因为这点,AVS被赋予了几乎无限的扩展性,我们可以通过在网上找到各种函数来实现五花八门的功能。忘记说了,有些人喜欢管“函数”叫做“滤镜(filter)”或“插件(plugin)”,实际上这么叫也是正确的,就连AVS的众多官方文档都称之为滤镜、插件。但是就笔者个人来说,更愿意叫“函数”,因为这些“滤镜”的使用方式是函数的f(x)的形式。
  参数——既然有函数,就要说参数。如果说函数是实现某样功能用的,那么参数就是告诉函数通过什么方式实现、实现到什么程度等等的信息。上面说的f(x)的调用形式,f是函数名称,x就是参数。有的函数一个参数就够了,有的函数却要很多参数,四个、五个、十多个。比如Telecide这个函数如果把所有的参数加起来一共有十四个之多。好在不是所有的参数都是必要的。有些参数可以写也可以不写。如果不写,函数就会自动使用其内部的默认值。但是,如果必写的参数不写,那么函数就无法启动。
  变量——变量可以简单的理解成某个对象的名字(实际上要复杂一些^^;;)。比如,我们规定“本文作者=大虾”,那么当我们提到“本文作者”的时候,我们的第一反应就是那个叫“大虾”的家伙,HeiHei。
  好了,下面我们借个一段极其简单的范例来了解一下AVS的语法:


#plugin
LoadPlugin("E:\gk\AviSynthPlugins\DGDecode.dll")
#source
mpeg2source("F:\dvdrip-temp\soultaker.d2v")
#crop
crop(4,4,712,476)
#resize
LanczosResize(640,352)


  上面的例子中,“#”后面跟着的句子是被“注释”掉的。注释是什么意思呢?就是说,AviSynth读到这句话的时候,一看到这句话前面有“#”,就会54(无视)它,继续读到下一行。编写脚本写注释是一个好习惯,尤其是极其复杂的脚本。这种情况AVS脚本大概不会遇到,但是当编写PHP的时候,成千上万行的代码如果没有注释……那无论是试图阅读代码的人还是作者本人,都会头晕脑胀。
糟糕——扯远了。我们回到主题。
  紧接着下面,“LoadPlugin”,这是一个函数的名字,后面的括号“()”中的内容就是参数。LoadPlugin函数的功能是载入插件,后面括号中的参数便是告诉函数,要载入“E:\gk\AviSynthPlugins\DGDecode.dll”这个插件。Mpeg2source是包含于上面提到的“DGDecode.dll”中的外挂函数,也就是说,如果不加载DGDecode.dll这个文件的话,mpeg2source就无法使用。
   Crop是AviSynth的内置函数。这里涉及到了多参数函数。这个函数有四个参数,每个参数之间用“,”隔开(注意是英文逗号,不是中文逗号)。
   函数的写法多种多样,像LanczosResize函数,只有两个参数,所以我们写“640,352”即可。但是像前文提到的Telecide这样复杂的函数,我们需要将参数的名字也写进去。比如:
Telecide(order=1,guide=1,post=2,vthresh=25,show=true)
  其中,order、guide、post等等的,就是参数名称,参数名称和参数值之间用“=”连接(废话!)。
  还有一点要注意,数值型(比如1、25之类的)/真假型(true或者false)的参数,不需要用双引号(英文双引号)引起来。但是,字符型的参数,必须要用双引号引起来。例如:
mpeg2source("F:\dvdrip-temp\soultaker.d2v",idct=7)
  这个例子很明白,"F:\dvdrip-temp\soultaker.d2v"是字符型的变量值,要加双引号;7是数字型的参数,不用加双引号。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
AviSynth入门与应用指南
[转载]开始转码!MediaCoder与MeGUI!
VBS带你领略脚本语言的快乐!(入门篇)
Premiere 导入RMVB/RM格式视频文件详解
rmvb文件导入premiere的方法 - Premiere - 中国教程网论坛 互助学习...
MKV转RMVB的方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服