lanlulululu

lanlulululu作者

经验分享·156.6天前

AVS基础教程

作者 : 杜紫藤

AVS是我们做压制不可缺少的一个工具,AVS代码的作用就是把元素串联起来,最终让软件执行结果。我们压制就是直接和AVS打交道的,掌握了AVS代码,你就算是位高手了。我们不用去查看AVS自动的一大堆英文帮助,我们只了解对我们有用的即可,
一、代码样例:

AVS代码的执行是按照顺便执行的,所以一般都是先把加载插件的代码放在第一位,然后是片源的载入和处理参数,最后的结果执行在最后。

我们来看最简单的压制代码:

LoadPlugin(“d:\\VSFilter.dll”)

directshowSource(“Lost.S03E18.HDTV.XViD-Caph.avi”,23.976)

textsub(“Lost.S03E18.HDTV.XViD-Caph.ass”)

上面这个就是最简单的代码,第一行 是载入 挂字幕插件,第二行是载入片源,第三行是载入字幕。代码里引号里内容是表示路径,载入片源的括号里后面逗号的23.976是这个片子的FPS,查看FPS可以用VDM查看,或者查看片源的NFO文件信息。如果我们的AVS文件是放在和片源以及字幕一起的一个目录的话,就不需要写具体路径,直接写文件名即可。但是载入字幕,你要看你的字幕插件在哪,一般我放在D盘的根目录,这个根据个人喜欢写。

二、常用代码范例:

1. 提高音量的处理函数

因为MKV文件的片源基本都是AC3音频或者DTS音频的,默认音频的声音是很小的,我们需要提高音量,那么就可以加一个代码处理:Amplify(2) 这个代码是表示把音频提示两倍,具体提升多少合适,应该自己压制一段出来看,如果音量小的话 可以调整括号里的参数,2.5 或者3,例子:

LoadPlugin(“d:\\VSFilter.dll”)

directshowSource(“Lost.S03E18.HDTV.XViD-Caph.avi”,23.976)

Amplify(2)

textsub(“Lost.S03E18.HDTV.XViD-Caph.ass”)

2. 改变画面大小的处理函数

MKV的片源一般都是720P的,画面是1280×720,我们压制的时候肯定要把画面改为我们的标准,我们使用 LanczosResize(720,396) 代码来改变画面宽高,括号里的两个参数就是我们需要更改的画面宽度和高度,你要改为其他大小可以自己填写,比如HR-HDTV的 LanczosResize(960,528),例子:

LoadPlugin(“d:\\VSFilter.dll”)

directshowSource(“lost.s04e01.720p.hdtv.x264-ctu.mkv”,23.976)

LanczosResize(720,396)

Amplify(2)

textsub(“Lost.S03E18.HDTV.XViD-Caph.ass”)

3. 加黑边

要知道 有些片源并不是16:9的,比如蓝光的720P画面就是1280×544的,那么他转为HR-HDTV后就是960X408 我们的HR-HDTV标准是960×540或者960×528,很明显,高度达不到,那么我吗就需要加黑边来让他增加高度,同时我们的字幕也可以放在黑边里显示了,计算一下,528-408=120,上下两个黑边各加60即可。加黑边参数是:AddBorders(0,60,0,60) 里面的参数自己可以调整,根据实际情况要加多少加多少。例子:
LoadPlugin(“d:\\VSFilter.dll”)

directshowSource(“lost.s04e01.720p.hdtv.x264-ctu.mkv”,23.976)

LanczosResize(960,408)

AddBorders(0,60,0,60)

Amplify(2)

textsub(“Lost.S03E18.HDTV.XViD-Caph.ass”)

4. 加载多个字幕:

其实加多字幕是相当的简单,就是在加一个textsub(“Lost.S03E18.HDTV.XViD-Caph.ass”) 参数进去即可,括号里是另外一个字幕的路径,例子

LoadPlugin(“d:\\VSFilter.dll”)

directshowSource(“lost.s04e01.720p.hdtv.x264-ctu.mkv”,23.976)

LanczosResize(960,408)

AddBorders(0,60,0,60)

Amplify(2)

textsub(“Lost.S03E18.HDTV.XViD-Caph.ass”)

textsub(“D:\\yyets\\LOGO.ass”)

5. 加载动态水印的AVS:

LoadPlugin(“d:\\VSFilter.dll”)

#加载字幕插件

logo=directshowSource(“E:\\电影片尾\\LOGO_720x396_23.976.avi”,23.976).Loop(2,1,23).converttorgb32

#设定水印LOGO的路径,然后Loop(2,1,23)是设定他在第2秒钟的时候开始出现,2可以随便更改,.converttorgb32是改变颜色为32位,否则没法挂载

