IVTC和Deinterlace

IVTC(Inverse Telecine)
  这可能是整个制作过程中最让人头痛的一部分了,什么是IVTC,这就可以写出很大一段来,下面简单地介绍一下。英文的原意是电影电视反转,大概的意思也就是在两种不同的标准下的转换。
  以下先谈谈几个基本概念:
  电影胶片的回放速度是24帧/S,而DVD是用场(Field)来作为基本单位,而隔行的标准是速度为60 Field/S,NTSC标准中则是30 Frame/S。也就是说实际上NTSC DVD是用2 field->1 frame的。而这两场结合在一起的时候就会出现一个完整的帧,这就是隔行的处理方式(Interlaced)。电视信号是隔行扫描的,这意味着每一屏”画面”实际上是由两个”半帧”构成的,即两个分别由奇数线与偶数线组成的场。首先奇数线被打到屏幕上,然后隐去,接着偶然线被打在原奇数线之间。依次显现又隐去的奇数场和偶数场使具有一定形状的图像易产生明显的抖动,特别是那些细的水平线。
  然后再来看从电影胶片到DVD的这个转换,很简单地可以看出要把4帧对应给10个场这样才能保证电影和电视制式之间的一致。但实际上4和10没有办法完全均匀地分配,于是就采用的是一种3-2混合的模式,也就是常说的3-2 pulldown,也就是用一帧产生3个场,然后下一帧产生两个场,如此交替进行。3-2混合继承隔行视频时所说的很多缺陷。只要某一场和前一场是由不同的电影帧生成的,就有可能出现锯齿和线抖动等情况。只要组成视频帧的两个电影帧之间有任何差异,比如亮度、颜色,尤其是运动,当这两帧在电视上合并的时候都肯定会造成某些缺陷。而对于逐行显示,像高性能的CRT/LCD/DLP/D-iLA投影机,还有新的HDTV-ready电视,是可以用NTSC速度的两倍来进行扫描的。这样一来,隔行系统只能扫描一场的时间里逐行系统可以扫一个完整的帧。上面提到过隔行设备每秒显示60场。但是在逐行的情况下,每一场现在都是包含从上到下所有扫描线的完整画面。所以现在是每秒显示60帧,当然实际上电影胶片一秒是只有24个不同画面的。
  对于NTSC制式的DVD来说,就是要把本身30frame/s的画面转回电影胶片画面24frame/s。(PAL制式的是25frame/s),那么这个过程一般就称为IVTC,由于DVD电影都是解码成隔行,所以电影的原始帧倒都还在,只是被分解开了而已。隔行转逐行就是把一对隔行的场融合成一幅逐行的帧,时间还是只有一场的长度(1/60秒),并将其显示至少两次来占满显示两场的时间(1/30秒)。对于每一个生成了三场的电影帧,第三场就是第一场的重复(如果MPEG-2编码器工作正常),这一场根本不会储存在DVD上。DVD不会将重复的场编码,而是用标记repeat_first_field和top_field_first来告诉MPEG解码器在播放中把这些重复的场放在哪里。也就是说这个转换过程是用每个电影帧的两场来生成一幅看起来和原始电影帧一样的完整逐行帧。
  经过IVTC计算后的画面是逐行画面,而且同样文件大小可以获得更好质量。但是以上讨论的实际上是用电影胶片制作的DVD,也就是是属于本身的源是逐行的,只是转换成了隔行的DVD而已,DV就不一样了一般的家用DV都是隔行的(也有部分专业或准专业DV是逐行的),所以如果要把DV的源转换成24frame的逐行的胶片模式,就有一个很大的问题,它本身的每一场都是不同的,不象胶片转成的DVD有一场是相同的,所以如果要把DV转成24frame就要采取运动适应(Motion-Adaptive)和运动补偿(Motion-Compensation)算法来克服隔行节目源的固有问题。目前还没有最佳的办法。所以理论上说对DV片源做IVTC是肯定会影响效果的。所以不推荐对之做IVTC,但是出于一些特殊需要和其他的原因,可能在某些场合需要做这步操作,下面就介绍两种办法。
  a)用AviSynth来完成,示范脚本如下,其中采用的是Decomb插件:
  LoadPlugin(“TomsMoComp。dll”)
  LoadPlugin(“Decomb。dll”)
  DirectShowSource(“source。AVI”)
  #IVTC
  Telecide()
  Decimate(cycle=5)
  # CROPPING
  crop(8,0,704,480)
  # RESIZING
  #BicubicResize(640,480,0,0。5)
  LanczosResize(640,480)
  b)采用TmpgEnc这个软件来完成。
  首先确定正确的Filed Order(场序),需要在[Setting] – [Advance]中调整Field Order才能正确的进行IVTC。确认正确场序的方法如下:
  1.选择任意一个场序
  2.双击[Deinterlace(None)]进入设置页面
  3.选择[Even-Odd field (filed)]
  4.这时拖动影片至一个运动场景,按住 -> 右方向键进行播放
  5.如果第一步中输入的场序是错的,此时就会发现有时画面会倒退。如果播放正常,则第一步中输入的场序是对的。
  6.点击 Cancle 退出
  用Tmpgenc作IVTC的步骤如下:
  1. Tmpgenc – “Video Source” – “Browse”打开DV文件。
  2. 点击“Load”,引入“unlock。mcf”模版以便于进入设置
  3. 进入“Setting”设置,切换到“Advance”栏。选择正确的场序后,双击“Inverse Telecine”
  4. 进入IVTC设置界面后,点击“Auto-Setting”准备开始。
  5. 选择24fps、Flicker priority或Motion priority等。由于已经作了IVTC,Deinterlace也可以省略。
  6. 点击“Start”开始IVTC运算。(“Enable when encode”选项可以在压缩时实时计算,不过无论从效率或是稳定性看都不值得使用。)
  7. 可能需要颇长的一段时间进行IVTC计算。之后点击“OK”,结束IVTC设定
  8. 回到Tmpgenc面板:[File] – [Save Project] 保存工程
  9. 检查Tmpg的Option设定,确认已经安装好Tmpg的Vfapi Plug-in,并选中“TMPGEnc。vfp is registered to VFAPI”
  10. 使用VFAPI Converter将。tpr工程文件转换为一个很小的VFAPI格式的。avi
  以上两种方法,第一种比较简单,但实际上要想取得很好的效果却不大容易,必须实验很多参数和开关来获得比较满意的效果,第二种方法步骤比较多,但相对容易一些,效果也还不错,推荐初学者使用。但无论如何,还是不推荐对DV做IVTC的。
  4.Deinterlace
  这个概念和IVTC是要做些区分的,这里的Deinterlace专指对于”纯”的隔行流(也就是不包含TC逐行帧的流),也就是象DV这种片源本身就是隔行的情况,而不是由逐行转换而来的隔行流(比如DVD,那种要还原原来的逐行帧或者用还原逐行帧的办法产生帧的情况就是IVTC了)。
  做了IVTC的也就可以直接跳过这一步了,如果没有做IVTC还得老老实实地看下去。
  有很多软件和插件可以完成这个任务,而效果也是各说不一,速度上也有一些差别,大致比较常用的办法,一是用AviSynth的脚本调用插件;二是用Virtual Dub的插件。一般认为前者速度相对比较快,国外很多个人喜欢采用,后者比较方便,Virtual Dub内置的deinterlace插件效果就不错。
  我个人比较常用的是AviSynth的deinterlace插件是TomsMoComp,示范脚本如下:
  LoadPlugin(“TomsMoComp。dll”)
  DirectShowSource(“source。AVI”)
  #Deinterlace
  TomsMoComp(0,15,1)
  当然其他还有很多很多类似插件,就不一一叙述了。
  Virtual Dub可以直接在菜单中Video->Filters->Add,然后选择deinterlace,一般使用Blend fileds togther(best)就可以了,效果也还不错。另外也可以使用一些其他的外挂插件如smart deinterlace等等,各有千秋。

原文地址:http://smbest163.blog.163.com/blog/static/1042272200702910486286/

转载请注明: 转载自MeGUI中文版博客

本文链接地址: http://meguizhcn.sourceforge.net/blog/?p=761