20051221

AviSynth教程

Author:  WinkCategories:  MultimediaNo Comments »
  • 作者:CSR2000@CCF

一.简述

AviSynth是AVI SYNTHesizer的缩写,意思就是AVI合成器,是一个Frameserver,Frameserver就是一个把影像文件从一个程序转换到另外一个程序的过程,其间没有临时文件或中介文件产生。

AviSynth是由Ben Rudiak-Gould首创的一种非常有用的工具,能够提供各种方式来合并和滤镜处理影像文件。最独特的就是AviSynth并不是一个孤立的影像处理程序,而是在影像文件和应用程序之间担任“中间人”的角色。

AviSynth的基本工作原理是这样的:

首先建立一个包含特定命令的文本,称之为“脚本”(后缀为avs),这些命令指定要运行处理的影像文件和滤镜;然后运行影像应用程序,比如VD或ND,打开脚本。此时AviSynth就开始工作了,打开脚本中指定的影像文件,运行特定的滤镜,并把输出结果提供给影像应用程序。但影像应用程序并不了解AviSynth在后台所做的处理,而认为是直接打开了一个“被处理过”的影像文件。

因此使用AviSynth有五大优势:

  1. YUV支持:内建滤镜可以在YUV环境下运行,第三方滤镜几乎也兼容YUV,所以比起VD、ND的内嵌滤镜必须在RGB环境下运行要快很多,省却了一个转换的过程,将来还可以支持YV。
  2. 滤镜处理:内建许多影像处理滤镜,比如Resizing、Cropping等。还有大量的第三方强力滤镜,并可以调用VD以及AviUtl的第三方滤镜。
  3. 突破2G限制:通过AviSynth打开影像文件就相当于应用程序直接打开,这样就可以使本身有2G限制的程序也能突破2G的限制。
  4. 打开格式:AviSynth可以打开几乎所有影像文件,包括MPEG和QuickTime。所以当影像应用程序通过AviSynth打开这些文件时,会被认为是打开标准的AVI,这样就可以处理影像应用程序本身并不支持的格式。
  5. 节省硬盘空间:AviSynth处理的影像文件在运行过程中直接导入应用程序,没有临时文件,所以节省硬盘空间。

AviSynth现在有三个版本,第一个是Ben Rudiak-Gould的首先编译的AviSynth v1.0b;在Ben Rudiak-Gould停止开发后,Edwin van Eggelen继续开发,最新的版本是AviSynth v1.0b6;在2002年7月第二次源码编写计划开始,目前最新的版本是AviSynth v2.0.6,新的v2.5版还在开发中。

最后一个版本比较强大,更新速度快,增加了许多实用的命令,也吸收了一些优秀的第三方滤镜成为内建滤镜,强力推荐使用。

二.安装

AviSynth的安装可谓简单,先下载AviSynth,然后解压缩,把AviSynth.dll复制到“Windows\System”下(Windows 98/ME)或“Windows\System32”下(Windows 2K/XP/2K3),然后运行INSTALL.REG就完成安装了。

三.内建滤镜