raw=directshowSource(“terminator.the.sarah.connor.chronicles.s01e02.720p.hdtv.x264-ctu.mkv”).converttorgb32.LanczosResize(720,396).Amplify(2)

#设定片源的路径,以及改变他的色深为32位,在改变他的画面大小为 720X396,音量放大一倍

a=Layer(raw,logo,”add”,255,100,230)

#设定a等于 LOGO和RAW两个叠加,255是完全显示,100,230两个参数分别是定义他们的显示位置 X,Y,位置是可以根据画面和LOGO大小进行调整的

out=a.textsub(“terminator.the.sarah.connor.chronicles.s01e03.720p.hdtv.x264-ctu.ass”)

#设定out等于a.并且a加字幕

return out

#最后运行结果out

加载外部WAV音频: 在我们压制的时候有可能会遇到视频有坏祯,而且音频是AC3的片源,这样压制的完成品音频和画面很可能不同步。那么我们就需要使用AC3转换软件把分离出来的音频转换为WAV在进行加载压制,以下为完整例子:

LoadPlugin(“d:\\VSFilter.dll”)

#加载字幕插件

logo=directshowSource(“E:\\电影片尾\\LOGO_720x396_23.976.avi”,23.976).Loop(2,1,23).converttorgb32

#设定水印LOGO的路径,然后Loop(2,1,23)是设定他在第2秒钟的时候开始出现,2可以随便更改,.converttorgb32是改变颜色为32位,否则没法挂载

raw=DirectShowSource(“G:\\Lost.S04E02.720p.HDTV.x264-CTU\\lost.s04e02.720p.hdtv.x264-ctu.mkv”,23.976,audio=false).converttorgb32.LanczosResize(720,396).Amplify(2)

#设定片源的路径,以及改变他的色深为32位,在改变他的画面大小为 720X396,音量放大一倍

raw2=raw.AudioDub(WAVSource(“d:\\Untitled_mixdown.wav”))

#加载外部音频

a=Layer(raw2,logo,”add”,255,100,230)

#叠加

out=a.TextSub(“sample.ass”)

#加载字幕

return out

#最后运行结果out

加载片头或者视频合并: 我们压制的最新电影都要求加载一段新电影的预告片,这样可以让更多的人了解到即将播出的片子。

LoadPlugin(“d:\\VSFilter.dll”)

raw=directshowSource(“ripsir-lfodh.mkv”,23.976).AddBorders(0,56,0,56).LanczosResize(720,396).textsub(“ripsir-lfodh.ass”).Amplify(2).converttorgb24.SSRC(48000)

#定义片子的路径,以及FPS,然后加黑边,在改变画面大小,挂字幕,增大音量(如果是MP3音频就不需要增加),改变画面色深为24位,格式化音频为48000K

OP=directshowSource(“E:\\电影片尾\\功夫之王预告.avi”,25).AssumeFPS(23.976, 1, true) .converttorgb24.SSRC(48000).LanczosResize(720,396)

#定义片头路径,定义片源FPS为25,这个25是片源的真实FPS,如果合并起来就需要改变为和电影片源一样的FPS,否则合并起来就音频和画面不同步。那么就使用.AssumeFPS(23.976, 1, true) 来改变FPS为23.976 然后改变色深,格式化音频,改变画面大小和电影片源一样。

uotput=op+mov

# 片头加上电影片源

return uotput

#开始运行输出结果

下面是常用几种常用的滤镜。
1. 导入片源的语句。directshowsource(“*****”,convertfps=true)
引号中间的*号,在实际操作的时候需要用片源的具体位置来替换。比如,小生需要转换F盘根目录下面的“after phase.rmvb”这一个视频文件,那么我就应该写成directshowsource(“F:\\ after phase.rmvb “,convertfps=true)。Convertfps=ture,是用来防止画面和声音不同步的,所以我们不需要修改它。

2. 放大缩小的滤镜。Lanczosresize(480,272)
括号中间的*号在实际操作时,是填写着转换后的视频分辨率。因为PMPAVC格式支持的最大分辨率是480*272,所以,不要超过这个范围,所填写的数字也必须是16的倍数。如果填写的分辨率有问题,导致画面变形,不用担心,因为最新的播放器支持比例调节,会自动调节到正常比例。除非特殊情况,一般都会写成最大分辨率Lanczosresize(480,272)。

3. 更改音频采样率的滤镜。ResampleAudio(44100)
更改音频采样率为44100HZ,使得压制出的音频更加符合PMPAVC的规范,这里不需要修改它,直接套用就行了。

