什么是AVS?——AVS(AviSynth)基础知识教程
本帖最后由 IsaacZ 于 2011-1-9 23:08 编辑作者:ciey
IsaacZ注:本篇文章主要帮助网友了解AVS的基本概念,后面的滤镜介绍内容有些枯燥,看不懂的话不看也罢,很多是用不到的。
何为AVS?
(请先安装AviSynth)(IsaacZ注:完美解码自带此程序,通过完美解码设置可以开启或关闭)
AVS是AviSynth的简称。简单来说它是一个合成平台!它并不是一个独立的影像处理程序,而是在影像文件和影像处理软件之间担任“中间人”的角色。先来简单了解下它的工作过程:
新建个文本文件,然后将后缀改为.avs(文件名可任意,但后缀必须是.avs)如:01.txt->01.avs。AVS文件中包含的是一行行的特定命令的文本,称之为"脚本"。举个最简单的例子:将下面的一行代码保存在新建的AVS文件中。这里假设D盘根目录中有一段AVI视频。文件名自己校对。
Directshowsource(“d:\test.avi”)
然后把这个AVS文件拖到暴风影音里放放看。当然如果AVS仅限这点功能,我们还不如直接用暴风打开源视频。下面再举个最常用的滤镜---加载字幕。
Loadplugin(“d:\avsplugin\vsfilter.dll”)
Directshowsource(“d:\test.avi”)
Textsub(“d:\test.srt”)
脚本说明:
Loadplugin()是加载插件的意思,括号里面的是插件的路径。Textsub滤镜没有被AVS内置,所以需要加载vsfilter.dll这个文件字幕文件。请先下载滤镜插件包,里面有vsfilter.dll。
Directshowsource()是读取源视频文件,括号里面的是影片的路径。更详细的关于这个滤镜的介绍请往下看。
Textsub()这个就是为视频加载上字幕的语句。
这样再用暴风打开这个AVS看看是否已经为影片增加字幕了。
目前论坛的水印也是一个字幕文件。你可以像挂字幕一样把它挂上去。
Textsub(“d:\VPLOGO.ssa”)
以上只是个开头,AVS可谓是功能强大。往下再看可以再学到一些常用的滤镜,它们的作用很多,比如缩小画面尺寸,增加亮度,使画面锐利或柔化,去噪点等等。但是想在之前声明的是,无论怎样去增加滤镜,片源的质量才是关键所在。VCD的片源再怎么处理也不可能达到DVD的效果,而DVD片源,再怎么胡乱压制也不会差到哪里。我们在利用的avs滤镜更应该持慎重态度,需要反复看使用滤镜后的效果是否满意。当然有些片子在使用滤镜后画面效果有提升,每个片子的情况都不一样,这就需要我们自己去调整使用了。所以滤镜的使用非常的灵活,需要具体情况具体分析。
先了解几个概念:
函数(参数表)——函数的英文名字叫function,这个词在英文中还有“功能”意思, AVS中绝大部分的功能都是通过各种各样的函数来实现的。 “函数”也被称为“滤镜(filter)”或“插件(plugin)”,其实都是一个意思,一般称为滤镜。AVS中的函数按调用方式分为两类,一种是内置函数,一种是外挂函数。内置函数已经放置在AviSynth软件内部,可以在脚本中直接调用;外挂函数不包含于AviSynth中,需要在脚本中额外加载相应的DLL文件或其他AVS脚本函数才能调用。
外置函数可以在网上下载得到。正是因为这点,AVS被赋予了几乎无限的扩展性,我们可以通过在网上找到各种函数来实现五花八门的功能。有个前提,说明档(大多都是英文)要自己看得懂。
内置的例:Directshowsource()#加载片源
外挂的例:Loadplugin(“d:\avsplugin\vsfilter.dll”) #挂上字幕滤镜所需DLL文件
Textsub(“d:\test.srt”) #挂上字幕
参数——既然有函数,就要说参数。如果说函数是实现某样功能用的,那么参数就是告诉函数通过什么方式实现、实现到什么程度等等的信息。上面说的f(x)的调用形式,f是函数名称,x就是参数。有的函数一个参数就够了,有的函数却要很多参数,四个、五个、十多个。比如Telecide这个函数如果把所有的参数加起来一共有十四个之多。好在不是所有的参数都是必要的。有些参数可以写也可以不写。如果不写,函数就会自动使用其内部的默认值。但是,如果必写的参数不写,那么函数就无法启动。[]中括号代表里面的参数可写可不写。
Directshowsource("filename"[,...][,...])
例:Directshowsource("d:\test.avi",false,fps=23.976)#读取test.avi视频文件,false表示禁掉音频,fps表示改变帧率为23.976
变量——变量是个抽像的具体对象。可以理解为数学当中的x,y未知数,它们可以被赋值啊,运算啊什么的。这里虽很少用到数学,但变量常被用来代替文件,或用做运算。
例:
video=avisource(“xxx.avi”,false,fps=23.976) #video为变量,=为赋值功能
audio=wavsource(“xxx.wav”) #audio为变量
AudioDub(video,audio) #合成视频和音频
注释:
一些播放器如暴风和大部分压缩软件如VDM都能直接打开AVS文件。它被直接识别为一个影像文件,而不是简单的一个文本文件。
AviSynth忽略任何以#开头直到这行末尾的内容。
忽略大小写:DirectShowSource 和directshowsource是一样的。
编写脚本时全部的字母符号,如() , . "都是在英文输入法状态下的。中文输入法和英文输入法的逗号是不一样的,不然会出错.
安装AVS
(IsaacZ注:完美解码自带此程序,可不必单独安装,通过完美解码设置可以开启或关闭)
http://bbs.verypsp.com/images/attachicons/rar.gif 附件: AviSynth_2.5.7.part1.rar (2007-2-7 12:40, 1.91 M)
http://bbs.verypsp.com/images/attachicons/rar.gif 附件: AviSynth_2.5.7.part2.rar (2007-2-7 12:40, 1.33 M)
GordianKnot.RipPack035_2.exe 简称:GK
(IsaacZ注:点拨论坛有单帖介绍:[下载] Divx工具GordianKnot RipPack)
GK安装后里面有一个插件集合。如安装在C盘,那么插件在C:\Program Files\GordianKnot\AviSynthPlugins自己找下。里面包含了大部分常用滤镜插件。
下载并安装avisynth,并将常用滤镜插件dll文件拷贝到安装目录的plugin目录里。或者单独设置一个文件夹。请看下文。
如果缺少影片的相应解码器的话,AVS也可能用不起来,更不用说压片了。建议安装暴风之类的播放器,其里面集成了大多数的影片解码器,够用了。(IsaacZ注:现在的暴风已经不能再作为解码包使用,推荐用完美解码)再者为了检查AVS编写是否正确,及看处理后的效果,类似暴风的播放器必不可少。
建议将GordianKnot也一并安装。滤镜插件包来自GK。
一些第三方的滤镜也可以从网上下载得到。
AVS官方网http://www.avisynth.org/warpenterprises/
常用基本滤镜介绍:
注:以下不详细说明每个滤镜是否为第三方。第三方的会在滤镜语句前加上Loadplugin(“***.dll”)。“[...]”表示可省略。碰到不会用的滤镜可以查看avisynth的说明文档(查看下avisynth安装目录)(IsaacZ注:安装目录里面是英文版,点此查看中文版帮助说明),第三方的插件也有自带的说明.
一.加载插件
LoadPlugin ("filename")#加载.dll插件
例:
LoadPlugin("C:\Program Files\Ringz Studio\Storm Codec\Codecs\VSFilter.dll ") #加载字幕滤镜
还有两个,只做简单介绍:
LoadVirtualDubPlugin ("filename")#加载VD的滤镜,.vdf文件
LoadVFAPIPlugin("filename") #加载TMPGEnc滤镜(IVTC处理)
如果用到插件比较多的话,这样Load确实比较烦。其实你可以将常用的.Dll插件复制到avisynth安装目录的plugin目录里,这样滤镜就可以不用增加LoadPlugin()语句。
例如:最常用的字幕滤镜。将VSFilter.dll复制到plugin目录里,这样就可以不用LoadPlugin()语句了,直接就可以使用VobSub()语句了。方便很多!
还可以使用以下命令指定插件目录:
SetWorkingDir("d:\avsplugin\") #设定AVS 脚本调用dll 插件文件的工作路径
LoadPlugin("VSFilter.dll")
LoadPlugin("undot.dll")
再需要调用很多插件时这样做会更方便些。
二.读取源文件滤镜
1.视频滤镜Directshowsource("filename"[,...][,...])
例:DirectShowSource ("D:\test.avi")#直接打开test.avi源文件
DirectShowSource("D:\test.rmvb",fps=23.976, convertfps=true)#直接打开rmvb格式,对于rm/rmvb和asf格式的,需要定义帧率才能读取。如里面的fps=23.976,convertfps=true语句的作用是防止转换可变桢率的RMVB和WMV时出现影音不同步。这两个语句望大家在转片时都加上。
DirectShowSource()在avisnyth中很强大,常用的媒体格式,如avi、mpge1/dat、mpge2/vob (DVD) ,bin (SVCD)都可以加载.只要有解码器的支持,很多格式都可以使用这个滤镜加载。
AVISource("filename"[,...])
加载AVI文件,对于常见的DVDRIP格式来说可能更常用些.,DVDRIP都是DivX或XviD编码的,需要安装相应的解码器(Codec)。
例:AVISource("D:\test.avi")
AVISource("d:\test.avi",false)#false表示禁止音频
MPEG2Source("filename")
由dividee编写的读取DVD2AVI产生的d2v工程文件的滤镜,同时内建去除Noise的TemporalSmoother。
例:LoadPlugin("MPEG2Dec3.dll")#此为第三方滤镜需要先调用声明,再使用
MPEG2Source("D:\test.d2v")#读取d2v工程文件
2.音频滤镜
WAVSource("filename")#读取WAV格式的音频。
LoadPlugin("AC3SOURCE.dll")
AC3Source("filename")#读取AC3的音频。
LoadPlugin("MPASOURCE.dll")
MPASource("filename")#读取MPG的音频。
DelayAudio()
声音延迟
DelayAudio(WAVSource("test.wav") ,100) #把test.wav延迟100毫秒
GetLeftChannel() 和 GetRightChannel()
声道获取:把立体声的左右声道单独返回,适用于左右声道不同语种片子。
例:stereo=WavSource("test.wav")
return GetChannel(stereo) # 返回test.wav的左声道
AmplifydB()
AmplifydB(WavSource("test.wav"),3,3) #左右声道放大3DB
AudioDub()
影音合成:把影像和声音合并在一起。
例:Video=AVISource("test.avi")
Audio=WAVSource("test.wav")
AudioDub(Video,Audio) #把test.avi和test.wav合并
三.编辑滤镜
ConvertToXXX()
颜色环境转换 (某些滤镜需要特定的颜色环境才能运行)
例:
ConvertToRGB() #改变成RGB颜色环境
ConvertToYUY2() # 改变成YUV颜色环境
ConvertToYV12() #加载RMVB时用到,因为X264编码器不支持某些RMVB的色彩环境
ChangeFPS(23.976) #改变影片帧率,推荐用这个数值
AddBorders(左,上,右,下)
给影像加黑边:参数是整数,顺序是左、上、右、下。尤其适用于对2.35:1的影像加黑边,为了不使图像缩放后变形,而且可以把字幕加在图象的下方黑边里。PSP的分辨率为480*272,为1.76:1的画面。接近常见的1.85:1的比例,所以可以不加黑边。但是对于2.35:1的宽影屏画面需要加上黑边。更详细的请参见画面比例问题的教程。
例:AddBorders(0,32,0,32) # 上下各增加32象素的黑边。
Crop(左切,上切,-右切,-下切)
切边:为了保持比例或切除黑边,参数是整数,顺序是左、上、-右、-下。
例:Crop(16,8,-16,-8)#16为起始数值,如果切不干净,再增加数值,一般加4的倍数
LanczosResize(宽,高)
放大缩小滤镜:参数是整数,顺序是宽度、高度。
例:LanczosResize(480,272) #把分辨率改变为480*272.
SimpleResize(宽,高)
放大缩小滤镜:LanczosResize的画质更锐利和真实,适合普通电影;而SimpleResize的画质较柔和,适合动画。
例:LoadPlugin("SimpleResize.dll")
SimpleResize(480,272)
字幕滤镜
字幕分为两种:文本字幕和图片字幕。
文本字幕常见的有*.srt,*.ssa,*.ass
图片字幕常见的有(*.idx,*.sub)。
VobSub("filename")
图片字幕:此种字幕有2个文件test.idx(索引)和test.sub(字幕内容)。两个文件需在同一个目录下。
例:LoadPlugin("VSFilter.dll")
VobSub("e:\sub\test") #加载sub影片字幕,可以不用后缀。
TextSub("filename")
文本字幕:常见格式为srt, ssa和ass字幕, ssa和ass常被用来做压片小组的水印文件格式。
例:LoadPlugin("VSFilter.dll ")
TextSub("D:\avs\vplogo.ssa")#加载水印字幕
TextSub("D:\movie\test.srt")#加载影片字幕
注意:字幕应该加载整个avs语法序列的最后,特别是在裁减缩放滤镜的后面。
Trim(开始帧,结束帧)
截取:决定需要处理的部分。参数为整数,表示需要编辑的开始帧和结束帧。对抽样做Sample和影片分割比较有用。
例:trim(0,100)#截取1-101frame(帧),trim是以0为第一帧的。
四.处理滤镜
这一类滤镜再改善画面效果的同时,画质也在下降,请谨慎使用.当然如果片源质量不好,有必要使用以下滤镜来改善画面效果的.
1.亮度滤镜Levels()
层次:可以调节亮度、对比度和Gamma值,一般常用来调节亮度。
例:Levels(0,1.2,255,0,255) #增加画面亮度
其它参数默认,只改第二个亮度参数,数值在1.2-1.7之间比较合适,一般1.5比较合适. vob文件一般会出现背景暗的问题,就需要增加点亮度。
Tweak()
调整:可以调节色度,饱和度,亮度,对比度。
例:Tweak(0,1,20,1)
4个参数依次表示为:色度,饱和度,亮度,对比度。
色度:-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。
一般将亮度(第三个参数)调节在10-20之间。注意Tweak的其他调节可能和颜色控制环境有关,如YUY2,因此其它的最好不要再改动。
ColorYUY2()
颜色补偿:由于经过编码,得到的结果和DVD相比较,颜色有所改变,所以要对颜色进行补偿。
例:LoadPlugin("ColorYUY2.dll")
ColorYUY2(0,10,0,10,0,0,0,0,0)
2.降噪滤镜
undot()#可以使用一个或多个
无参数,直接加上就行了。undot滤镜是进行象素及细小噪点降噪,一般用来去除细小的、肉眼不容易察觉的噪点,所以具体效果上并不明显。
例:加在其它滤镜后,使用多次。
LoadPlugin("UnDot.dll")
DirectShowSource("test.avi")
UnDot()
LanczosResize(480,272)
UnDot()
具体用暴风预览效果。
FluxSmooth()
柔化兼有降噪功能,比UnDot()作用要强些.
例:
LoadPlugin("fluxsmooth.dll")
fluxsmooth(5,7)
KenKunNR()
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) 强力
3. 柔化、锐化、模糊类滤镜
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)
WarpSharp()
锐化滤镜: 主要改动depth,bump这两个数值
越下面的线条越细
http://bbs.verypsp.com/images/attachicons/zip.gif warpsharp_YV12_dll.zip (31.38 KB)
http://bbs.verypsp.com/images/attachicons/zip.gif warpsharp_YV12_dll.zip (31.38 KB)
例:
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))
模糊滤镜.
柔化滤镜可以参考一些自动生成的模板,如
# 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)
可以使用其中的一套,使用具有处理效果的滤镜会增加压片的时间.片源不好就按需选用些.总之能尽量少用就少用,或者干脆不用.
五. IVTC场处理/交错滤镜
还没深入研究,故暂时不放上了~
本文难免有不足的地方,望高手指正!继续补充完善中......
相关参考:[教程] AVS(AviSynth)工作原理浅析、工作流程图解
来源:http://bbs.verypsp.com/forum.php?mod=viewthread&tid=52010 看着挺复杂的,只会简单的几个。一看E文就头痛。 呵呵 。原来是这样啊。谢谢楼主。 太好了,这是介绍avs最详细、最耐心的教程了。多谢管理员。 Levels滤镜的Gamma值我一般取1.3以下,如果取值到1.5有部分画面会有失真现象。
页:
[1]