AviSynth入门与应用指南.docx
《AviSynth入门与应用指南.docx》由会员分享,可在线阅读,更多相关《AviSynth入门与应用指南.docx(18页珍藏版)》请在冰豆网上搜索。
AviSynth入门与应用指南
AviSynth入门与应用指南
AviSynth是AVIsynthesizer的缩写,也经常称之为avs,简单来说就是个合成平台!
在媒体文件和压缩软件之间担任“桥梁”的角色。
这座桥梁不是简单的独木桥、而是有栏杆、有台阶(比喻其提供的大量虑镜)。
因此比较灵活!
如对于压制real格式来说,源媒体文件是vob、d2v(DVD处理过程中的中间文件)、ac3、mp3、avi、DAT/mpge等,而应用程序是各种real压缩软件如Helixrealproducer、BatchRealProducer144和EasyRealProducer14,它们都支持avs的导入。
当然avs并不只是用于real压缩。
它是媒体文件和压缩软件之间的“桥梁”,只要avs支持你所需要处理的媒体文件,压缩软件也支持导入avs文件,你都可以通过avs对视频进行处理,然后让压缩软件输出你所需要的格式的文件。
也许你还是不明白AviSynth能做什么,举些简单的例子,你需要对一段avi进行处理。
你想把画面尺寸缩小,你可以用avs;你想把画面上的杂点消除,你可以用avs;你想把画面处理得锐利些,你还是可以用avs;AviSynth是桥梁,位于媒体文件和压缩软件之间,压缩软件可以通过AviSynth调用和处理媒体文件。
而且不仅仅是压缩软件,甚至是播放器也能调用avs,对播放的文件进行处理,得要需要的播放效果。
AviSynth首先要编写建立一个包含特定命令的文本。
注意这里的文本,简单的说就是windows的写字板写出来的文件,你可以用任何一种文本编辑器打开进行编辑。
这一特定命令的文本称之为"脚本"(文件后缀名为avs),这些命令指定要运行处理的媒体文件和滤镜!
AviSynth的平台和相关滤镜更新比较快,功能不断增加,编辑avs脚本也更简单。
在射手网可以下载到这个平台软件。
至于滤镜可以到得到http:
//www.avisynth.org/warpenterprises/
下载,至于doom9论坛,大家知道有这么个乌合的巢穴就可以了!
上面简单介绍了AviSynth的一些基本概念作为引子,在正文开始前,我想首先交待很重要的一点:
avs脚本及其各种滤镜主要适用于大码率媒体文件的处理,也即我们经常接触的DVDRIP/TVRIPavi的制作优化。
而对于高度压缩格式的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非常灵活,要按具体情况具体分析。
第二,需要认识avs的桥梁作用。
修饰之余尽可能的使用压缩软件本身的功能。
对于real压缩,如rmvb压制中帧率的改变就可以在压缩软件中进行设置,而不要在avs中写入相关的语句。
另外各种压缩软件使用的是real的压缩内核,而real压缩一般以YV12的快速处理环境为主。
这也是在使用avs压制rmvb时需要注意的问题。
自己觉得上文对avs的介绍及应用范围要比下面的内容来的更重要!
这是我直到现在才撰写完毕这篇小文的良苦之处。
下面先简单的介绍些基本方法和常用滤镜,滤镜可以理解为各种处理视频的工具。
首先安装avisynth,并将常用虑镜插件dll文件拷贝到安装目录的plugin目录里。
一、基本代码
1.LoadPlugin(),加载插件。
如:
LoadPlugin("VSFilter.dll")加载字幕插件
LoadPlugin("mpeg2dec3.dll")加载DVD的mpeg2编码器插件
LoadPlugin("mpasource.dll")加载mp3插件
请下载以上提到的滤镜!
并解压制到plugin目录里(当然目录可以自己选定),如果avs文件和滤镜不再同一个目录下,记得要把加载滤镜的路径名写全了。
有些滤镜或者脚本是avisynth核心的滤镜或脚本,也就是avisynth本身提供的功能,这些就不需要加载,其它的都需要加载。
你也可以用SetWorkingDir设定插件文件的工作路径
SetWorkingDir("d:
\GORDIA~1\")#设定AVS脚本调用dll插件文件的工作路径
2.源媒体读取
DirectShowSource("e:
\vob\ss.VOB")
DirectShowSource()在高版本avisnyth中显得更万能些,常用的媒体格式,如avi、mpge1/dat、mpge2/vob/bin都可以加载,另外可以不用分离视频和音频,而直接压缩!
想要直接压制vob请使用高版本的avisynth,如目前的2.54。
如果遇到打不开的媒体格式你大都可以试试看DirectShowSource。
AVISource(e:
\avi\1.avi,false)
这个对于DVDRIP压制者来说可能更常用些.false表示禁止音频!
mpeg2source("XXX.d2v")
这个用于解码DVD的mpeg2格式的视频
WAVSource("e:
\vob\ss.wav")读取wave音频
AC3SOUECE("e:
\vob\ss.ac3")读取ac3音频
MPASOURCE("e:
\vob\ss.MP3")读取mp3音频
注:
WAVSOURCE和AVISOURCE是属于核心脚本,无须读取插件,但AC3SOURCE和MPASOURCE需要读取AC3SOURCE和MPASOURCE插件。
DirectShowSource的读取需要安装各种音频和视频的解码器
3.crop()、LanczosResize()裁黑边和调整大小
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画面大小了!
4.亮度滤镜
亮度滤镜是使用avs压制vob-rmvbvcd-rmvb的又一关键因素。
画面太暗的rmvb是失败之作
介绍2个
Levels(0,1.5,255,0,255)
改第二个,我感觉数值在1.3-2之间比较合适,一般1.5比较合适
Tweak(0,1,20,1)
4个浮点数分别表示:
调节色度,饱和度,亮度,对比度。
一般将第三个调节在0-30之间,以15-20为宜
个人感觉level()比较好,主要调背景为主,而vob文件主要是背景暗。
注意Tweak的其他调节可能和颜色控制环境有关,如YUY2,因此其它的最好不要再改动
注:
ffdshow目前的版本还是不能支持mpge2唉!
否则可以利用它来调节亮度了
5.字幕滤镜
TextSub("h:
\avs\jrvs.ssa")加载水印文本
VobSub("e:
\vob\ss.idx")加载影片字幕
6.其它虑镜介绍,在rmvb压制中不推荐使用,如部分朋友选用的
FluxSmooth(5,7)柔化滤镜
Convolution3d("moviehq")3D优化滤镜
2者需要加载相应的滤镜插件
7.常用音频处理脚本:
ResampleAudio(44100)
DELAYAUDIO(XXX,30)
AmplifydB(wavsource(“XXX.WAV”),3,3)
例子:
DelayAudio(wavsource(”XXX.WAV“),-30)30的单位是毫秒,经典的解决音画同步问题;
又如:
WAVSOURCE(“xxx.wav”).ResampleAudio(48000)
音频重新采样,采样率48
再如:
AmplifydB(wavsource(“xxx.wav”),3,3)
左右声道放大3DB
8.色彩模式的转换
有些压缩软件不支持某些色彩模式,例如默认情况下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()
其他的也类似
9.截图
没有想到用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")
10.合成
AudioDub(video,audio)
合成常用于real格式的压制,制作rmvb的时候就需要把视频和音频合成后交给real压缩软件,而制作avi则不需要合成视音频。
这主要是因为real格式要求视音频都必须用real压缩,而avi则可以使用多种音频格式,一般是单独压缩视频,然后再用其他软件合成视频音频。
简单的例子
V=AVISOURCE(“xxx.avi”,FALSE,“YUY2”)
A=WAVSOURCE(“xxx.wav”)
AudioDub(V,A)
合成在rmvb压制方面的例子可以参考后面的rmvb压制部分
需要注意的是avs的脚本可以有两种写法
例如Crop切边,语法是
Crop(clip,intleft,inttop,intwidth,intheight,boolalign)
clip就是源
使用的时候可以写
Video=Crop(Video,8,0,704,480)
也可以写
Crop(8,0,704,480)
但是两种写法是有区别的具体的可以比较下面的两个例子
#PLUGINS
LoadPlugin("C:
\PROGRA~1\Autorv9\SOFTS\AVSFILE\MPEG2DEC3.DLL")
#VIDEOSOURCE
Video=Mpeg2Source("E:
\a.d2v")
#CROPPING
Video=Crop(Video,8,0,704,480)
#RESIZING
Video=BicubicResize(Video,640,480,0,0.5)
#FINISH
Return(Video)
#PLUGINS
LoadPlugin("C:
\PROGRA~1\Autorv9\SOFTS\AVSFILE\MPEG2DEC3.DLL")
#VIDEOSOURCE
Mpeg2Source("E:
\a.d2v")
#CROPPING
Crop(8,0,704,480)
#RESIZING
BicubicResize(640,480,0,0.5)
也就是说如果你制定了源Video,那么你就要注意了必须要调用源的地方都要写上源,最后还要Return(Video)。
两种写法不能混用哦。
二、压制DVD
下面针对DVD的压缩介绍一下avs运用。
对于压制DVD,我们一般已经用DVDDecrypter将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.976fps
FieldDeinterlace()#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主要用于COMPRESSIBILITYCHECK测试,即
(2pass/1pass)*100%预测算,而正式压缩时不用。
其中xxx为平均采样点的间隔值。
例如当
进行全片5%预测,则xxx=280,10%为140,15%为93
压制DVD视频于处理一般avi有不少需要注意的地方。
例如IVTC、切边、变形等,IVTC可以参考IVTC技术原理、隔行与逐行之间;切边、变形可以参考关于切边和变形
IVTC是其中比较重要的一环。
根据检测DVD2AVI显示的VOB的VideoType和FrameType,确定影片的IVTC或Deinterlaced处理方式”,
AVS脚本命令的使用原则如下:
A、对于NTSCInteraced型:
需要做IVTC和去重复帧处理,则AVS脚本应包含Telecide(guide=1)和Decimate(Cycle=5)语句。
B、对于NTSCProgressive型:
不做任何处理,则AVS脚本无需包含IVTC和Deinterlace滤镜。
C、对于PALProgressive型:
不做任何处理,则AVS脚本无需包含Deinterlace滤镜。
D、对于PALInterlaced型:
需要做Deinterlace处理,则AVS脚本应包含FieldDeinterlace()或FieldDeinterlace(blend=false)或
TomsMoComp(1,5,1)语句。
E、对于NTSCFILM型:
若为纯FILM或FILM≥95%时,则在DVD2AVI阶段就已经过forcefilm,这里就无需处理了;若
FILM<95%时,需要做IVTC处理,则AVS脚本应包含Telecide(guide=1)和Decimate(Cycle=5)语句。
F、对于NTSCInterlaced/Progressive混合型:
全部做IVTC处理,则AVS脚本应包含
Telecide(guide=1,Gthresh=50,dthreshold=8,threshold=0,Post=true).Decimate(5)语句。
三、rmvb的压制
下面是一些使用avs压制rmvb的方法
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").VobSub("e:
\avs\cd1.idx").Lanczosresize(608,320)
c=directshowsource("e:
\avs\cd2.avi").VobSub("e:
\avs\cd2.idx").Lanczosresize(608,320)
final=b+c
returnfinal
这个语法很好,直接将多CD的压制成一个rmvb,可以在一定程度上解决单CD码率过度错位。
如分别1pass压制CD1和CD2可能会由于码率错位太大而使文件增大,但如果2个一起压制,则可能由于码率补偿,平均码率错位反而不大,而使文件大小减小。
请注意,这里自己可以将水印放在CD1上,而CD2不会显示(说明什么?
呵呵!
)
一般DTS的都要2CD以上,有时影片长度也不长,所以DTS的电影可以这么写avs压制
LoadPlugin("VSFilter.dll")
video=AviSource("e:
\cd1.avi",false).Vobsub("e:
\cd1.idx").TextSub("c:
\logo.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).LanczosResize(480,360)
returnGetChannel(video,2)
1leftchannel
2rightchannel,一般是国语
据说这里的*.dat表示成批压制!
如果要求控制帧率,那么有句改成这个
video=DirectShowSource("F:
\mpge\*.dat",fps=25)
以上都是avi,都可以自动关联ffdshow,所以亮度可以在ffdshow里设置!
但请同时去掉ffdshow的字幕和avisynth功能
4
制作成单音轨双语
1.
Left=wavSource("C:
\1.wav").getleftchannel
Right=wavsource("C:
\2.wav").getrightchannel
mergechannels(Left,Right)
#monotostereo(Left,Right)
2.
Left=DireectShowSource("C:
\1.mp3").getleftchannel
Right=DirectShows