前言AVS在DVDRip制作中是至关重要的一个步骤,直接影响到画质好坏。因此,AVS也是无数Ripper花大力气研究的对象。 当积累了一定经验和熟练度之后,创建AVS脚本是一件相当有乐趣且轻松的事情。有经验的Ripper看到片源之后,立刻就可以基本确定需要使用那些滤镜、怎样搭配滤镜参数,之后,只要进行细微的调整,便可得到希望的效果。新手成为老手,需要一个积累经验的过程,除了多看别人的心得、遇到问题勤于提出之外,就只剩下自己多做片、积累实战经验。经验的积累是一个较长的过程,因此不要梦想阅读了某篇文章后一夜之间成为所谓高手,经验不会骗人,因此脚踏实地才是正确的道路。 提高AVS运用水平的两条小经验: 1. 英语要好,因为大多数滤镜的文档都是E文的,且很少有中文翻译版; 2. 善于使用各种搜索引擎,比如GOOGLE、一些论坛的搜索引擎等。 3. 善于提问。在提出问题之前,看看说明、用搜索引擎搜索一下,这样一来,应该说85%的问题都能够很好的解决。这样不但为别人省去了麻烦,而且这样学来的知识最牢固。 第一章 AviSynth简介AviSynth是AVI synthesizer的缩写,也经常称之为avs,简单来说就是AVI合成器。是一个Frameserver。(Frameserver就是一个把影像文件从一个程序转换到另外一个程序的过程, 其间没有临时文件或中介文件产生)。AviSynth是由Ben Rudiak-Gould首创的一种非常有用的工具,能够提供各种方式来处理影像文件。最独特的就是AviSynth并不是一个独立的影像处理程序,而是在影像文件和影像处理软件之间担任“桥梁”的角色。这座桥梁不是简单的独木桥、而是有栏杆、有台阶(比喻其提供的大量虑镜)。因此比较灵活!如对于压制real格式来说,源媒体文件是vob、d2v(DVD处理过程中的中间文件)、ac3、mp3、avi、DAT/mpge等,而应用程序是各种real压缩软件如Helix real producer、BatchRealProducer144和EasyRealProducer14,它们都支持avs的导入。当然avs并不只是用于real压缩,只要avs支持你所需要处理的媒体文件,影像处理软件也支持导入avs文件,你都可以通过avs对视频进行处理,然后让影像处理软件输出你所需要的格式的文件。也许你还是不明白AviSynth能做什么,举些简单的例子:你需要对一段avi进行处理,你想把画面尺寸缩小,你可以用avs;你想把画面上的杂点消除,你可以用avs;你想把画面处理得锐利些,你还是可以用avs;AviSynth是桥梁,位于媒体文件和压缩软件之间,压缩软件可以通过AviSynth调用和处理媒体文件。而且不仅仅是压缩软件,甚至是播放器也能调用avs,对播放的文件进行处理,得要需要的播放效果。AviSynth现在有3个版本,第一个是Ben Rudiak-Gould的首先编译的AviSynth v1.0b;在Ben Rudiak-Gould停止开发后,Edwin van Eggelen继续开发,其版本是AviSynth v1.0b6;在2002年7月第二次源码编写计划开始,目前最新的版本是AviSynth 2.5.7,增加了YV12的支持,增加了许多实用的命令,也吸收了一些优秀的第三方滤镜成为内建滤镜,强力推荐使用。期待下一个版本更加完美!AviSynth的基本工作原理:AviSynth首先要编写建立一个包含特定命令的文本。称之为“脚本”(后缀为avs),这些命令指定要运行处理的影像文件和滤镜;然后运行影像应用程序,比如VirtualDubMod或NanDub,打开脚本。此时AviSynth就开始工作了,打开脚本中指定的影像文件,运行特定的滤镜,并把输出结果提供给影像应用程序。但影像应用程序并不了解AviSynth在后台所做的处理,而认为是直接打开了一个“被处理过”的影像文件。注意这里的文本,简单的说就是windows的写字板写出来的文件,你可以用任何一种文本编辑器打开进行编辑。这一特定命令的文本称之为"脚本"(文件后缀名为avs),这些命令指定要运行处理的媒体文件和滤镜! 使用AviSynth有5大优势:1. YUV支持:内建滤镜可以在YUV环境下运行,第三方滤镜几乎也兼容YUV,所以比起VD、ND的内嵌滤镜必须在RGB环境下运行要快很多。省却了一个转换的过程,将来还可以支持YV。 2. 滤镜处理:内建许多影像处理滤镜,比如Resizing,Cropping等。还有大量的第三方强力滤镜,并可以调用VD以及AviUtl的第三方滤镜。3. 突破2G限制:通过AviSynth打开影像文件就相当于应用程序直接打开,这样就可以使本身有2G限制的程序也能突破2G的限制。4. 打开格式:AviSynth可以打开几乎所有影像文件,包括MPEG和QuickTime。所以当影像应用程序通过AviSynth打开这些文件时,会被认为是打开标准的AVI,这样就可以处理影像应用程序本身并不支持的格式。5. 节省硬盘空间:AviSynth处理的影像文件在运行过程中直接导入应用程序,没有临时文件,所以节省硬盘空间。安装1、对于AviSynth 2.05或以前的版本,安装的时候先解压缩,AviSynth.dll复制到Windows\System下(W98,ME)或Windows\System32下(W2K,XP),然后运行INSTALL.REG就完成安装了;2、对于AviSynth 2.06以后的版本包括最新的AviSynth 2.5.8 Alpha (070518),直接运行解压的EXE文件即可自动安装,不过要事先卸载安装过的AviSynth程序。3、把需要的滤镜解压缩到plugin文件夹下。第二章 AVS语法及基本应用技巧既然要编写脚本,就要知道怎么写。在本章中,我们结合实例来了解一下AVS脚本的基本语法。只有懂得了写法,才能更好的运用。 AVS脚本的语法非常类似于C语言的语法,但比C要简单得多。如果你有一定的C语言(或以C为基础的脚本语言,如PHP)的编写经验,那么你会发现AVS竟然是如此的简单——你甚至可以跳过本章直接进行下章的内容。下面我们先来了解几个概念:函数——函数的英文名字叫function,这个词在英文中还有“功能”意思,没错!AVS中绝大部分的功能都是通过各种各样的函数来实现的。AVS中的函数按调用方式分为两类,一种是内置函数,一种是外挂函数。内置滤镜(又可称做“函数”)已经放置在AviSynth软件内部,可以在脚本中直接调用;外挂函数不包含于AviSynth中,需要在脚本中额外加载相应的DLL文件或其他AVS脚本函数才能调用。AVS包含的众多内置滤镜我们将会专门抽出一章来介绍。 外置滤镜(又可称做“函数”)可以在网上下载得到。正是因为这点,AVS被赋予了几乎无限的扩展性,我们可以通过在网上找到各种函数来实现五花八门的功能。忘记说了,有些人喜欢管“函数”叫做“滤镜(filter)”或“插件(plugin)”,实际上这么叫也是正确的,就连AVS的众多官方文档都称之为滤镜、插件。但是就笔者个人来说,更愿意叫“函数”,因为这些“滤镜”的使用方式是函数的f(x)的形式。 参数——既然有函数,就要说参数。如果说函数是实现某样功能用的,那么参数就是告诉函数通过什么方式实现、实现到什么程度等等的信息。上面说的f(x)的调用形式,f是函数名称,x就是参数。有的函数一个参数就够了,有的函数却要很多参数,四个、五个、十多个。比如Telecide这个函数如果把所有的参数加起来一共有十四个之多。好在不是所有的参数都是必要的。有些参数可以写也可以不写。如果不写,函数就会自动使用其内部的默认值。但是,如果必写的参数不写,那么函数就无法启动。变量——变量可以简单的理解成某个对象的名字(实际上要复杂一些)。比如,我们规定“本文作者=大虾”,那么当我们提到“本文作者”的时候,我们的第一反应就是那个叫“大虾”的家伙。好了,下面我们借个一段极其简单的范例来了解一下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读到这句话的时候,一看到这句话前面有“#”,就会无视它,继续读到下一行。编写脚本写注释是一个好习惯,尤其是极其复杂的脚本。这种情况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是数字型的参数,不用加双引号。※需要注意的是avs脚本的写法例如Crop切边,语法是Crop(clip, int left, int top, int width, int height, bool align) clip就是源使用的时候可以写Video=Crop(Video,8,0,704,480)也可以写Crop(8,0,704,480)但是两种写法是有区别的具体的可以比较下面的两个例子# PLUGINSLoadPlugin("C:\PROGRA~1\Autorv9\SOFTS\AVSFILE\MPEG2DEC3.DLL")# VIDEO SOURCEVideo=Mpeg2Source("E:\a.d2v")# CROPPINGVideo=Crop(Video,8,0,704,480)# RESIZINGVideo=BicubicResize(Video,640,480,0,0.5)# FINISHReturn(Video)# PLUGINSLoadPlugin("C:\PROGRA~1\Autorv9\SOFTS\AVSFILE\MPEG2DEC3.DLL")# VIDEO SOURCEMpeg2Source("E:\a.d2v")# CROPPINGCrop(8,0,704,480)# RESIZINGBicubicResize(640,480,0,0.5)也就是说如果你制定了源Video,那么你就要注意了必须要调用源的地方都要写上源,最后还要Return(Video)。两种写法不能混用哦。下面介绍一些小花招,让我们的处理更加轻松。 AVS技巧1:使用变量 当我们在一段AVS之中需要打开多段片源、需要分别处理的时候,就要用到变量。请看下面的例子: Clip1=avisource(“d:\1.avi”) Clip2=avisource(“d:\2.avi”) Clip3=clip1+clip2 Return(clip3) 在这个例子中,clip1、clip2、clip3都是变量,现在你也能够理解变量的概念了吧。 很明显,我们在clip3中将前两个片源合并在了一起,然后用return函数输出clip3,我们在视频编缉软件中最终看到的结果是:播放1.avi,1.avi放完后,紧接着放2.avi。 当然,这里只是举例子,其实合并没这么简单的,因为两段片源的fps、分辨率、颜色模式都要完全相同。至于怎么让他们“完全相同”,将会在后面的章节中讲到。这里只是要大家了解变量是什么东西。 AVS技巧2:“.”的妙用 看下面的AVS脚本: v1=avisource("C:\1.avi").ConvertToYUY2() v2=avisource("C:\2.avi").ConvertToYUY2() …… 这样写等价于: v1=avisource("C:\1.avi").ConvertToYUY2() v1= ConvertToYUY2(v1) v2=avisource("C:\2.avi").ConvertToYUY2() v2= ConvertToYUY2(v2) 是不是省了很多事?在编写复杂的脚本的时候尤其好用~(至于ConvertToYUY2是什么东西……我们后文再讲) AVS技巧3:分段处理 就算是同一影片在不同的段落中也会表现出来不同的特色。有时候我们需要对一些片源进行特殊处理,这就用到了截取。还是先看例子: Source=avisource(“c:\clip.avi”) Clip1=trim(source,0,1999) Clip2=trim(source,2000,3000) …… 这样,我们就用trim函数分别截取了影片的0~1999(包括1999)号帧和2000~3000帧。下面就能针对两段影片分别进行处理了。 有一点请注意:0号帧也算一帧,0号帧其实是影片的第一帧,1号帧是第2帧,依此类推……我们截取到1999号帧,事实上截取了2000帧!自然,2000号帧是影片的第2001帧。 AVS的基础语法以及一些小技巧就讲到这里了,更多的应用技巧还希望大家自己去探索。这一章对已经掌握AVS的人来说可能是废话,但是对于从来没接触过AVS得初心者,却是需要重点掌握的。俗话说,工欲善其事,必先利其器。要写好AVS脚本,必须要打好基础才行。第三章 AVS常用滤镜介绍 AviSynth内建了数目繁多的滤镜,所以只能介绍一些最常见最实用的,滤镜可以理解为各种处理视频的工具。 AviSynth滤镜的安装:在http://www.avisynth.org/warpenterprises/files/可以下载到滤镜,解压缩后将虑镜插件dll文件拷贝到安装目录的plugin目录里。一、加载插件1.LoadPlugin() 加载插件如: LoadPlugin("VSFilter.dll") 加载字幕插件LoadPlugin("mpeg2dec3.dll") 加载DVD的mpeg2编码器插件LoadPlugin("mpasource.dll") 加载mp3插件请下载以上提到的滤镜!并解压制到plugin目录里(当然目录可以自己选定),如果avs文件和滤镜不再同一个目录下,记得要把加载滤镜的路径名写全了。有些滤镜或者脚本是avisynth核心的滤镜或脚本,也就是avisynth本身提供的功能,这些就不需要加载,其它的都需要加载。你也可以用SetWorkingDir设定插件文件的工作路径2. SetWorkingDir() 指定插件路径SetWorkingDir("d:\GORDIA~1\") # 设定AVS 脚本调用dll 插件文件的工作路径这样设置好后,就可以在下面直接写调用语句了,不需要再一个一个的写滤镜的路径了,但前提是.dll的滤镜文件已经复制到设置的文件夹下了。例:SetWorkingDir("D:\AviSynth 2.5\plugins\") #设置滤镜的目录LoadPlugin("VSFilter.dll") #调用字幕滤镜插件二、源媒体读取1.DirectShowSource() 万能调用如:DirectShowSource("e:\vob\ss.VOB") DirectShowSource()在高版本avisnyth中显得更万能些,常用的媒体格式,如avi、mpge1/dat、mpge2/vob/bin都可以加载,另外可以不用分离视频和音频,而直接压缩!想要直接压制vob请使用高版本的avisynth,如目前的2.54 。如果遇到打不开的媒体格式你大都可以试试看DirectShowSource。2.AVISource() avi文件调用如:AVISource(e:\avi\1.avi,false) 用于导入AVI格式的影片,需要安装相应的Codec才能导入。这个对于DVDRIP压制者来说可能更常用些.false表示禁止音频! 3.mpeg2source() 这个用于解码DVD的mpeg2格式的视频mpeg2source("XXX.d2v")4.WAVSource("e:\vob\ss.wav") #读取wave音频 5.AC3SOUECE("e:\vob\ss.ac3") #读取ac3音频 6.MPASOURCE("e:\vob\ss.MP3") #读取mp3音频 注:WAVSOURCE和AVISOURCE是属于核心脚本,无须读取插件,但AC3SOURCE和MPASOURCE需要读取AC3SOURCE和MPASOURCE插件。DirectShowSource的读取需要安装各种音频和视频的解码器。7.convertfps=true这个要特别说明一下,convertfps=true语句的作用是防止转换可变桢率的RMVB和WMV时出现影音不同步。rmvb/wmv都是是浮动帧率,如果你指定帧率反而会不同步,所以不要指定fps这个数值。载入行要这么写directshowsource(“文件路径全名”,convertfps=true)三、crop()、LanczosResize()裁黑边和调整大小1.LanczosResize()缩放滤镜:LanczosResize是BicubicResize的替代者,提供更精准、更锐利的画质。在日本普遍使用LanczosResize,欧美大多使用BicubicResize。本来是日本人开发的第三方滤镜,自AviSynth 2.05版本开始吸收为内置滤镜。 例:LanczosResize(640,480) #把分辨率改变为640*4802.SimpleResize() 外置滤镜放大缩小:由trbarry编写的,由于对SSE进行了优化,所以速度快,效果好。替代了AviSynth中的BilinearResize。和LanczosResize的米切尔双立方体算法不同,这个是单纯的双线性算法。LanczosResize的画质更锐利和真实,适合普通电影;而SimpleResize的画质较柔和,适合动画。例:LoadPlugin("SimpleResize.dll")SimpleResize(640,480) #作用与LanczosResize和BicubicResize是一样的。2.Crop()切边:为了保持比例或切除黑边,参数是整数,顺序是左、上、宽、高。 例:Crop(8,0,704,480) #左右各切去8像素。vob文件画面大小一般720×480。16:9宽银幕的都带了很大的黑边,需要裁减掉。也是avs用于vob压制的关键因素之一。裁减黑边和缩放画面是vob文件压制中很重要的因素,一般连用。对于本身就无黑边的文件直接用LanczosResize() 16:9画面的有2种情况,请记住这几个数值,在rmvb压制中直接套用即可! DVD变形宽银幕:640×352,608×336 电影宽银幕: 640×272 如要将电影宽银幕的画面比列调整到640×272,avs里可以这么写 Crop(8,90,704,300) LanczosResize(640,272) 如要将DVD变形宽银幕的画面比列调整到608×336,avs里可以这么写 Crop(8,64,704,352) LanczosResize(608,336) 无黑边的画面的直接用 LanczosResize(512,384) 缩小同时画面强制到标准4:3 请直接记住这几句就可以了得到最佳的rmvb画面大小了!3.AddBorders()加边:给影像加黑边。参数是整数,顺序是左、上、右、下。 例:AddBorders(0,64,0,64) #就是给图像上下各加64像素的黑边有的文章中讲这个滤镜似乎并不常用,但是我在做硬字幕的影片中常用这个滤镜把字幕加到黑边处,在欣赏影片的同时不至于失去影片画面的完整性。四、亮度滤镜 亮度滤镜是使用avs压制vob-rmvb vcd-rmvb的又一关键因素。画面太暗的rmvb是失败之作。下面介绍2个:1.Levels()层次:调节亮度、对比度和Gamma值。 例1:Levels(0,1.2,255,0,255) #调整Gamma,使画面变亮例2:Levels(0,1.5,255,0,255) 改第二个,我感觉数值在1.3-2之间比较合适,一般1.5比较合适 2.Tweak()调整:可以调节色度,饱和度,亮度,对比度。 色度:-180.0~180.0,默认0.0。正数趋向红色,负数趋向绿色。 饱和度:0.0~10.0,默认1.0。0.0为黑白。 亮度:-255.0~255.0,默认0.0。 对比度:0.0~10.0,默认1.0。例:Tweak(0,1,20,1) 4个浮点数分别表示:调节色度,饱和度,亮度,对比度。一般将第三个调节在0-30之间,以15-20为宜。个人感觉level()比较好,主要调背景为主,而vob文件主要是背景暗。注意Tweak的其他调节可能和颜色控制环境有关,如YUY2,因此其它的最好不要再改动。五、编辑滤镜1.FadeIn ()淡入和 FadeOut()淡出淡入和淡出:提供淡入和淡出功能,尤其是淡出功能,可以使影片结束地更自然。参数为整数,表示需要编辑的帧数。 例:FadeOut(24) #影片最后24帧淡出 2.Trim()截取:可以截取某段影片。参数为整数,表示需要编辑的开始帧和结束帧。 例:Trim(240,480) #截取240~480帧这一片断六、声音滤镜1.AudioDub()影音合并:可以把影像和声音合并在一起。AudioDub(video, audio)下面是一个简单的实例:Video =AVISOURCE(“xxx.avi”,FALSE,“YUY2”) Audio= WAVSOURCE(“xxx.wav”) AudioDub(Video,Audio) # 把test.avi和test.wav合并合成常用于real格式的压制,制作rmvb的时候就需要把视频和音频合成后交给real压缩软件,而制作avi则不需要合成视音频。这主要是因为real格式要求视音频都必须用real压缩,而avi则可以使用多种音频格式,一般是单独压缩视频,然后再用其他软件合成视频音频。合成在rmvb压制方面的例子可以参考后面的rmvb压制部分2.GetLeftChannel() 和 GetRightChannel()获取声道:把立体声的左右声道单独返回,适用于左右声道不同语种的WAV。 例:stereo=WavSource("test.wav") return GetLeftChannel(stereo) 返回test.wav的左声道 3.DelayAudio()声音延迟:由于从VOB里分离的AC3通常有延迟,所以用Azid转码得到的WAV也有延迟,在用AudioDub合并时就需要加上这个延迟。 例:写法①WavSource("test.wav").DelayAuido(0.5) # 把test.wav延迟半秒写法②DelayAudio(wavsource(”XXX.WAV“),-30)30的单位是毫秒,经典的解决音画同步问题。4.ResampleAudio()音频重新采样例:WAVSOURCE(“xxx.wav”).ResampleAudio(48000) #音频重新采样,采样率480005.AmplifydB()左右声道的放大减小AmplifydB(wavsource(“xxx.wav”),3,3) #左右声道放大3DB6.Mergechannels()组合左声道、右声道例:Left=wavSource("C:\1.wav").getleftchannel Right=wavsource("C:\2.wav").getrightchannel mergechannels(Left,Right)七、字幕滤镜 1.VobSub()Sub字幕:VobSub不但是外挂字幕的好手,内嵌字幕也是一样的强。将字幕的2个文件test.idx和test.sub放在同一个目录下就可以了。例:LoadPlugin("VobSub.dll")VobSub("test") 也可以这样VobSub("e:\vob\ test.idx") #加载影片字幕2.TextSub()SSA和ASS字幕:这个也是VobSub自带的,可以内嵌特效字幕。例:LoadPlugin("TextSub.vdf")TextSub("h:\avs\jrvs.ssa") #加载水印文本例2:LoadPlugin("VSFilter.dll")TextSub("F:\DVD\js60\js601.srt") #加载srt字幕需要调用字幕滤镜LoadPlugin("VSFilter.dll")八、色彩模式的转换 有些压缩软件不支持某些色彩模式,例如默认情况下Helix不能在YV12环境下工作,需要将DVD的YV12转为YUY2 video=ConvertToYUY2(video),当然如果你装了Xvid,Helix也是可以在YV12下工作的有如下的转换: ConvertToRGB32()、ConvertToRGB24、ConvertToRGB() ConvertToYUY2()、ConvertToYV12() 简单例子: AVISOURCE(“xxx.avi”) ConvertToYUY2() 等价于AVISOURCE(“xxx.avi”,“YUY2”)或者AVISOURCE(“xxx.avi”).ConvertToYUY2()其他的也类似九、其它虑镜介绍1.截图没有想到用avs来截图吧,只要用wmp6.4或mpc6468播放一下写好的avs文件,截图就产生了。directshowsource("C:\1.rmvb",fps=23.976).ConvertToRGB24 trim(0,19) ImageWriter("C:\",0,0,"jpg") 这里我们假设的是要截取的rmvb为C:\的1.rmvb,要截取的frame(幅)从第1到20共20幅(trim是以0为第一幅) ,保存路径为C:\,格式为jpg(支持bmp, dds,jpg/jpe/jpeg, pal, pcx格式)连续截图例:Avisource("C:\test,avi",false).ConvertToRGB24 trim(0,19) ImageWriter("C:\",0,0,"jpg") 截取特定的frame例:Avisource("C:\test,avi",false).ConvertToRGB24 trim(1920,1920) ImageWriter("C:\",0,0,"jpg")2.1.在rmvb压制中不推荐使用,如部分朋友选用的FluxSmooth(5,7) #柔化滤镜 Convolution3d("moviehq") #3D优化滤镜2者需要加载相应的滤镜插件2.常见的外置滤镜AviSynth最强大之处就是有数目繁多、功能强大的外置(或称“第三方”)滤镜;同时还可以调用VD以及AviUtl的滤镜;甚至还有特别开发的接口,可以让TMPGEnc和AviUtl读取AVS。和内置滤镜不同,外置滤镜需要先调用声明,再可以使用。(1)源文件滤镜① MPEG2Dec由dividee编写的读取DVD2AVI产生的d2v工程文件的滤镜,同时内建去除Noise的TemporalSmoother。例:LoadPlugin("MPEG2Dec.dll")MPEG2Source("test.d2v")② MPEG2Dec2trbarry在MPEG2Dec的基础上进行了改进,支持P4的SSE2指令集。用文本编辑工具打开d2v,把iDCT_Algorithm=?改成5就可以了。速度很快,效果也好,推荐P4 CPU的用户使用。例:LoadPlugin("MPEG2Dec2.dll")MPEG2Source("test.d2v")③ MPEG2Dec3在MPEG2Dec2的基础上再进行了改进,加入了Nic的图像后处理(PP),一定程度上可以减少Noise。好像除了P4的SSE2外,还加入了AMD的3D Now!优化,目前还在开发中,是个非常有前途的滤镜。例:LoadPlugin("MPEG2Dec3.dll")MPEG2Source("test.d2v",CPU=4) # CPU=4就是开启了PP模式(2)处理滤镜① ColorYUY2颜色补偿:Kiraru2002编写的滤镜。由于经过编码,得到的结果和DVD相比较,颜色有所改变,所以要对颜色进行补偿。例:LoadPlugin("ColorYUY2.dll")ColorYUY2(0,10,0,10,0,0,0,0,0)② ChangeFPS()改变影片帧率,iphone一般来说支持最大30fps。例:ChangeFPS(23.976)#改变影片帧率有几种数值 12、15、20、23.976、24、25、29.97、30这几种,一般来说不改变也行。③ undot()消除噪点,可以使用一个或多个,可以连在一起用,自己看效果体会。无参数,直接加上就行了。undot滤镜是进行象素及细小噪点降噪,一般用来去除细小的、肉眼不容易察觉的噪点,所以具体效果上并不明显。例:加在其它滤镜后,使用多次。LoadPlugin("UnDot.dll")DirectShowSource("test.avi")UnDot()LanczosResize(480,272)UnDot()或者:UnDot().UnDot().UnDot().UnDot()具体用暴风预览效果。④ FluxSmooth()柔化兼有降噪功能,比UnDot()作用要强些.例:LoadPlugin("fluxsmooth.dll")fluxsmooth(5,7) 一般用这个默认(5,7)⑤ KenKunNR()KenkunNR是WarpSharp自带的降躁插件,具体参数KenKunNR(threshold=1 to 3),数值越大,强度越大。例:LoadPlugin("WarpSharp.dll")KenKunNR(threshold=1)⑥ deen()降噪锐化功能. 用后画面就会比较干净,但细节都被抹杀. 视情况而用例:LoadPlugin("deen.dll")#deen("c2d",2,3,3) 较轻#deen("a3d",3,3,1,3) 较轻#deen("c2d",2,6,6) 中等#deen("a3d",3,6,1,6) 中等#deen("c2d",2,10,12) 强力#deen("a3d",3,10,1,12) 强力⑦ SpatialSoften()空间轴柔化滤镜。基本参数3个,如SpatialSoften (4,8,8)第一个指柔化程度,数值不要太大,2-5之间,后2个是亮度域值和色彩域值,均为整数型数值,需要测试调节.⑧ TemporalSoften()时间轴柔化滤镜。例:Temporalsoften(2,3,3,mode=2,scenechange=6)#一般用这个参数就行了⑨ Convolution3d()3D柔化滤镜.参数一般动画用animeHQ,电影用movieHQ.例: LoadPlugin("Convolution3d.dll")#转电影Convolution3d("movieHQ")#转动画#Convolution3d("animeHQ")⑩ sharpen()锐化滤镜:数值越大, 锐化效果越强.例:sharpen(0.2) 一般取0.2~0.3○11 WarpSharp()锐化滤镜: 主要改动depth,bump这两个数值越下面的线条越细例:LoadPlugin("WarpSharp.dll")#WarpSharp(depth=30,blur=2,bump=40,cubic=-0.6)#WarpSharp(depth=40,blur=2,bump=60,cubic=-0.6) #WarpSharp(depth=60,blur=2,bump=96,cubic=-0.6) #线条比上细,全屏的时候,明显感觉出锯齿○12 mergechroma(blur(1.3))模糊滤镜.柔化滤镜可以参考一些自动生成的模板,如# 1) little noise#Temporalsoften(2,3,3,mode=2,scenechange=6)#mergechroma(blur(1.3))#可以换成MergeLuma(blur(1.0))#FluxSmooth(5,7)## 2) medium noise#Temporalsoften(3,5,5,mode=2,scenechange=10)#Convolution3d("moviehq")#FluxSmooth(7,7)## 3) heavy noise#Temporalsoften(4,8,8,mode=2,scenechange=10)#Convolution3d("movielq")#FluxSmooth(10,15)可以使用其中的一套,使用具有处理效果的滤镜会增加压片的时间.片源不好就按需选用些.总之能尽量少用就少用,或者干脆不用.Blur(0,1)是模糊滤镜,设置了垂直参数可以消除些边缘刻痕可以连续加载Blur(0,1).Blur(0,1)可以结合MergeChroma 或者MergeLuma来使用,如MergeLuma(Blur(0,1)Blur(0,1))Blur(-1)就相当于锐化滤镜了(3)交错滤镜DecombIVTC和Deinterlace滤镜:由Donald A.Graft编写,新增加的专门处理NTSC格式动画的mode=2,要和Avisynth2.05以上版本使用,不然速度会慢一倍。guide 0~2,默认0, NTSC用1,PAL用2,可以提高IVTC准确度。gthresh 0~100,默认15,控制区分不同帧的程度。post 默认true,用来处理IVTC遗漏的细节,使画面略微模糊。threshold 0~255,默认15,控制post的程度。dthreshold 0~255,默认9,控制threshold判定IVTC遗漏的程度。blend 默认true,在交错画面用渲染来替代填充。chroma 默认false,在交错画面的亮度色度调整。cycle 2~25,默认5,每n帧删除1帧,NTSC选5,PAL选25。mode 0~2,默认2。mode=0 对cycle里最相近的帧不进行处理。mode=1 对cycle里最相近的帧进行处理,用于处理混合帧速。mode=2 在一个很长的范围里进行帧对比,可以正确处理动画里由8帧或12帧复制为29.97帧的情况。Threshold 默认0,控制mode=1时的处理重复帧的程度,Threshold默认100,控制mode=2时的处理重复帧的程度。Quality 0~3,默认2,采样和色度的质量,与速度成反比。但是最近的几个版本似乎都存在一个问题,就是处理后的画面有波动现象,并伴随影片里文字闪烁现象,所以还是用老版本的保险。例:LoadPlugin("Decomb.dll")Telecide(Guide=1,Gthresh=50,Chroma=True,Quality=3,Post=false)Decimate(cycle=5) # NTSC 3:2 PullDown LoadPlugin("Decomb.dll")Telecide(Guide=1,Gthresh=50,Chroma=True,Quality=3,Post=false)Decimate(Cycle=5,Mode=2) # NTSC Progressive和Interlaced混合LoadPlugin("Decomb.dll")Telecide(Guide=2,Gthresh=50,Chroma=True,Quality=3,Post=false)Decimate(Cycle=25) # PAL上面简单介绍了AviSynth的里的一些常用的滤镜,还有很多滤镜的功能有待遇您自己开发,还有重要的一点想说一下:avs脚本及其各种滤镜主要适用于大码率媒体文件的处理,也即我们经常接触的DVDRIP/TVRIP avi的制作优化。而对于高度压缩格式的rmvb来说,我们利用的avs滤镜更应该持慎重态度(如亮虑镜、字幕虑镜、画面调整等少数几个)!也就是说avs在rmvb压制方面,我们需要的是利用avs灵活的“中间人”的角色!而不是为了avs而去压制!我看到好多朋友初步接触rmvb压制,就在用avs压制DVDRIP-rmvb,完全套用个别论坛给出的avs脚本,里面全是各种滤镜,如3D增强、柔化、去丝等!这些滤镜如果制作DVDRIP的avi那是会获得肯定的画质效果,但是用于rmvb压制,仿佛就是东施效颦,忠言逆耳!real压制的原理和高码率的mpge4编码是不同的,后者有视频上层的概念,因此滤镜的修饰作用可以体现。我看Doom9讨论avs时,主要还是处理各种大数据量影像媒体为主。如处理自己DV录制的影视、电视卡录制的视频源之类的等。而众所周知的影响real媒体压缩效果就是片源效果。VCD片源的再怎么处理也不可能达到DVD的效果,而DVD片源,再怎么胡乱压制也不会差到哪里。因此avs直接在rmvb的压制中需要适当选择,而不能盲从,特别是对于各种滤镜的选择更要注意。一句话AviSynth非常灵活,要按具体情况具体分析。实例一:截边和改变分辨率实例二:合并输出实例三:加载一个720p的HDTV电影实例四:两段视频合为一段实例五:压制DVD实例一:截边和改变分辨率Avisource("H:\xx.avi").crop(5,20,630,440).lanczosresize(640,352)Corp与lanczosresize两者顺序不能变。Corp切黑边,想把一个640X480分辨率的片源,左右各切去5,上下各切去20.数值为(5,20,630,440)<左,上,右,下>.Lanczosresize改变分辨率.(宽,高)压RMVB如要改小分辨率的话建议:704X396的片源用576X324—640X480的片源用512X384的。尤其是DVD转RMVB,通常拷贝出来的VOB都带有大片黑边.一定要切了去否则压时浪费码率。另外比较保险的分辨有640X352,640X272切边的话可以用Easy Realmedia Producer(简称:ERP)里面的功能,方便一些;或者是用gk里的功能,可以计算失真。用ERP打开片源>参数设置>设置裁切区域>手动调节。然后用鼠标拖动红色边框,Inpug Preview为预览。实例二:合并输出v1=trim(avisource("H:\RAW\武器\9.avi",false).changefps(23.976),0,767)trim表示截取一段视频。v1=trim(avisource("H:\RAW\武器\9.avi",false).changefps(23.976),0,767)读取片源,false关闭音频。通常After Effects做的特效都是无声的,所以要关闭片源音频。changeFPS(23.976)强制显示帧数。合并的前提必需帧数统一,0,767)截取的帧数.这个可以用VDM查看。v2=trim(avisource("H:\字幕存储\武器\op.avi",false).changefps(23.976),0,226)这个是AE做的特效.事先用VDM得知为226帧.v3=trim(avisource("H:\RAW\武器\0.avi",false).changefps(23.976),994,0)这三个语句分别是截取了片源0-767帧,截取了AE特效的全部帧,截取了片源的994-最后的帧数.即是说切去的片源的中间一段,并用AE特效代替.a=v1+v2+v3将这三部分拼合起来return a.textsub("H:\09.ass").textsub("H:\武器op09.ass")最终输出并加挂字幕.有时两个片源分辨率不一样,此时还要统一分辨率.v1=trim(avisource("H:\RAW\wuqi\9.avi",false).changefps(23.976).lanczosresize(704,396),0,767)最终输出的结果是没有声音的.AVI内嵌时用.RMVB内嵌直接加挂音频就可以了.loadplugin("H:\plugin\mpasource.dll")读取mpasource.dll插件(加载MP3音频)v4=mpasource("H:\wav\武器\09.mp3")加载MP3音频.audiodub(a,v4)合并视频与音频.另:这样子加载上的音频.在压RMVB时,音频设置最好不用RA10 PLUS。之前用RA10 PLUS. 48Kbps压出来的几个片子音频头1两分钟都无音的…RA8没问题.120帧的片源的截切。要先用AVS强制显示23.976帧。然后用VDM打开看帧序号。合并时AE特效也要同样用这个帧率。AVS切广告+合并AE特效。国为牵扯到音频,所以得先处理音频。比如,0-100帧是AE特效,无声。300-350是广告切了广告的部分再合并AE特效,视频部分就完成了。因为AE特效是无声的,音频就要另写一个脚本来提取。即将原片源的广告切除的脚本,不禁声音。然后用VDM打开,保存WAV音频。120帧的片源的压缩。直接强制帧数:changefps(23.976)另一个是:selectevety(5,0)实例三:加载一个720p的HDTV电影这就是一个完整的AVS文件。SetWorkingDir("C:\Program Files\GordianKnot\AviSynthPlugins\")LoadPlugin("decomb.dll") LoadPlugin("VSFilter.dll") LoadPlugin("UnDot.dll")LoadPlugin("Convolution3D.dll")directshowsource("F:\HDTV\Heroes\test.mkv")textsub("F:\HDTV\Heroes\test.ass")lanczos4resize(480,272) Levels(0,1.3,255,0,255)Convolution3d("movieHQ") Tweak(0,1,15,1) sharpen(0.3) undot()AmplifydB(30,30,30)实例说明:#载入DLLSetWorkingDir("C:\Program Files\GordianKnot\AviSynthPlugins\") #指定了滤镜的路径LoadPlugin("decomb.dll") #调用decomb.dll滤镜LoadPlugin("VSFilter.dll") #调用VSFilter.dll滤镜LoadPlugin("UnDot.dll") #调用UnDot.dll滤镜LoadPlugin("Convolution3D.dll")#调用Convolution3D.dll滤镜第一行中指定了滤镜路径以后,下面再调用滤镜文件夹下的滤镜时就可以直接用loadplugin调用了,就不用在括号里写入路径。这仅限于指定文件夹下有的滤镜,没有的滤镜仍需要写出完整路径。#片源处理:加黑边,加电影字幕directshowsource("F:\HDTV\Heroes\test.mkv") 调用片源textsub("F:\HDTV\Heroes\test.ass") 调用片源字幕(sub,inx字幕用VobSub滤镜,aas,ssa,srt等别的字幕字幕用TextSub滤镜)#改变视频大小lanczos4resize(480,272) (480,272)是16:9的标准模式#调整视频滤镜Levels(0,1.3,255,0,255) 背景亮度加强1.3Convolution3d("movieHQ") 3D柔化滤镜,大视频转成小视频,这个东西很有效果!Tweak(0,1,15,1) 增强亮度15sharpen(0.3) 锐化,在iphone上看更加清楚undot() 消除噪点#调整声音滤镜AmplifydB(30,30,30) #左中右声音各加强30DB实例四:两段视频合为一段这也是一个完整的AVS文件LoadPlugin("VSFilter.dll")b=directshowSource("e:\avs\cd1.avi").TextSub("e:\BBSLogo\logo.ssa").VobSub("e:\avs\cd1.idx")c=directshowsource("e:\avs\cd2.avi").VobSub("e:\avs\cd2.idx") final=b+c return final 说明一下LoadPlugin("VSFilter.dll") #调用字幕滤镜b=directshowSource("e:\avs\cd1.avi").TextSub("e:\BBSLogo\logo.ssa").VobSub("e:\avs\cd1.idx")B段为CD1.avi,加上了水印logo.ssa,加上了DVD字幕cd1.idx,大家可以自行在这段中加上一些参数。格式为:参数+.+参数+.+参数+……….例:directshowSource("e:\cd1.avi").TextSub("e:\logo.ssa").VobSub("e:\cd1.idx").lanczos4resize(480,272). Levels(0,1.3,255,0,255). Tweak(0,1,15,1).看明白了吧,中间间隔符号为小数点“.”c=directshowsource("e:\avs\cd2.avi").VobSub("e:\avs\cd2.idx") C段为CD2.avi,加上了字幕,没加水印final=b+c 影片为B段+C段return final 结束语,没有实际含义可以在一定程度上解决单CD码率过度错位。如分别1pass压制CD1和CD2可能会由于码率错位太大而使文件增大,但如果2个一起压制,则可能由于码率补偿,平均码率错位反而不大,而使文件大小减小。实例五:压制DVD下面针对DVD的压缩介绍一下avs运用。对于压制DVD,我们一般已经用DVD Decrypter将DVD抓取出来,并且用DVD2AVI分离了DVD的视音频,得到视频的临时文件*.d2v和音频文件*.ac3等。压制DVD的avs脚本除了上面的常用滤镜和脚本外,还有一些自己特别的地方。SetWorkingDir("d:\GORDIA~1\") # 设定AVS 脚本调用dll 插件文件的工作路径LoadPlugin("mpeg2dec3.dll") # 调用DVD的mpeg2编码器插件LoadPlugin("decomb.dll") # 调用交错滤镜插件,包含了IVTC 和Deinterlace 两种滤镜LoadPlugin("TomsMoComp.dll") # 调用交错滤镜插件,对应Deinterlace 滤镜中的TomsMoComp 脚本命令LoadPlugin("SimpleResize.dll") # 调用变形滤镜插件,对应SimpleResize 脚本命令mpeg2source("F:\temp1\1.d2v") # 源d2v 文件的路径trim(startframe,endframe) # 截取VOB 片断进行压缩。startframe 为起始帧,endframe 为结束帧。主要用于片断测试压缩或更高级的分段处理压缩Telecide(guide=1) # IVTC 滤镜。多用于做NTSC 制式DVD 的IVTC 处理Decimate(Cycle=5) # IVTC 滤镜。用于NTSC 制式DVD 删除重复帧处理,即 29.970fps –> 23.976fpsFieldDeinterlace() # Deinterlace 滤镜。用于做PAL 制式DVD 的Deinterlace 处理,不能同IVTC 和TomsMoComp滤镜同时使用FieldDeinterlace(blend=false) # 同上TomsMoComp(1,5,1) # Deinterlace 滤镜。在处理PAL 制式DVD 时,一般不能同FieldDeinterlace 和 Telecide 同时使用crop(14,8,-12,-12) # 裁切命令。参数为(左、上、右、下),代表各边被裁切去的象素值LanczosResize(640,352) # 变形滤镜。确定最终AVI 的分辨率,常用于普通电影SimpleResize(640,352) # 变形滤镜。确定最终AVI 的分辨率,常用于二维动画,不能和LanczosResize 同时使用SelectRangeEvery(xxx,14) # 全片平均采样测试语句。其中xxx 主要用于 COMPRESSIBILITY CHECK 测试,即(2pass/1pass)*100% 预测算,而正式压缩时不用。其中xxx 为平均采样点的间隔值。例如当进行全片 5% 预测,则xxx=280,10%为140,15%为93压制DVD视频于处理一般avi有不少需要注意的地方。例如IVTC、切边、变形等,IVTC可以参考 IVTC技术原理、隔行与逐行之间;切边、变形可以参考 关于切边和变形IVTC是其中比较重要的一环。根据检测DVD2AVI显示的VOB 的Video Type 和 Frame Type, 确定影片的 IVTC 或 Deinterlaced 处理方式”,AVS 脚本命令的使用原则如下:A、对于NTSC Interaced 型:需要做IVTC 和去重复帧处理,则AVS 脚本应包含 Telecide(guide=1) 和 Decimate(Cycle=5) 语句。B、对于NTSC Progressive 型:不做任何处理,则AVS 脚本无需包含 IVTC 和 Deinterlace 滤镜。C、对于PAL Progressive 型:不做任何处理,则AVS 脚本无需包含 Deinterlace 滤镜。D、对于PAL Interlaced 型:需要做Deinterlace 处理,则AVS 脚本应包含 FieldDeinterlace() 或 FieldDeinterlace(blend=false) 或TomsMoComp(1,5,1) 语句。E、对于NTSC FILM 型:若为 纯FILM 或 FILM≥95% 时,则在DVD2AVI 阶段就已经过force film,这里就无需处理了; 若FILM < 95% 时,需要做IVTC 处理,则AVS 脚本应包含 Telecide(guide=1) 和 Decimate(Cycle=5) 语句。F、对于NTSC Interlaced / Progressive 混合型:全部做IVTC 处理,则AVS 脚本应包含Telecide(guide=1,Gthresh=50,dthreshold=8,threshold=0,Post=true).Decimate(5) 语句。