第一节 AviSynth 简介
AviSynth 是AVI SYNTHesizer 的缩写,意思就是AVI 和成器,是一个Frameserver。(Frameserver 就是一个把影像文件从一个程序转换到另外一个程序的
过程, 其间没有临时文件或中介文件产生)
AviSynth 是由Ben Rudiak-Gould 首创的一种非常有用的工具,能够提供各种
方式来处理影像文件。最独特的就是AviSynth 并不是一个独立的影像处理程序,而是在影像文件和影像处理软件之间担任“中间人”的角色。
AviSynth 的基本工作原理是这样的:
首先由使用者建立一个包含特定命令的文本,称之为“脚本”(后缀为avs),这
些命令指定要运行处理的影像文件和滤镜;然后运行影像应用程序,比如VD 或ND,
打开脚本。此时AviSynth 就开始工作了,打开脚本中指定的影像文件,运行特定的滤镜,并把输出结果提供给影像应用程序。但影像应用程序并不了解AviSynth 在后台所做的处理,而认为是直接打开了一个“被处理过”的影像文件。
第二节 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:gkAviSynthPluginsDGDecode.dll")
#source
mpeg2source("F:dvdrip-tempsoultaker.d2v")
#crop
crop(4,4,712,476)
#resize
LanczosResize(640,352)
上面的例子中,“#”后面跟着的句子是被“注释”掉的。注释是什么意思呢?就是说, AviSynth 读到这句话的时候,一看到这句话前面有“#”,就会54(无视)它,继续读到下已行。编写脚本写注释是一个好习惯,尤其是极其复杂的脚本。这种情况AVS 脚本大概不会遇到,但是当编写PHP 的时候,成千上万行的代码如果没有注释……那无论是试图阅读代码的人还是作者本人,都会头晕脑胀。
紧接着下面,“LoadPlugin”,这是一个函数的名字,后面的括号“()”中的内容就是参数。LoadPlugin 函数的功能是载入插件,后面括号中的参数便是告诉函数,要载入“E:gkAviSynthPluginsDGDecode.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-tempsoultaker.d2v",idct=7)
这个例子很明白,"F:dvdrip-tempsoultaker.d2v"是字符型的变量值,要加双引号;7 是数字型的参数,不用加双引号。
下面介绍一些小花招,让我们的处理更加轻松。
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 常用内置滤镜介绍
一、加载插件
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.5plugins") #设置滤镜的目录
LoadPlugin("VSFilter.dll") #调用字幕滤镜插件
二、源媒体读取
1.DirectShowSource() 万能调用
如:DirectShowSource("e:vobss.VOB")
DirectShowSource()在高版本avisnyth中显得更万能些,常用的媒体格式,如avi、mpge1/dat、mpge2/vob/bin都可以加载,另外可以不用分离视频和音频,而
直接压缩!想要直接压制vob请使用高版本的avisynth,如目前的2.54。如果遇到打
不开的媒体格式你大都可以试试看DirectShowSource。
2.AVISource() avi文件调用
如:AVISource(e:avi1.avi,false)
用于导入AVI格式的影片,需要安装相应的Codec才能导入。这个对于DVDRIP压制者来说可能更常用些.false表示禁止音频!
3.mpeg2source() 用于解码DVD的mpeg2格式的视频
例:mpeg2source("XXX.d2v")
4.WAVSource("e:vobss.wav") 读取wave音频
5.AC3SOUECE("e:vobss.ac3") 读取ac3音频
6.MPASOURCE("e:vobss.MP3") 读取mp3音频
注:WAVSOURCE和AVISOURCE是属于核心脚本,无须读取插件,但
AC3SOURCE和MPASOURCE需要读取AC3SOURCE和MPASOURCE插件。DirectShowSource
的读取需要安装各种音频和视频的解码器。
7.convertfps=true
这个要特别说明一下,convertfps=true语句的作用是防止转换可变桢率
的RMVB和WMV时出现影音不同步。rmvb/wmv都是是浮动帧率,如果你指定帧率反而会不同步,所以不要指定fps这个数值。载入行要这么写:directshowsource(“文件
路径全名”,convertfps=true)。
三、调整大小
1.LanczosResize()
缩放滤镜:LanczosResize是BicubicResize的替代者,提供更精准、更
锐利的画质。在日本普遍使用LanczosResize,欧美大多使用BicubicResize。本来是
日本人开发的第三方滤镜,自AviSynth 2.05版本开始吸收为内置滤镜。
例:LanczosResize(640,480) #把分辨率改变为640*480
2.SimpleResize() 外置滤镜
放大缩小:由trbarry编写的,由于对SSE进行了优化,所以速度快,效
果好。替代了AviSynth中的BilinearResize。和LanczosResize的米切尔双立方体算法不同,这个是单纯的双线性算法。LanczosResize的画质更锐利和真实,适合普通电影;而SimpleResize的画质较柔和,适合动画。
例:LoadPlugin("SimpleResize.dll")
SimpleResize(640,480) #作用与LanczosResize和BicubicResize
是一样的。
3. 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
四、加黑边
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则可以使用多种音频格式,一般是单独压缩视频,
然后再用其他软件合成视频音频。
2.GetLeftChannel() 和 GetRightChannel()
获取声道:把立体声的左右声道单独返回,适用于左右声道不同语种的WAV。
例:stereo=WavSource("test.wav")
return GetLeftChannel(stereo)
返回test.wav的左声道
3.DelayAudio()
声音延迟:由于从VOB里分离的AC3通常有延迟,所以用Azid转码得到的WAV也有延迟,在用AudioDub合并时就需要加上这个延迟。
例:写法①Wa vSource("test.wav").DelayAuido(0.5) #把test.wav延
迟半秒。
写法②DelayAudio(wavsource("XXX.WAV"),-30)30的单位是毫秒,经典的解决音画同步问题。
4.ResampleAudio() 音频重新采样
例:WAVSOURCE("xxx.wav").ResampleAudio(48000) #音频重新采样,
采样率48000
5.AmplifydB() 左右声道的放大减小
AmplifydB(wavsource("xxx.wav"),3,3)#左右声道放大3DB 6.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:avsjrvs.ssa") 加载水印文本
例2:LoadPlugin("VSFilter.dll")
TextSub("F:DVDjs60js601.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()其他的也类似。
十、截图
没有想到用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")
十一、常见的外置滤镜
AviSynth最强大之处就是有数目繁多、功能强大的外置(或称“第三方”)滤镜;同时还可以调用VD以及AviUtl的滤镜;甚至还有特别开发的接口,可以让TMPGEnc和AviUtl读取AVS。和内置滤镜不同,外置滤镜需要先调用声明,再可以使用。
(1)源文件滤镜
① MPEG2Dec
由dividee编写的读取DVD2AVI产生的d2v工程文件的滤镜,同时内建去除Noise的TemporalSmoother。
例:LoadPlugin("MPEG2Dec.dll")
MPEG2Source("test.d2v")
② MPEG2Dec2
trbarry在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)交错滤镜
Decomb
IVTC和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
(3)处理滤镜
① 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)
⑤ K enKunNR()
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
⑾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) #线条比上细,全屏的时候,明显感觉出锯齿
⑿mergechroma(blur(1.3))
(4)模糊滤镜.
柔化滤镜可以参考一些自动生成的模板,如
# 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)就相当于锐化滤镜了
十二、合成
1.
LoadPlugin("VSFilter.dll")
LoadPlugin("mpasource.dll")
video=AVISource("c:\1.avi",false).TextSub("c:\logo.ssa").VobSub("c:\1. idx").Lanczosresize(512,384) #定义了avi源、字幕、水印和画面大小
audio=mpasource("c:\1.mp3") #音频
AudioDub(video, audio)
为简便起见,以avi文件为例说明语法,但此例不推荐用,直接用压缩软件+ffdshow设置即可。原始avs加载了至少3个额外的滤镜,已略去!
该方法可以用于双语DVDRIP的压制,使用双语处理的软件提取自己要的声道即可,而不要再合并成avi了!
DTS音轨格式的可以用这个avs法压制
先根据中高级教程里的方法将DTS音频转换成wave格式,如放在e:\avi\目录
里
avs可以这么写:
LoadPlugin("VSFilter.dll")
video=AVISource("c:\1.avi",false).TextSub("h:\avs\jrvs.ssa").VobSub("e
:\avi\t1.idx")
audio=WAVSource("e:\avi\t1.wav")
AudioDub(video, audio)
如此可以不用再合并那么费事了!
2.
LoadPlugin("VSFilter.dll")
b=directshowSource("e:\avs\cd1.avi").TextSub("e:\BBSLogo\logo.ssa").Vo bSub("e:\avs\cd1.idx").Lanczosresize(608,320)
c=directshowsource("e:\avs\cd2.avi").VobSub("e:\avs\cd2.idx").Lanczosr esize(608,320)
final=b+c
return final
这个语法很好,直接将多CD的压制成一个rmvb,可以在一定程度上解决单CD
码率过度错位。如分别1pass压制CD1和CD2可能会由于码率错位太大而使文件增大,但如果2个一起压制,则可能由于码率补偿,平均码率错位反而不大,而使文件大小
减小。
请注意,这里自己可以将水印放在CD1上,而CD2不会显示(说明什么?呵呵!)
一般DTS的都要2CD以上,有时影片长度也不长,所以DTS的电影可以这么写
avs压制
video=AviSource("e:\cd1.avi",false).Vobsub("e:\cd1.idx").TextSub("c:\l ogo.ssa")+AviSource("e:\cd2.avi",false).VobSub("e:\cd2.idx")
audio=wavSource("e:\cd1.wav")+wavSource("e:\cd2.wav")
AudioDub(video, audio)
3.双语的vcd分成单语来做
LoadPlugin("VSFilter.dll")
video=DirectShowSource("F:\mpge\*.dat").Levels(0,1.7,255,0,255).Lanczo sResize(480,360)
return GetChannel(video,2)
1. left channel
2. right channel ,一般是国语
据说这里的*.dat表示成批压制!
如果要求控制帧率,那么有句改成这个
video=DirectShowSource("F:\mpge\*.dat",fps=25)
4.双语rmvb的制作
a,双语DVDRIP压制成双语的rmvb
先用AVIMux_GUI来处理音频。右键点击提示另存为mp3即可
对于喜欢压制rmvb而门外与DVDRIP压制的朋友建议使用AVIMux_GUI来处理音频,更显轻松合理。
avs语法如下:
LoadPlugin("VSFilter.dll")
video=AVISource("c:\1.avi",false).TextSub("c:\logo.ssa").VobSub("c:\1. idx")
R=MPASOURCE("e:\R.MP3")
L=MPASOURCE("e:\L.MP3")
stereo = MergeChannels(R,L)
return AudioDub(video, stereo)
5.双语VCD-rmvb的压制
avs语法如下
LoadPlugin("VSFilter.dll")
video=DirectShowSource("F:\mpge\*.dat").Levels(0,1.7,255,0,255).Lanczo sResize(480,360)
stereo=GetChannel(video,1,2)
return AudioDub(video,stereo)
注:不过双语VCD-rmvb可以直接使用压缩软件进行制作,声音码率使用44k以
上的立体声即可。我这里是想加大点亮度,那么同时就放大、水印一起来好了,呵呵!
以上都是avi,都可以自动关联ffdshow,所以亮度可以在ffdshow里设置!但
请同时去掉ffdshow的字幕和avisynth功能
下面集中给2个用avs法压制vob-rmvb的avs代码
先按照常规教程里介绍的方法将vob文件拷贝到硬盘上,然后在记事本里写上如
下语句,保存为后缀名为avs的文件即可
然后可以用mediaplayer播放这个avs(想一想,是怎么个效果。呵呵,avs不
是联系源文件和应用程序的桥梁吗,播放avs就相当于在播放带字幕和水印的影视了)
1.无黑边者
LoadPlugin("VSFilter.dll")
DirectShowSource("e:\vob\ts.VOB")