大家可能还记得,在我写过的那篇DVD压制入门里,用GardionKnot完成对d2v工程文件的设置后(如分辨率、裁边等),然后就到save & encode这步,这里GK就调用AviSynth做frame sever。在那个帖子里,在这步就是对avs(AviSynth的工程文件)进行修改后再交给VirtualDub或者NanDub进行压制的。
在这里,就对AviSynth作为frame sever的一些用法做粗略的讲解一下咯。
有关AviSynth的介绍和相关滤镜(plugin)的说明可以去
www.avisynth.org和
www.doom9.org论坛的AviSynth区查看,最简单的是去看AviSynth目录下的doc里面的文档。这里我不多说,只讲一些实例。
一、在压制DVD时,对GK完成的avs文件进行编辑,加入自己喜欢的滤镜,再导入到VD或者ND进行压制。
在GK完成所有设置让用户对avs文件进行编辑时,我们选择save,存下avs文件。Gk就产生的一个典型的avs文件。
#
# Created with Gordian Knot
#
#
http://thewef.nav.to#
# PLUGINS
# get them from
http://users.win.be/divideeLoadPlugin("C:\PROGRA~1\GORDIA~1\mpeg2dec.dll")
#LoadPlugin("C:\PROGRA~1\GORDIA~1\decomb.dll")
#LoadPlugin("C:\PROGRA~1\GORDIA~1\InverseTelecine.dll")
#LoadPlugin("C:\PROGRA~1\GORDIA~1\Avisynth_Spatial.dll")
#LoadPlugin("C:\PROGRA~1\GORDIA~1\GreedyHMA.dll")
#LoadPlugin("C:\WINDOWS\System32\vobsub.dll")
#LoadPlugin("C:\PROGRA~1\GORDIA~1\SimpleResize.dll")
#
# SOURCE
mpeg2source("H:\temp\space.d2v")
#
# TRIM
#trim(startframe,endframe)
#
# IVTC
#Telecide()
#Decimate(cycle=5)
# or use
#InverseTelecine(40,10,15)
#GreedyHMA(1,0,4,0,0,0,0,0)
#
# DEINTERLACING (1)
#FieldDeinterlace()
#
# CROPPING
crop(4,55,713,366)
#
# DEINTERLACING (2)
#VerticalReduceBy2
# or maybe
#GreedyHMA(1,0,0,0,0,0,0,0)
#
#
# SUBTITLES
#VobSub("FileName")
#
# RESIZING
BicubicResize(640,368,0,0.75)
#
# DENOISING: choose one combination (or none)
# 1) little noise (fast)
#TemporalSmoother(2,1)
#
# 2) medium noise (slow)
#SpatialSoftenMMX(1,4,6,false,false,4,4,6,8)
#TemporalSmoother(2)
#
# 3) heavy noise (very slow, you have been warned)
#SpatialSoftenMMX(2,4,6,false,false,4,4,6,8)
#TemporalSmoother(3)
#SpatialSoftenMMX(1,4,6,false,false,4,4,6,8)
#
# BORDERS
#AddBorders(left,top,right,bottom)
#
# COMPRESSIBILITY CHECK
# !!!!Snip Size now has to be 14 for use in GKnot!
#SelectRangeEvery(280,14)
#
# FOOL CCEnc
#ResampleAudio(44100)
大家可以看到,GK对每一段都有相关的说明。开始的load("….\xxx.dll")这里,就是AviSynth导入准备调用的滤镜的语句。然后跟着就是调用滤镜了,每个滤镜一行,就和编程调用函数一样,比较好理解。
好,那现在我们就对上面那个典型的avs进行边编辑边说明咯。
首先所有以#开头的行都是说明,下面我将没必要的删掉,大家对比一下。
#AviSynth206 needn't set memory cacheSetMemoryMax(128)
# PLUGINS
LoadPlugin("C:\PROGRA~1\GORDIA~1\mpeg2dec.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\decomb.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\convolution3d.dll")
#LoadPlugin("C:\WINDOWS\System32\vobsub.dll")
LoadPlugin("C:\PROGRA~1\Gabest\VobSub\textsub.vdf")
LoadPlugin("C:\PROGRA~1\GORDIA~1\SimpleResize.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\warpsharp.dll")
# SOURCE
mpeg2source("H:\temp\space.d2v")
# IVTC
Telecide(chroma=true,gthresh=50,guide=1)
Decimate(mode=2,cycle=5,quality=3)
# CROPPING
crop(4,55,713,366)
# SUBTITLES
#VobSub("FileName")
textSub("H:\space.ssa")
# DENOISING
convolution3d(1,4,4,4,4,2.8,0)
# RESIZING
#LanczosResize(640,368)
SimpleResize(640,368)
# SHARPEN
WarpSharp(depth=128, blur=3, bump=128, cubic=-0.6)
好,下面就对现在这个干净点avs说明。
第一行,这个是一个对缓存的设置,设多大大家可以自己衡量。最小不要小于32mb,这里设置成128mb(1/4 max),是因为考虑后面将要调用到的Decomb和其他滤镜需要比较大的处理空间,为了加快速度,所以设到128mb了。
然后是调用plugin的dll。第三行,调用导入d2v工程文件的plugin: mpeg2dec.dll。第四行,调用进行ITVC的decomb.dll。第五行,调用convolution3d.dll,这个滤镜的作用是清除noise和将部分对人眼不敏感的detail去掉,这样就可以让画面清晰的同时,因detail相对少了所以能用较小的码率获得差不多甚至更好的画面感觉。第六/七行,如果内嵌的是.idx和.sub的图形字幕,则要调用VobSub的vobsub.dll。如果内嵌的是文本字幕的,则用textsub.vdf。第八行,调用SimpleResize.dll,用这个去做resize,效果不错而且速度也较快。但据说LanczosResize效果更好,不过需要的时间就多了点。第九行,调用WarpSharp.dll,强调画面的边界感,加强画面对比度,对动画使用这个滤镜效果非常明显。
然后是使用滤镜和一些参数设置了。第十一行,首先调入d2v工程文件作为frame sever的源文件。第十三/十四行,ITVC。第十六行,裁黑边(这里直接套用GK得出得数据)。第十八/十九行,调用字幕。对图形字幕,使用vobsub(“字幕路径\字幕文件名”)。对文本字幕,使用txtsub(“字幕路径\字幕文件名.后缀”)。第二十一行,调用convolution3d对画面进行清除noise,假如源文件的画质非常清晰就不需要使用这个滤镜。这个滤镜最好作用在那些大碟转成dvd或者其他画面比较粗糙等场合(VHS版或者V8版等等)。第二十三/二十四行,画面大小设置resize。第二十六行,调用WarpSharp。
修改存盘完后,就可以用VD或ND 直接打开avs文件,如果avs没写错的,就可以顺利调进VD或者ND了,然后在VD或ND里拉那个时间条,看看画面如何。没问题就可以按照一般的使用VD或ND压制的方法来做了。不过要注意,因为avs里已经有对画面做过crop和resize等操作,所以在VD或ND里就不需要再进行这些设置了。不过如果你在VD或ND里有一些你自己喜欢用的滤镜也可以在这里像你以前习惯的一样添加滤镜。然后设置好压缩方式后,就等着看结果咯。最后还是像以前制作一样绑定音频咯。
二、对raw文件是avi的进行内嵌字幕。
因为这类型的avi是已经压缩过的,所以效果应该不会非常的好,所以在这里调用滤镜是可行和有效的。一般内嵌的话,应该不进行crop和resize,以尽量和片源一致,甚至最好连码率和编码都一样。不过这里使用了convolution3d等滤镜后,除了crop和resize不进行外,码率和编码都可以自己选择了(这里假设raw的avi做过ITVC或deinterlace,这里就不进行这2项了,如果没做,这里还是要做。做法和上面压制DVD差不多。)下面是一个典型的avs。
SetMemoryMax(64)
AVISource("g:\space.avi")
LoadPlugin("C:\PROGRA~1\Gabest\VobSub\textsub.vdf")
LoadPlugin("C:\PROGRA~1\GORDIA~1\convolution3d.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\warpsharp.dll")
convolution3d(1,4,4,4,4,2.8,0)
textSub("g:\space.ssa")
WarpSharp(depth=128, blur=3, bump=128, cubic=-0.6)
首先是一样设置缓存用量,然后指定片源avisource(“路径\文件名.avi”)(某些不是divx压制的avi就要换成directShowSource("filename", fps),这里fps要为整数,如果是23.976就用24咯),然后就调用convolution3d和vobsub和warpsharp的dll和进行滤镜的使用。
将上面这个avs导入到VD或ND后,也和你以前习惯的压制方法一样,直接压制就行了。
三、用AviSynth做frame sever,直接调用d2v压制RMVB。
这个就简单了,直接调用上面第一种方法的avs就可以了,但要做一点处理,因为这次是将视频和音频一起进行压制。首先还是要先用d2v将音频从vob中抽取出来,抽取的时候选decode to wav,将音频存成wav格式。
SetMemoryMax(128)
# PLUGINS
LoadPlugin("C:\PROGRA~1\GORDIA~1\mpeg2dec.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\decomb.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\convolution3d.dll")
#LoadPlugin("C:\WINDOWS\System32\vobsub.dll")
LoadPlugin("C:\PROGRA~1\Gabest\VobSub\textsub.vdf")
LoadPlugin("C:\PROGRA~1\GORDIA~1\SimpleResize.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\warpsharp.dll")
# SOURCE
mpeg2source("H:\temp\space.d2v")
a=WavSource("H:\temp\space.wav")
Audiodub(a)# IVTC
Telecide(chroma=true,gthresh=50,guide=1)
Decimate(mode=2,cycle=5,quality=3)
# CROPPING
crop(4,55,713,366)
# SUBTITLES
#VobSub("FileName")
textSub("H:\space.ssa")
# DENOISING
convolution3d(1,4,4,4,4,2.8,0)
# RESIZING
#LanczosResize(640,368)
SimpleResize(640,368)
# SHARPEN
WarpSharp(depth=128, blur=3, bump=128, cubic=-0.6)
看这个avs里的红字那里,这里就是将音频与视频绑定了。完成avs编写后,就是和你以往使用HPP9一样的做法咯,喜欢GUI的或者喜欢命令行的都没问题,直接调用这个avs就行。不过要注意,HPP9这里就不需要再进行crop和resize了,因为这些都交给AviSynth这个frame sever来进行了。字幕也在avs里面内嵌了,很方便吧。
四、用AviSynth做frame sever调用avi压制RMVB。
这个就非常简单了。因为这里不需要专门设置音频、视频绑定。甚至有些连字幕都已经内嵌了,字幕都不需要在avs里做,呵呵。看下面这个假设是外挂字幕的avi(这里用avs调用,不采用将字幕和avi放在同一个目录的方法来调用字幕)制作的avs。编写完这个avs,和三一样的后继做法压制就ok了,非常简单。
SetMemoryMax(128)
# PLUGINS
LoadPlugin("C:\PROGRA~1\GORDIA~1\mpeg2dec.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\decomb.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\convolution3d.dll")
#LoadPlugin("C:\WINDOWS\System32\vobsub.dll")
LoadPlugin("C:\PROGRA~1\Gabest\VobSub\textsub.vdf")
LoadPlugin("C:\PROGRA~1\GORDIA~1\SimpleResize.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\warpsharp.dll")
# SOURCE
mpeg2source("H:\temp\space.d2v")
# IVTC
Telecide(chroma=true,gthresh=50,guide=1)
Decimate(mode=2,cycle=5,quality=3)
# CROPPING
crop(4,55,713,366)
# SUBTITLES
#VobSub("FileName")
textSub("H:\space.ssa")
# DENOISING
convolution3d(1,4,4,4,4,2.8,0)
# RESIZING
#LanczosResize(640,368)
SimpleResize(640,368)
# SHARPEN
WarpSharp(depth=128, blur=3, bump=128, cubic=-0.6)
其实为什么要这么麻烦要AviSynth做frame sever来调用avi压制RMVB呢,因为现在好多人抱怨在HPP9的GUI下一打开divx或者xvid格式的avi,HPP9就死。而使用AviSynth作为frame sever就能很好的解决这个问题了。
以上几个AviSynth的使用,极需要高手来指正,写这么多只是为了抛砖引玉,这里受教先了