4. 对片源进行剪裁的滤镜。Crop(0,0,720,480)
括号内需要填入4个数字,这4个数字代表的意义如下。第一个是表示左边剪裁掉的像素,第二个是表示上边剪裁掉的像素,第三个是横向需要保留的总像素,第四个是纵向需要保留的总像素。虽然没有右边和下边剪裁的像素,不过不难理解,已经剪裁了上边和左边,并且规定了横向和纵向所需要保留的总像素,右边和下边应该剪裁掉多少就可想而知了。如果不想进行剪裁,第一和第二个位置填0,后面两个最大填720和480。还有就是填入的数字必须是偶数。例如,左边剪裁10像素,上边剪裁20像素,就写成Crop(10,20,720,480)

5. 添加黑边的滤镜。addborders(0,0,0,0)
括号里,依次填入左,上,右,下需要加黑边的像素。一般不会用到这条语句,但是在需要导入外挂字幕的情况下,通常会在上下同时添加一定像素的黑边后再加载字幕,例如,addborders(0,32,0,32),这样字幕就会显示在黑边里,而不会挡住画面了。

6. 导入字幕的滤镜。textsub(“****”)和vobsub(“****”)
括号中填入存放字幕文件的路径。textsub是用来添加SRT,SSA,ASS等文本字幕的,也是比较常用的,路径中需要写出文件名和后缀名,例如textsub(“F:\\zimu.ssa”)。vobsub是用来添加IDX+SUB图形字幕的,添加的文件可以不用填写后缀名,例如vobsub(“F:\\zimu”)。

7. 改变色彩环境的滤镜。convertToYV12()
因为X264编码器不支持某些RMVB的色彩环境,所以在转PMPAVC的时候,常常不能正常转换,这时,改变一下色彩环境就可以了。

8. 亮度调整滤镜。Levels(0,1.5,255,0,255)
一般在转换的时候,为了让视频看起来更加清晰,都需要稍微加一点亮度,第二个数值就是修改亮度的,范围在1到2之间。其他的数值涉及到一些其他的数据,不建议改动,照默认就可以了。

9. 画面综合调整滤镜。Tweak(0.0,1.0,0.0,1.0)
可以调节色度,饱和度,亮度,对比度,但是过度的调节也会引起色彩失真,色斑,曝光过度等负面效果。
色度:-180.0~180.0,默认效果0.0。正数趋向红色,负数趋向绿色。改变影片的整体色调。
饱和度:0.0~10.0,默认效果1.0。0.0为黑白。一般不超过1.5,可以使得影片的色彩更加艳丽。
亮度:-255.0~255.0,默认效果0.0。一般取10-20。
对比度:0.0~10.0,默认效果1.0。 一般不超过1.4。

10.最后一个是分割视频的滤镜。Tirm(0,0)
括号中间填入的数字代表桢数,截取的是填入的两个桢数之间的视频。如果填0,0,就表示不进行截取。填入的桢数的计算方法,片源的桢速率*截取片段的时长*60。比如,一个桢速率为10,总时长为10分钟的视频,我们要把它分割成两部分,那么那个分割点的桢数就是10*5*60=3000。这里的数据只是举例,实际当然没有这么好算的数字。桢速率可以用暴风影音查看。

介绍完上面的滤镜代码,如果你还没有办法理解的话,没关系,小生给出一段比较通用的代码。你需要按照上面的说明把“XXXX”部分补充完整就可以使用了。如果不需要导入字幕,就把textsub那一行删除。
directshowsource(“XXXX”,convertfps=true)
convertToYV12()
lanczosresize(480,272)
addborders(0,0,0,0)
textsub(“XXXX”)
AviSynth部分
video = DirectShowSource(“F:\\work\\sy\\cgp\\dknz.3gp”,15).BilinearResize(320,240)
logo = ImageSource(“bzhe.jpg”) //被遮罩的图片
logomask = ImageSource(“zhe.jpg”)//遮罩图片
overlay(video,logo,mask=logomask)【应用】AviSynth(AVS)滤镜参考手册2009年12月21日 星期一 11:21

一、加载插件

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)

三、调整大小

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合并时就需要加上这个延迟。

例:写法①WavSource(“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:\\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()

其他的也类似。

十、截图

没有想到用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”)
AVS合并:

此处加载滤镜插件
OP=AVISource(“片头路径”,

audio=false).changefps(23.976)
Main=Avisource(“视频路径”,false).changefps(23.976).trim(225,0)
Video=OP+Main
return video.textsub(“”).textsub(“”)

#deinterlace
#crop
#resize
#denoise

标签 : #avs #教程
评论 0 立即评论

目前尚无评论

后发表评论