AVS教程:AviSyn学习手册.docx_第1页
AVS教程:AviSyn学习手册.docx_第2页
AVS教程:AviSyn学习手册.docx_第3页
AVS教程:AviSyn学习手册.docx_第4页
AVS教程:AviSyn学习手册.docx_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在本章中,我们来学习 AviSynth,并手工创建 AVS 脚本。AVS 在 DVDRip 制作中是至关 重要的一个步骤,直接影响到画质好坏。因此,AVS 也是无数 Ripper 花大力气研究的对象。 当积累了一定经验和熟练度之后, 创建 AVS 脚本是一件相当有乐趣且轻松的事情。 有经验的 Ripper 看到片源之后,立刻就可以基本确定需要使用那些滤镜、怎样搭配滤镜参数,之后, 需要使用那些滤镜、 需要使用那些滤镜 怎样搭配滤镜参数,之后, 只要进行细微的调整, 只要进行细微的调整,便可得到希望的效果。新手成为老手,需要一个积累经验的过程,除 了多看别人的心得、遇到问题勤于提出之外,就只剩下自己多做片、积累实战经验。经验的 积累是一个较长的过程, 因此不要梦想阅读了某篇文章后一夜之间成为所谓高手, 经验不会 骗人,因此脚踏实地才是正确的道路。 有点说多了。现在来提一下提高 AVS 运用水平的两条小经验: 1. 英语要好,因为大多数滤镜的文档都是 E 文的,且很少有中文翻译版; 2. 善于使用各种搜索引擎,比如 GOOGLE、一些论坛的搜索引擎等。 3. 善于提问。在提出问题之前,看看说明、用搜索引擎搜索一下,这样一来,应该说 85%的问题都能够很好的解决。这样不但为别人省去了麻烦,而且这样学来的知识最牢固。 废话不多说了,我们来进行第一节 AviSynth 简介AviSynth 是 AVI SYNTHesizer 的缩写,意思就是 AVI 合成器,是一个 Frameserver。 (Frameserver 就是一个把影像文件从一个程序转换到另外一个程序的过程, 其间没有临 时文件或中介文件产生) AviSynth 是由 Ben Rudiak-Gould 首创的一种非常有用的工具,能够提供各种方式来处 理影像文件。最独特的就是 AviSynth 并不是一个独立的影像处理程序,而是在影像文件和 影像处理软件之间担任“中间人”的角色。 AviSynth 的基本工作原理是这样的: 首先由使用者建立一个包含特定命令的文本,称之为“脚本”(后缀为 avs),这些命令 指定要运行处理的影像文件和滤镜; 然后运行影像应用程序,比如 VD 或 ND,打开脚本。此时 AviSynth 就开始工作了,打开脚 本中指定的影像文件,运行特定的滤镜,并把输出结果提供给影像应用程序。但影像应用程 序并不了解 AviSynth 在后台所做的处理,而认为是直接打开了一个“被处理过”的影像文 件。语法及基本应用技巧 写给新手 第二节 AVS 语法及基本应用技巧写给新手既然要编写脚本,就要知道怎么写。在本节中,我们结合实例来了解一下 AVS 脚本的基 本语法。只有懂得了写法,才能更好的运用。当然,不少人会觉得本节都是废话那么恭 喜你,你已经是老手了,你可以直接跳到下一节。 AVS 脚本的语法非常类似于 C 语言的语法, 但比 C 要简单得多。 如果你有一定的 C 语言 (或以 C 为基础的脚本语言, PHP) 如 的编写经验, 那么你会发现 AVS 竟然是如此的简单 你甚至可以跳过本节直接进行下节的内容。比如,笔者有过将近一年的 PHP 编程经验,当接触到 AVS 的时候,几乎没有花费任何力气就上手了。 跟往常一样,先了解几个概念。 函数函数的英文名字叫 function,这个词在英文中还有“功能”意思,没错!AVS 中绝大部分的功能都是通过各种各样的函数来实现的。 至于“函数” 的确切定义, 数 高一 学(上册)中写得很明白,笔者就不废话了。AVS 中的函数按调用方式分为两类,一种是 内置函数,一种是外挂函数。内置函数已经放置在 AviSynth 软件内部,可以在脚本中直接 调用;外挂函数不包含于 AviSynth 中,需要在脚本中额外加载相应的 DLL 文件或其他 AVS 脚本函数才能调用。AVS 包含的众多内置函数我们将会专门抽出一节来介绍。 外置函数可以在网上下载得到。正是因为这点,AVS 被赋予了几乎无限的扩展性,我们 可以通过在网上找到各种函数来实现五花八门的功能。 忘记说了, 有些人喜欢管“函数”叫 做“滤镜(filter)”或“插件(plugin)”,实际上这么叫也是正确的,就连 AVS 的众多官 方文档都称之为滤镜、插件。但是就笔者个人来说,更愿意叫“函数”,因为这些“滤镜” 的使用方式是函数的 f(x)的形式。 参数既然有函数,就要说参数。如果说函数是实现某样功能用的,那么参数就是告 诉函数通过什么方式实现、实现到什么程度等等的信息。上面说的 f(x)的调用形式,f 是函 数名称,x 就是参数。有的函数一个参数就够了,有的函数却要很多参数,四个、五个、十 多个。比如 Telecide 这个函数如果把所有的参数加起来一共有十四个之多。好在不是所有 的参数都是必要的。有些参数可以写也可以不写。如果不写,函数就会自动使用其内部的默 认值。但是,如果必写的参数不写,那么函数就无法启动。 变量变量可以简单的理解成某个对象的名字(实际上要复杂一些;)。比如,我 们规定“本文作者=大虾”,那么当我们提到“本文作者”的时候,我们的第一反应就是那 个叫“大虾”的家伙,HeiHei。 好了,下面我们借个一段极其简单的范例来了解一下 AVS 的语法: #plugin LoadPlugin(E:gkAviSynthPluginsDGDecode.dll) #source mpeg2source(F:dvdrip-tempsoultaker.d2v) #crop crop(4,4,712,476) #resize LanczosResize(640,352) 上面的例子中, “#”后面跟着的句子是被“注释”掉的。 注释是什么意思呢?就是说, AviSynth 读到这句话的时候,一看到这句话前面有“#”,就会 54 (无视)它,继续读到 下一行。编写脚本写注释是一个好习惯,尤其是极其复杂的脚本。这种情况 AVS 脚本大概不 会遇到, 但是当编写 PHP 的时候, 成千上万行的代码如果没有注释那无论是试图阅读代 码的人还是作者本人,都会头晕脑胀。 糟糕扯远了。我们回到主题。紧接着下面,“LoadPlugin”,这是一个函数的名字,后面的括号“()”中的内容就是 参数。LoadPlugin 函数的功能是载入插件,后面括号中的参数便是告诉函数,要载入 “E:gkAviSynthPluginsDGDecode.dll”这个插件。 Mpeg2source 是包含于上面提到的“DGDecode.dll”中的外挂函数,也就是说,如果不 加载 DGDecode.dll 这个文件的话,mpeg2source 就无法使用。 Crop 是 AviSynth 的内置函数。这里涉及到了多参数函数。这个函数有四个参数,每个 参数之间用“,”隔开(注意是英文逗号,不是中文逗号)。 函数的写法多种多样,像 LanczosResize 函数,只有两个参数,所以我们写“640,352”即 可。但是像前文提到的 Telecide 这样复杂的函数,我们需要将参数的名字也写进去。比如: Telecide(order=1,guide=1,post=2,vthresh=25,show=true) 其中,order、guide、post 等等的,就是参数名称,参数名称和参数值之间用“=”连 接(废话!)。 还有一点要注意,数值型(比如 1、25 之类的)/真假型(true 或者 false)的参数, 不需要用双引号(英文双引号)引起来。但是,字符型的参数,必须要用双引号引起来。例 如: mpeg2source(F:dvdrip-tempsoultaker.d2v,idct=7) 这个例子很明白,F:dvdrip-tempsoultaker.d2v是字符型的变量值,要加双引号; 7 是数字型的参数,不用加双引号。 下面介绍一些小花招,让我们的处理更加轻松。 AVS 技巧 1:使用变量 当我们在一段 AVS 之中需要打开多段片源、需要分别处理的时候,就要用到变量。请看 下面的例子: Clip1=avisource(“d:.avi”) Clip2=avisource(“d:.avi”) Clip3=clip1+clip2 Return(clip3) 在这个例子中,clip1、clip2、clip3 都是变量,现在你也能够理解变量的概念了吧。 很明显,我们在 clip3 中将前两个片源合并在了一起,然后用 return 函数输出 clip3, 我们在视频编缉软件中最终看到的结果是:播放 1.avi,1.avi 放完后,紧接着放 2.avi。 当然,这里只是举例子,其实合并没这么简单的,因为两段片源的 fps、分辨率、颜色 模式都要完全相同。至于怎么让他们“完全相同”,将会在后面的章节中讲到。这里只是要 大家了解变量是什么东西。 “.”的妙用 AVS 技巧 2:“.”的妙用 看下面的 AVS 脚本: v1=avisource(C:.avi).ConvertToYUY2()v2=avisource(C:.avi).ConvertToYUY2() 这样写等价于: v1=avisource(C:.avi) v1= ConvertToYUY2(v1) v2=avisource(C:.avi) v2= ConvertToYUY2(v2) 是不是省了很多事?赫赫在编写复杂的脚本的时候尤其好用(至于 ConvertToYUY2 是什么东西我们后文再讲) AVS 技巧 3:分段处理 就算是同一影片在不同的段落中也会表现出来不同的特色。 有时候我们需要对一些片源 进行特殊处理,这就用到了截取。还是先看例子: Source=avisource(“c:clip.avi”) Clip1=trim(source,0,1999) Clip2=trim(source,2000,3000)这样,我们就用 trim 函数分别截取了影片的 01999(包括 1999)号帧和 20003000 帧。下面就能针对两段影片分别进行处理了。 有一点请注意: 号帧也算一帧, 号帧其实是影片的第一帧, 号帧是第 2 帧, 0 0 1 依此类推 我们截取到 1999 号帧,事实上截取了 2000 帧!自然,2000 号帧是影片的第 2001 帧。 AVS 的基础语法以及一些小技巧就讲到这里了,更多的应用技巧还希望大家自己去探 索。这一章对已经掌握 AVS 的人来说可能是废话,但是对于从来没接触过 AVS 得初心者,却 是需要重点掌握的。俗话说,工欲善其事,必先利其器。要写好 AVS 脚本,必须要打好基础 才行。第三节 AVS 常用滤镜介绍一、常用内置滤镜本节大虾偷懒,转载一篇精品论坛的经典文章给大家看。(既然有人写好了,大虾自然 可以偷懒了HiaHiaHiaHia)本文在原文的基础上略微修改了一下,还望作者见谅。 AviSynth 内建了数目繁多的滤镜,所以只能介绍一些最常见实用的一部分。 1、 源文件滤镜 AVISource 用于导入 AVI 格式的影片,需要安装相应的 Codec 才能导入。 例:AVISource(“test.avi”) WAVSource 导入 WAV 例:WAVSource(“test.wav”) 2、 处理滤镜 AddBorders加边:给影像加黑边。参数是整数,顺序是左、上、右、下。 例:AddBorders(0,64,0,64) 就是给图像上下各加 64 像素的黑边。这个滤镜似乎并不常用。 ConvertToRGB 和 ConvertToYUY2 改变颜色环境: VD 和 AviUtl 第三方滤镜有的需要 RGB 环境才能运行,需要 ConvertToRGB 来进行切换。 有的 RAW 文件是 RGB 的, 但一些 AVISynth 滤镜只能运行在 YUV 下, 就需要用 ConvertToYUY2 来处理。 关于颜色环境的问题,请参阅本文第三章相关内容。 例:ConvertToRGB() 改变成 RGB 颜色环境 ConvertToYUY2() 改变成 YUV 颜色环境 Crop 切边:为了保持比例或切除黑边,参数是整数,顺序是左、上、宽、高。 例:Crop(8,0,704,480) 左右各切去 8 像素。 Levels 层次:调节亮度、对比度和 Gamma 值。 例:Levels(0,1.2,255,0,255) 调整 Gamma,使画面变亮 LanczosResize 缩放滤镜:LanczosResize 是 BicubicResize 的替代者,提供更精准、更锐利的画质。在日 本普遍使用,欧美大多使用 BicubicResize。本来是日本人开发的第三方滤镜,自 AviSynth 2.05 版本开始吸收为内置滤镜。 例:LanczosResize(640,480) 把分辨率改变为 640*480 Tweak 调整:可以调节色度,饱和度,亮度,对比度。 色度:-180.0180.0,默认 0.0。正数趋向红色,负数趋向绿色。 饱和度:0.010.0,默认 1.0。0.0 为黑白。 亮度:-255.0255.0,默认 0.0。 对比度:0.010.0,默认 1.0。 3、 编辑滤镜 FadeIn 和 FadeOut 淡入和淡出:提供淡入和淡出功能,尤其是淡出功能,可以使影片结束地更自然。参数为整 数,表示需要编辑的帧数。例:FadeOut(24) 影片最后 24 帧淡出 Trim 截取:可以截取某段影片。参数为整数,表示需要编辑的开始帧和结束帧。 例:Trim(240,480) 截取 240480 帧这一片断4、 声音滤镜 AudioDub 影音合并:可以把影像和声音合并在一起。 例: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 延迟半秒 以上便是 AviSynth 的常用内置函数。二、常见的外挂滤镜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、 处理滤镜 ColorYUY2 颜色补偿:Kiraru2002 编写的滤镜。由于经过编码,得到的结果和 DVD 相比较,颜色有所 改变,所以要对颜色进行补偿。 例:LoadPlugin(ColorYUY2.dll) ColorYUY2(0,10,0,10,0,0,0,0,0) ChangeFPS() 改变影片帧率,iphone 一般来说支持最大 30fps例:ChangeFPS(23.976) #改变影片帧率有几种数值 12、15、20、23.976、24、25、29.97、30 这几种,一般来说不 改变也行。 undot() 消除噪点,可以使用一个或多个,可以连在一起用,自己看效果体会。 无参数,直接加上就行了。undot 滤镜是进行象素及细小噪点降噪,一般用来去除细小的、 肉眼不容易察觉的噪点,所以具体效果上并不明显。 例:加在其它滤镜后,使用多次。 LoadPlugin(UnDot.dll) DirectShowSource(test.avi) UnDot() LanczosResize(480,272) UnDot() 或者: UnDot().UnDot().UnDot().UnDot() 具体用暴风预览效果。 FluxSmooth() 柔化兼有降噪功能,比 UnDot()作用要强些. 例:LoadPlugin(fluxsmooth.dll) fluxsmooth(5,7) 一般用这个默认(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) 强力 SpatialSoften() 空间轴柔化滤镜。基本参数 3 个,如 SpatialSoften (4,8,8)第一个指柔化程度,数值不要 太大,25 之间,后 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) 一般取 0.20.3 WarpSharp() 锐化滤镜: 主要改动 depth,bump 这两个数值 越下面的线条越细 例: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) 可以使用其中的一套, 使用具有处理效果的滤镜会增加压片的时间.片源不好就按需选用些. 总之能尽量少用就少用,或者干脆不用. Blur(0,1)是模糊滤镜,设置了垂直参数可以消除些边缘刻痕 可以连续加载 Blur(0,1).Blur(0,1) 可以结合 MergeChroma 或者 MergeLuma 来使用,MergeLuma(Blur(0,1)Blur(0,1)Blur(-1) 如 就相当于锐化滤镜了3、 交错滤镜 Decomb IVTC 和 Deinterlace 滤镜:由 Donald A.Graft 编写,新增加的专门处理 NTSC 格式动画的 mode=2,要和 Avisynth2.05 以上版本使用,不然速度会慢一倍。 guide 02,默认 0, NTSC 用 1,PAL 用 2,可以提高 IVTC 准确度。 gthresh 0100,默认 15,控制区分不同帧的程度。 post 默认 true,用来处理 IVTC 遗漏的细节,使画面略微模糊。 threshold 0255,默认 15,控制 post 的程度。 dthreshold 0255,默认 9,控制 threshold 判定 IVTC 遗漏的程度。 blend 默认 true,在交错画面用渲染来替代填充。 chroma 默认 false,在交错画面的亮度色度调整。 cycle 225,默认 5,每 n 帧删除 1 帧,NTSC 选 5,PAL 选 25。 mode 02,默认 2。mode=0 对 cycle 里最相近的帧不进行处理。 mode=1 对 cycle 里最相近的帧进行处理,用于处理混合帧速。 mode=2 在一个很长的范围里进行帧对比,可以正确处理动画里由 8 帧或 12 帧复制为 29.97 帧的情况。 Threshold 默认 0,控制 mode=1 时的处理重复帧的程度,Threshold 默认 100,控制 mode=2 时的处理重复帧的程度。 Quality 03,默认 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 上面简单介绍了 AviSynth 的里的一些常用的滤镜,还有很多滤镜的功能有待遇您自己 开发, 还有重要的一点想说一下: 脚本及其各种滤镜主要适用于大码率媒体文件的处理, avs 也即我们经常接触的 DVDRIP/TVRIP avi 的制作优化。而对于高度压缩格式的 rmvb 来说,我 们利用的 avs 滤镜更应该持慎重态度(如亮虑镜、字幕虑镜、画面调整等少数几个)!也就 是说 avs 在 rmvb 压制方面,我们需要的是利用 avs 灵活的“中间人”的角色!而不是为了 avs 而去压制!我看到好多朋友初步接触 rmvb 压制,就在用 avs 压制 DVDRIP-rmvb,完全 套用个别论坛给出的 avs 脚本,里面全是各种滤镜,如 3D 增强、柔化、去丝等!这些滤镜 如果制作 DVDRIP 的 avi 那是会获得肯定的画质效果,但是用于 rmvb 压制,仿佛就是东施 效颦,忠言逆耳!real 压制的原理和高码率的 mpge4 编码是不同的,后者有视频上层的概 念,因此滤镜的修饰作用可以体现。我看 Doom9 讨论 avs 时,主要还是处理各种大数据量影 像媒体为主。如处理自己 DV 录制的影视、电视卡录制的视频源之类的等。而众所周知的影 响 real 媒体压缩效果就是片源效果。VCD 片源的再怎么处理也不可能达到 DVD 的效果,而 DVD 片源,再怎么胡乱压制也不会差到哪里。因此 avs 直接在 rmvb 的压制中需要适当选择, 而不能盲从,特别是对于各种滤镜的选择更要注意。一句话 AviSynth 非常灵活,要按具体 情况具体分析。复习: 第四节 复习:IVTC/Deinterlace 应对策略接下来的数节中,我们将讲解 IVTC/Deinterlace。IVTC/Deinterlace 无论如何都是一 个值得大书特书的过程,DVDRip 一半的质量都是取决于 IVTC/Deinterlace 的好坏。 首先,我们先了解一些概念。 24p:本章经常会遇到这个概念,意思就是,24fps 无交错的胶片,经过胶卷过带,最 终形成的 30fps、每五张中有两张交错的片源。 30i:意思是,30fps、张张都 Interlace(交错)的片源。 场匹配反交错:这个动作一般对象指得是 24p 的影片,通过对(前)中后三帧进行场匹 配(具体原理下文会讲),还原原本没有交错的画面。注意,是还原!这样还原出来的帧和 原来没有交错的帧理论上应该是一模一样的。场匹配反交错是在帧与帧之间进行的。 Deinterlace:反交错,通过一定手段,让原本交错的帧显得不再交错。注意,是“显得不 再交错”而不是“还原”,经过 Deinterlace 的画面与原本的画面是有很大差别的。 Deinterlace 只在本帧内进行,是对单幅画面的处理。注意,Deinterlace 一定要和场匹配 反交错这个概念区分开!否则读下文的时候会非常糊涂。 接下来,我们先来复习一下各种类型片源的处理方案(大虾偷懒,引用 Silky 大人的文 章)。 a)24p( Film、 a)24p(也叫 Film、3:2 pulldown 型) 有些影片,讯源是 24fps,拍摄的时候是用胶片以 24fps 拍摄的,每一张都没有交错, 例如大部分的电影。为了要能在 NTSC 的电视上播放,电影胶卷过带(telecine)的时候必 须转成 30fps(即前面说过的 3:2 pulldown)。 这种影片,其原始画面其实是 24fps 无交错的,可以作 IVTC,经过场匹配反交错、删除多 余的画面,还原回原本的 24fps。 大部分的电影,无庸置疑,其讯源一定是 24fps 无交错,可以作 IVTC。 电影转成 PAL(25fps)的时候,用的是 2:2 pulldown,画面还是无交错的,只是加快 播放速度,变成每秒播放 25 张。不过有些 PAL 的 DVD 会向前提一个场,造成画面每一张 都交错。 还有一些 PAL DVD 非常奇怪,25 张之中会有重复的一张画面,这时就必须删除重复的 那一张画面还原回 24p,删除重复帧的步骤叫做 Decimate,后文详述制作方法。 b)30i( b)30i(也叫 Video 型) 这种片源通常由摄像机拍摄得到,每一张都是交错的。大部分的 NTSC 电视节目(连续 剧、综艺节目、新闻报导.)、交错式的 DV 都是这种讯源。对付这种讯源,通常会采用 Deinterlace 的处理方式,经过这种方式处理过后,画面可能会变得模糊一些。 c) 30fps progressive, 30p 30fps 每一张都没有交错,例如计算机动画 这种讯源,当然什么处理都不用作。你可以直接跳过 IVTC/Deinterlace 这个步骤。 d) Hybrid, Mixed 混合 24p/30p 在动画 DVD 上面常见,例如片头是 30fps progressive,每一张都没有交错,本篇却 是 24fps progressive,五张之中有两张交错;或者是 CG 的部分 30p,其它部分 24p。做成 AVI,AVI 只能用一种固定的 fps,所以可以分开做的话分开做,把 24p 和 30p 的部 分分成两个 AVI,例如片头 30p 一个 AVI,本篇 24p 一个 AVI。如果不好分开,例如几乎 都是 24p,只有中间 CG 的部分 30p,只好强制 24fps 做下去,这样 30p 的部分会顿,不 过也没办法了。 如果做成 30fps,24p 的部分每四张要重复一张,也是会顿。 最好的做法是转成 120fps 120 是 24 和 30 的最小公倍数,做成 120fps,可以兼顾 24p 和 30p,不会顿,又不 用牺牲画面。至于 120fps 影片的制作方法,涉及到很多方面,因此不列入本文讨论范围, 网上此类教程比较多,读者可以自行参考研究。 或者干脆放弃 AVI,改用 .mkv 等可以支持 变动 frame rate(VFR) 的文件格式。 e) Hybrid clip, Mixed, 混合 24p/30i, 混合 24p/48i, 混合 xxx/xxx . 例如部分 24fps progressive,五张之中有两张交错,部分 30fps interlaced,每一张都 交错。这种片源通常使用 Telecide 和 Decimate 函数进行处理(下文有详述)。 f) Hybrid Frame 或其它乱七八糟的型式 一个 Frame 之中,部分交错,部分没交错。例如有些影片的字幕、工作人员名单是 telecine 之后才叠加上去的,造成背景画面没交错,前景字幕却是交错的。这种情况应做 Deinterlace。 还有错误的 DVD mastering, 剪接的时候少掉一张, 图场颠倒, enocder 的 IVTC 错误, 造成 frame 画面无法补回无交错的状态.等等。 这些类型较难处理, 可能需要更为精确 的手动 IVTC/Deinterlace 处理,还可能涉及到 120fps 的 AVI 的制作。所以在这里,笔者 建议不熟练掌握技术的朋友放弃这两种类型,或者寻找更佳的片源。讲解: 第五节 讲解:用 Decomb 做 IVTC/Deinterlace在复习完了各种片源类型之后,我们正式开始介绍 Decomb。Decomb 是 Donald A. Graft 开发的一套 IVTC/Deinterlace 滤镜包,是现在使用最广泛的反交错插件,功能强大,速度 快 (像是在做广告) 本文来介绍一下使用 Decomb 中包含的 Telecide、 。 FieldDeinterlace、 Decimate 三个函数来完成 IVTC 或 Deinterlace 的任务。 首先介绍 Telecide 函数。 Telecide 的作用是 IVTC 中的去交错。因为它只负责去交错,所以 Telecide 只完成了 整个 IVTC 工作中的一半,另一半删除重复帧的任务,需要配合 Decimate 函数来完成。删除 重复帧做法,我们在下文讲解。 Telecide 一般用于 NTSC 3:2 pulldown(24p)、PAL 2:2 pulldown、24p/30i hybird 这三种类型影片的反交错处理,如果片源不属于以上三种类型,请不要使用 Telecide。 首先介绍一下 Telecide 反交错的原理。Telecide 在默认的情况下会通过一种叫做 FieldMatch(场匹配)的技术来完成反交错的工作。我们以 BottomField First 为例,讲解 FieldMatch 的原理。当 Telecide 函数收到一个 AVS 传来的请求的时候,它会读取当前帧(下文用 C 表示,即 Current) 与下一帧 (下文用 N 表示, Next)并将这两帧拆成由奇数扫描线组成的 Top Field 即 , (下文用 t 表示)和由偶数扫描线组成的 Bottom Field(下文用 b 表示)两个场(Top 和 Bottom 其实就是基数场和偶数场,只是叫法不一样),如下图: 此时, Telecide 函数会用 Cb 场分别与 Ct 和 Nt 两个场进行组合 (如果是 Top Field First, Telecide 就会以 Ct 为基准进行组合): Ct Cb(组合一) Nt Cb(组合二) 然后,Telecide 会对这两种组合方案进行比较,选择交错比较小的一种输出。注意! 是选择交错小的一种输出,而不是选择无交错的一种输出。因为在一些情况下,经过 FieldMatch 仍然无法找到匹配的场,所以这种情况下,输出的结果仍然可能是交错的。 下面以 2:3 pulldown 的片源为例,对这个过程进行实例说明。 当 Telecide 收到对 C 帧进行反交错处理的请求之后,它会读取 C 帧和 D 帧,并将两帧 拆分成 2O、3E(C 帧)和 3O、4E(D 帧): 这时,Telecide 会以 3E 为基础,将其与 2O 和 3O 两个场进行组合: 2O 3E(组合一) 3O 3E(组合二)?Bingo!中奖组合正确无交错 Telecide 会对上面两种方案进行比较,然后输出交错较小的一种。 按照上面的方法,一段 2:3 pulldown 的片源经过处理之后就变成了下面的样子: 我们可以看到,经过场匹配处理之后每帧都无交错,但其中 D、E 两帧重复了!如果把 这样的结果拿去播放的话,会发现画面一顿一顿的,所以去交错之后,还需要删除重复帧才 能够正常播放。 下面说明一下 Telecide 函数在应用过程中的注意事项: Telecide 要求输入的片源水平 分辨率必须是 2 的正整数倍,颜色区间必须是 YUV2 或者 YV12(关于颜色区间,请参阅第四 章相关内容)。在 Telecide 之前,请不要进行任何 Resize(变形)操作,因为分辨率的改 变可能会导致 Telecide 在场判断上出现误判,造成场匹配失败。在 Telecide 之前,不要 进行任何颜色区间转换操作,因为颜色区间的转换很可能造成交错帧颜色错误,影响 Telecide 的场判断, 造成场匹配失败。 还有一点, 片源中的噪声会影响 Telecide 的场判断, 请尽量使用噪声小的片源。 在了解了 Telecide 反交错的基本原理与注意事项之后, 我们来详细介绍一下 Telecide 函数的参数。由于 Telecide 的参数太多了(惊人的 14 个参数!),所以无法做到一一详 细讲解。这里只介绍几个重要的参数,更多的进阶设定,请参考 Decomb 附带的Decomb 参 考手册。Telecide 函数基本语法: Telecide() Order 参数:对于正确的还原原始影像,设定正确的场顺序非常重要,所以我们首先确定 order 参数。 场顺序通过参数 order 来设定, 本参数为必选参数。 设定 order=1 为 TopField First,设定 order=0 为 BottomField First。因为确定正确的场顺序实在太重要了,所以 强烈建议你按照下面的方法确认场顺序,而不是猜测场顺序。 要确定场顺序, 需要建立一个不对片源进行任何处理的 AVS 脚本。 首先照下面建立一个 AVS 脚本来分离 TopField: #调用 MPEG2 解码器 LoadPlugin(E:gkAviSynthPluginsDGDecode.dll) #导入片源 mpeg2source(F:dvdrip-tempsoultaker.d2v) #进行场分离 AssumeTFF().SeparateFields() 现在,用 VirtualDubMod(简称 VDM,下同)打开上面 AVS 脚本,然后找到一段包含运 动物体的影片并步进向前(一帧一帧地向前),注意运动物体是一直朝它该去的方向运动, 还是在运动过程中突然向回运动。比如,如果场顺序错了,本来应该一直朝右侧运动的物体 在运动过程中突然向左跳一下,然后继续朝右运动;如果场顺序正确,那么它会平稳的一直 向右运动。 如果使用 AssumeTFF().SeparateFields()的时候物体运动正常,则该段影片的场顺序 是 TopField 先,需要设定 order=1;如果运动不正常,则是偶数场先,需要设定 order=0。 如果你想进一步确认是否是偶数场先,使用 AssumeBFF().SeparateFields ()。 我们假设我们的片源是奇数场优先。 到目前为止, 我们的 Telecide 参数是下面的样子: Telecide(order=1) Guide 参数:(范围 03,默认 0 即关闭) Telecide 内置了一个功能叫做 Pattern Guidance。这个功能用于对特定类型的影片的帧序 和场序进行预测,以获得更快的处理速度和更好的处理效果。当 Pattern Guidance 开启的 时候,它会对影片的场序进行预测,并有权推翻 FieldMatch 机能的场匹配方案,同时选用 预测方案进行场匹配。由于 Pattern Guidance 适用的范围有限,所以需要知道影片的确切 类型才能开启 Pattern Guidance。 Pattern Guidance 通过 Guide 参数控制。Guide 参数有四个值,设定 guide=0 关闭 pattern guidance;设置 guide=1 使用 3:2 pulldown 模式(片源是 24fps-30fps 的);设 置 guide=2 使用 2:2 模式(适用于 PAL 制式);设置 guide=3 使用 3: 2:3:2:2 模式(片 源为 25fps-30fps,较少见)。 首先确定你的片源是否是 PAL 制式。如果是,并且其内容为 progressive,你可以直接 设定 guide=2 来使用 PAL 模式。当然,如果片源不含 progressive,你就根本不应该用 Telecide()。所以对于 PAL,我们的 Telecide 参数是下面的样子:Telecide(order=1,guide=2) 如果我们的片源是 NTSC 29.97fps 或 30fps,那么事情就要复杂一些。首先我们要确定 片源是否为 3:2 pulldown 生成的。有很多测试方法可以使用。第一种,直接用 VDM 打开片 源,并且不要进行任何处理。然后找到一处包含运动物体的片段,步进前进。如果你看到 3 帧非交错画面和 2 帧交错画面循环出现,那么就可以确定是 3:2 pulldown 了。大多数电影 都是用的 3:2 pulldown。 像象上面讲的那样寻找 3:2 循环并不十分简单,比如一些动画包含重复的帧,很难清 楚地发现 3:2 循环。 所以我们还有第二种方法,你可以用下面的 AVS 脚本打开片源,然后看 Telecide()怎 样返回结果。(注意,一定要正确的设定场顺序。LoadPlugin(E:gkAviSynthPluginsDGDecode.dll)LoadPlugin(E:gkAviSynthPluginsDecomb.dll) mpeg2source(F:dvdrip-tempsoultaker.d2v)Telecide(order=1,guide=1,post=0,show=true) 用 VDM 打开这个 AVS 脚本, 然后多抽取几段影片浏览。 如果 Telecide()报告in-pattern 或in-pattern*,那么这段影片就是 3:2 pulldown。如果报告out-of-pattern或 in-pattern 、out-of-pattern来回跳动,那么片源就不是纯 3:2 pulldown。 如果你确定片源中含有大量 3:2 内容,那么就应该设定 guide=1。如果 3:2 占的比例 不高或者不能确定片源种类,那就设置 guide=0。我们假设我们的片源种 3:2 pulldown 含 量很高,我们的 Telecide 参数是下面的样子: Telecide(order=1,guide=1) Post 参数(范围 05,默认 2)、vthresh 参数(0.0255.0,默认 50.0): 我们将这两个有密切联系的参数放在一起讲解。 在一些情况下,某些帧在场匹配的时候,不能找到合适的匹配,所以 Telecide 输出的 结果仍然会有交错。这时候,Telecide 就会启动 Postprocessing(后处理)机能,对这种 帧进行 Deinterlace 处理。 Postprocessing 由参数 post 控制,设定 P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论