AviSynth内建了数目繁多的滤镜,所以只能介绍一些最常见实用的一部分。

  1. 源文件滤镜
    1. AVISource

      导入AVI,对于DivX或XviD,需要安装相应的Codec。例如:

      AVISource("test.avi")
    2. WAVSource

      导入WAV。例如:

      WAVSource("test.wav")
  2. 处理滤镜
    1. AddBorders

      加边:给影像加黑边,尤其适用于对16:9的影像加字幕,希望不影响图像,把字幕加在图象的下方的情况。参数是整数,顺序是左、上、右、下。例如:

      AddBorders(0,64,0,64)	#把640*352(16:9)改成640*480(4:3)
    2. ConvertToRGB和ConvertToYUY2

      改变颜色环境:VD和AviUtl第三方滤镜有的需要RGB环境才能运行,需要ConvertToRGB来进行切换;有的RAW文件是RGB的,但调用的AVISynth滤镜只能运行在YUV下,就需要用ConvertToYUY2来运行。例如:

      ConvertToRGB()	#改变成RGB颜色环境
      ConvertToYUY2()	#改变成YUV颜色环境
    3. Crop

      切边:为了保持比例或切除黑边,参数是整数,顺序是左、上、宽、高。例如:

      Crop(8,0,704,480	#左右各切去8,以保持比例
    4. Levels

      层次: 调节亮度、对比度和Gamma值。例如:

      Levels(0,1.2,255,0,255)	#调整Gamma,使画面变亮
    5. LanczosResize

      放大缩小:Lanczos采样方法可以在图像处理中看到,是BicubicResize的替代者,提供更精准、更锐利的画质。本来是日本人开发的第三方滤镜,在日本普遍使用,欧美使用BicubicResize。自2.05版本开始吸收为内置滤镜。例如:

      LanczosResize(640,480)	#把分辨率改变为640*480
    6. 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。
  3. 编辑滤镜
    1. FadeIn和FadeOut

      淡入和淡出:提供淡入和淡出功能,尤其是淡出功能,可以使影片结束地更自然。参数为整数,表示需要编辑的帧数。例如:

      FadeOut(24)	#影片最后1秒淡出
    2. Trim

      截取:决定需要处理的部分。参数为整数,表示需要编辑的开始帧和结束帧。对抽样做Sample比较有用。例如:

      Trim(240,480)	#决定处理240 - 480这一片断
  4. 声音滤镜
    1. AudioDub

      影音合并:可以把影像和声音合并在一起。适用用用Helix直接做RMVB格式的DVDrip。例如:

      Video = AVISource("test.avi")
      Audio = WAVSource("test.wav")
      AudioDub(Video,Audio)	#把test.avi和test.wav合并
    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延迟半秒

四.第三方滤镜

AviSynth最强大之处就是有数目繁多、功能强大的第三方滤镜,同时还可以调用VD以及AviUtl的滤镜,甚至还有特别开发的接口,可以让TMPGEnc和AviUtl读取AVS。和内建滤镜不同,第三方滤镜需要先调用声明,再可以使用。

  1. 源文件滤镜
    1. MPEG2Dec

      由dividee编写的读取DVD2AVI产生的d2v工程文件的滤镜,同时内建去除Noise的TemporalSmoother。例如:

      LoadPlugin("MPEG2Dec.dll")
      MPEG2Source("test.d2v")
    2. MPEG2Dec2

      trbarry在MPEG2Dec的基础上进行了改进,支持P4的SSE2指令集。用文本编辑工具打开d2v,把iDCT_Algorithm=?改成5就可以了。速度很快,效果也好,推荐P4 CPU的用户使用。例如:

      LoadPlugin("MPEG2Dec2.dll")
      MPEG2Source("test.d2v")
    3. MPEG2Dec3

      在MPEG2Dec2的基础上再进行了改进,加入了Nic的图像后处理(PP),一定程度上可以减少Noise。好像除了P4的SSE2外,还加入了AMD的3D Now!优化,目前还在开发中,是个非常有前途的滤镜。例如:

      LoadPlugin("MPEG2Dec3.dll")
      MPEG2Source("test.d2v",CPU=4)	#CPU=4就是开启了PP模式
  2. 处理滤镜
    1. SimpleResize

      放大缩小:由trbarry编写的,由于对SSE进行了优化,所以速度快,效果好。替代了AviSynth中的BilinearResize。和LanczosResize的米切尔双立方体算法不同,这个是单纯的双线性算法。LanczosResize的画质更锐利和真实,适合普通电影; 而SimpleResize的画质较柔和,适合动画。例如:

      LoadPlugin("SimpleResize.dll")
      SimpleResize(640,480)
    2. ColorYUY2

      颜色补偿:Kiraru2002编写的滤镜。由于经过编码,得到的结果和DVD相比较,颜色有所改变,所以要对颜色进行补偿。例如:

      LoadPlugin("ColorYUY2.dll")
      ColorYUY2(0,10,0,10,0,0,0,0,0)
  3. 交错滤镜

    Decomb

    IVTC和Deinterlace滤镜:由Donald A.Graft编写,新增加的专门处理NTSC格式动画的mode=2,要和Avisynth2.05以上版本使用,不然速度会慢一倍。

    • guide 0 – 2,默认0,NTSC用1,PAL用2,可以提高IVTC准确度。
    • gthresh 0 – 100,默认15,控制区分不同帧的程度。
    • post,默认true,用来处理IVTC遗漏的细节,使画面略微模糊。
    • threshold 0 – 255,默认15,控制post的程度。
    • dthreshold 0 – 255,默认9,控制threshold判定IVTC遗漏的程度。
    • blend,默认true,在交错画面用渲染来替代填充。
    • chroma,默认false,在交错画面的亮度色度调整。
    • cycle 2 – 25,默认5,每n帧删除1帧,NTSC选5,PAL选25。
    • mode 0 – 2,默认2。
    • mode=0,对cycle里最相近的帧不进行处理。
    • mode=1,对cycle里最相近的帧进行处理,用于处理混合帧速。
    • mode=2,在一个很长的范围里进行帧对比,可以正确处理动画里由8帧或12帧复制为29.97帧的情况。
    • Threshold,默认0,控制mode=1时的处理重复帧的程度,Threshold默认100,控制mode=2时的处理重复帧的程度。
    • Quality 0 – 3,默认2,采样和色度的质量,与速度成反比。

    但是最近的几个版本似乎都存在一个问题,就是处理后的画面有波动现象,并伴随影片里文字闪烁现象,所以还是用老版本的保险。例如:

    LoadPlugin("Decomb.dll")
    Telecide(Guide=1,Gthresh=50,Chroma=True,Quality=3,Post=false)
    Decimate(cycle=5)	#NTSC 3:2 PullDown
    
    LoadPlugin("Decomb.dll")
    Telecide(Guide=1,Gthresh=50,Chroma=True,Quality=3,Post=false)
    Decimate(Cycle=5,Mode=2)	#NTSC Progressive和Interlaced混合
    
    LoadPlugin("Decomb.dll")
    Telecide(Guide=2,Gthresh=50,Chroma=True,Quality=3,Post=false)
    Decimate(Cycle=25)	#PAL
  4. 字幕滤镜
    1. VobSub

      Sub字幕:VobSub不但是外挂字幕的好手,内嵌字幕也是一样的强。将字幕的2个文件test.idx和test.sub放在同一个目录下就可以了。例如:

      LoadPlugin("VobSub.dll")
      VobSub("test")
    2. TextSub

      SSA和ASS字幕:这个也是VobSub自带的,可以内嵌特效字幕。例如:

      LoadPlugin("TextSub.vdf")
      TextSub("test.ssa")

You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site.

Comments are closed.

Back to Page Top