• AviSynth 教程(收集、整理)


    下载地址:AviSynth 2.5.7 Alpha 2 (2006-4-2更新)

    一、简述

      AviSynth是AVI SYNTHesizer的缩写,意思就是AVI和成器,是一个Frameserver。(Frameserver就是一个把影像文件从一个程序转换到另外一个程序的过程, 其间没有临时文件或中介文件产生)
      
        AviSynth是由Ben Rudiak-Gould首创的一种非常有用的工具,能够提供各种方式来合并和滤镜处理影像文件。最独特的就是AviSynth并不是一个孤立的影像处理程序,而是在影像文件和应用程序之间担任“中间人”的角色。

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

        因此使用AviSynth有5大优势:
    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现在有3个版本,第一个是Ben Rudiak-Gould的首先编译的AviSynth v1.0b;在Ben Rudiak-Gould停止开发后,Edwin van Eggelen继续开发,最新的版本是AviSynth v1.0b6;在2002年7月第二次源码编写计划开始,目前最新的版本是AviSynth v2.0.6,新的v2.5版还在开发中。
        最后一个版本比较强大,更新速度快,增加了许多实用的命令,也吸收了一些优秀的第三方滤镜成为内建滤镜,强力推荐使用。

    二、内建滤镜

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

    1、源文件滤镜

    ① AVISource
    导入AVI,对于DivX或XviD,需要安装相应的Codec。
       例:AVISource("test.avi",false)   #,false表示禁止音频
    ② WAVSource
    导入WAV
       例:WAVSource("test.wav")

    ③ DirectShowSource

    注:WAVSOURCE和AVISOURCE是属于核心脚本,无须读取插件,但AC3SOURCE和MPASOURCE需要读取AC3SOURCE和MPASOURCE插件。DirectShowSource的读取需要安装各种音频和视频的解码器。DirectShowSource()在高版本avisnyth中显得更万能些,常用的媒体格式,如avi、mpge1/dat、mpge2/vob/bin都可以加载,另外可以不用分离视频和音频,而直接压缩!想要直接压制vob请使用高版本的avisynth

    2、处理滤镜

    ① AddBorders
    加边:给影像加黑边,尤其适用于对16:9的影像加字幕,希望不影响图像,把字幕加在图象的下方的情况。参数是整数,顺序是左、上、右、下。
    例:AddBorders(0,64,0,64)   # 把640*352(16:9)改成640*480(4:3)

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

    ③ Crop
       切边:为了保持比例或切除黑边,参数是整数,顺序是左、上、右、下。
       例:Crop(0,0,-0,-0)     # 右和下用负数表示


    ④ Levels
       层次:调节亮度、对比度和Gamma值。
       例:Levels(0,1.2,255,0,255)   # 调整Gamma,使画面变亮


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

    vob文件画面大小一般是:

    NTSC:720×480 本身4:3的一般不需要裁上下,如果上下黑边总合大于等于120(2×60)可裁成16:9 并约束比例,推荐比例:672x378、704x396

    PAL:720×576 本身4:3的一般不需要裁上下,如果上下黑边总合大于等于144(2×72)可裁成16:9 并约束比例,推荐比例:672x378、704x396

    VOB文件都带了很大的黑边,需要裁减掉。也是avs用于vob压制的关键因素之一 
    裁减黑边和缩放画面是vob文件压制中很重要的因素,一般连用。对于本身就无黑边的文件直接用LanczosResize()

    4:3推荐比例:608x456、624x468、688x516、704x528


    ⑥ 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、编辑滤镜

    ①FadeIn 和 FadeOut
    淡入和淡出:提供淡入和淡出功能,尤其是淡出功能,可以使影片结束地更自然。参数为整数,表示需要编辑的帧数。
    例:FadeOut(24)   # 影片最后1秒淡出

    ②Trim
    截取:决定需要处理的部分。参数为整数,表示需要编辑的开始帧和结束帧。对抽样做Sample比较有用。
    例:Trim(240,480)   # 决定处理240~480这一片断

    4、声音滤镜

    ① AudioDub
    影音合并:可以把影像和声音合并在一起。适用用用Helix直接做RMVB格式的DVDrip。
    例:Video = AVISource("test.avi")
      Audio= WAVSource("test.wav")
      AudioDub(Video,Audio)   # 把test.avi和test.wav合并

    ② GetLeftChannel 和 GetRightChannel
       获取声道:把立体声的左右声道单独返回,适用于左右声道不同语种的WAV。
    例:stereo=WavSource("test.wav")
      return GetLeftChannel(stereo)   # 返回test.wav的左声道

    ③DelayAudio
    声音延迟:由于从VOB里分离的AC3通常有延迟,所以用Azid转码得到的WAV也有延迟,在用AudioDub合并时就需要加上这个延迟。单位:秒
       例: WavSource("test.wav").DelayAuido(0.5)   # 把test.wav延迟半秒

    ④ResampleAudio

    音频采样率

    例:ResampleAudio(48000) #采样率48Kbps

    ⑤AmplifydB

    放大或缩小左右声道音量

    例:AmplifydB(12,12) #左右声道各放大12分贝

    三、第三方滤镜

    第三方滤镜下载地址:http://www.avisynth.org/warpenterprises/

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

    1、源文件滤镜

    ① MPEG2Dec
        由dividee编写的读取DVD2AVI产生的d2v工程文件的滤镜,同时内建去除Noise的TemporalSmoother。
    例:LoadPlugin("MPEG2Dec.dll")
      MPEG2Source("test.d2v")

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

    ③ MPEG2Dec3
        在MPEG2Dec2的基础上再进行了改进,加入了Nic的图像后处理(PP),一定程度上可以减少Noise。好像除了P4的SSE2外,还加入了AMD的3D Now!优化,目前还在开发中,是个非常有前途的滤镜。
    例:LoadPlugin("MPEG2Dec3.dll")
      MPEG2Source("test.d2v",CPU=4) # CPU=4就是开启了PP模式

    2、处理滤镜

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

    ② 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

    交错处理推荐使用ffdshow来处理。

    LoadPlugin("ffavisynth.dll")

    ffdshow(options="isDeinterlace=1,deinterlaceMethod=1")

    #isDeinterlace=1是代表启用ffdshow的反交错(deinterlacing)功能 
    deinterlaceMethod=1是代表反交错模式用自动(参数有1-12)


    4、字幕滤镜

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

    ② TextSub
       SSA和ASS字幕:这个也是VobSub自带的,可以内嵌特效字幕。
    例:LoadPlugin("VSFilter.dll")
      TextSub("test.ssa")

    TextSub("test.srt")

    5、其它虑镜介绍

    FluxSmooth(5,7) #柔化滤镜 
    Convolution3d("moviehq") #3D优化滤镜 
    2者需要加载相应的滤镜插件

    6、截图
    没有想到用avs来截图吧,只要用播放器播放一下写好的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")

    7、120fps的avi

    AVISource("c:\wmv3.avi") 
    ChangeFPS(23.976)

  • 相关阅读:
    那段岁月
    ExtJS +Asp.NET实践(1)GridPanel与服务器端数据交互
    Jqplot+asp.net画图实现
    VC++ 内存机理的个人理解(一)——地址和指针的关系
    恢复PL/SQL Developer中删除确认对话框
    VC++ 内存机理的个人理解(二)——堆和栈
    用VS 2008开发WCF(一)——最快速的WCF入门
    用VS 2008开发WCF(二)——构建最初的服务器
    联想G460笔记本触摸板驱动 For Windows 7 x64
    .NET async await 关键字最简单例子
  • 原文地址:https://www.cnblogs.com/top5/p/1929198.html
Copyright © 2020-2023  润新知