WUYUANS
Just for Sharing

avs 基础

2011年11月29日 分类:软件

目录

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的,画面是1280x720,我们压制的时候肯定要把画面改为我们的标准,我们使用 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画面就是1280x544的,那么他转为HR-HDTV后就是960X408 我们的HR-HDTV标准是960x540或者960x528,很明显,高度达不到,那么我吗就需要加黑边来让他增加高度,同时我们的字幕也可以放在黑边里显示了,计算一下,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

作者:wuyuan 本文来自Wuyuan's Blog 转载请注明,谢谢! 文章地址: https://www.wuyuans.com/blog/detail/20