初学AVS做DVDRIP习作之一:王菀之+张学友《我真的受伤了》Live版MV
2009-08-30 01:03
AviSynth(AVS)脚本的语句灵活,滤镜丰富,初次认识AVS我才深感相见恨晚,做DVDRIP比VDM强大得多了。AVS不难学,有点编程基础的都可以很快上手,难就难在如何恰当地运用滤镜做最好的DVDRIP,尤其是反交错这一技术问题,国内外影视制作论坛都在探讨,一个DVDRIP作品的成败关键在于反交错处理得如何。本文以制作我喜爱的一个MV――王菀之&张学友在“活出生命”演唱会上合唱的《我真的受伤了》Live版为例子,分享一下我的制作经验,不足的地方请各位指正。
刘小锋电视剧成品资料:
视频格式:MKV 体积:45MB 长度:4分32秒 视频编码:X264 2pass 视频大小:704×448 @ 29.97fps
视频码率:1000kbps 音频编码:AAC 48kHz(原唱+伴奏双音轨) 音频码率:192kbps
1、片源
王菀之《Read 》DVD(香港版)
第13首:《我真的受伤了》(張學友活出生命Live版)
香港版原装碟通常在内地很难,我在市内走遍大大小小的唱片店都没得卖,这是在淘宝网上花一百块钱买的。
2、所用到的工具
DVD Decrypter
DGIndex
Gordian Knot
VirtualDubMod(以下简称VDM)
Media Player Classic Homecinema(以下简称MPC)
Megui
X264
Besweet
MkvMerge
3、提取VOB
用DVD Decrypter提取第13首的VOB文件,过程略。提取后的VOB文件码率为9800kbps。
4、分析VOB
过去以为DGIndex是个去拉丝的模拟工具,反复尝试以后方知道原来根本不是,只是用来分析片源而已。
分析显示:NTSC格式,原720×480的分辨率在播放时会以4:3比例还原,帧率29.97fps,帧类型Interlaced。输出D2V工程文件,后面会利用到。

接下来就要做我认为最艰难的反交错(万事开头难―_―)。
5、反交错
(1)不用滤镜,直接用DirecShowSource打开VOB行不行?淑女之家 电视剧
按照论坛相关帖子的说法,这类演唱会MV的片源很常见,反交错比较容易处理,有的甚至说不必弄那么复杂的反交错滤镜,一条DirecShowSource语句打开VOB就搞定。尝试了一下,用VDM或MPC打开avs脚本预览,效果基本令人满意,MV中的卡啦OK字幕稳定,播放十分流畅,不出现任何跳帧,效果基本上与VDM的FieldBob滤镜相同。我在纳闷,既然DirecShowSource能处理得这么好,干嘛还要围着反交错的滤镜大幅讨论呢?(后记:这条语句跟MPEG2软解码器有关,之所以我觉得DirecShowSource能处理得好,是因为当时系统的MPEG2解码器是被公认为最好的Cyberlink PowerDVD解码器)
不过也有一些不足,画面有点模糊,个别地方还留存少量拉丝,比如头发边缘,还有最为明显的一个锯齿镜头:
这个镜头是本例中的难点之一(后面会详细探讨)。
乐谱和麦克风边缘、钢琴盖折边的金属部分等出现很明显的锯齿。
陈数赵胤胤MPC直接播放这个VOB文件时,这画面十分圆滑(全赖我的ATI HD3650显卡硬解DVD):
显卡硬解会自动判断DVD的场交错并综合利用Bob、Weave、Adaptive、Motion Adaptive和Vector Adaptive作出自动适应的反交错,硬件反交错效果自然是最理想的,这是软件反交错难以媲美的。如果要评分,以硬解为100分,那么DirecShowSource的效果我认为是80分。为使质量尽量接近硬解,不得不要钻研反交错滤镜了。
(2)各种反交错滤镜比拼
Megui附带一个AVS Script Creator,利用它载入DGindex生成的D2V工程文件、选择片源类型,就可以快速生成反交错脚本,它提供了几种常用的反交错脚本模板:Yadif、TDeint、FieldDeinterlace、TomsMoComp、TFM等,还可以分析整个D2V自动判断出最佳的反交错方案(这个分析过程要花较长时间,而且分析后提供的“最佳”方案未必是好的)。脚本生成后会出现视频窗供快速预览。
下面是逐个滤镜轮番的脚本调试和我的评价:
(a) Yadif(mode=1,order=1)
当mode设为1时以Bob处理,帧率提高一倍(30fps → 60fps),这是Bob的特征,效果比mode=0的保持原帧率更好,Bob后的画面使那个锯齿镜头圆滑了不少!效果直逼硬解!!!
只是仍还有一些瑕疵,如发丝不平滑,字幕闪烁。
评分:85
周公解梦梦见蛆
(b) TDeint(mode=1,order=1)
同样提供一倍帧率的Bob处理,发丝处理得较平滑,字幕有点闪烁,锯齿镜头解决不好。
评分:85
(c) TDeint(mode=2,order=1)
Mode设为2时是自动将Bob后的画面智能混合,以原帧率输出,也就是自动处理60fps → 30fps,发丝平滑,字幕稳定,锯齿镜头解决不好,画面有点不流畅,似乎丢帧。
评分:85
(d) interp = separatefields().eedi2(field=-2)
TDeint(mode=2,edeint=interp)
该方式处理速度最慢!但锯齿镜头得到较好的解决,字幕有点闪烁,画面还是有点丢帧的感觉。
评分:80
灵活就业人员社保缴费(e) FieldDeinterlace(blend=true, full=true)
效果一般,消除大部分拉丝,锯齿镜头处理不好。
评分:70
(f) TomsMoComp(1,5,1)
拉丝虽然是去掉了,但画面很闪很凌乱!
评分:60
(g) ffdshow(options="isDeinterlace=1,deinterlaceMethod=10")
这个我判它0分!因为这个语句不管怎么设置都根本不起作用,而MPC播放器调用FFDshow解码MPEG2时明明是有效的,害我研究了一个晚上,也不知是哪里的问题。
综上所述,个人感觉Tdeint和Yadif对演唱会MV处理得最好,两者各有千秋。
TDeint的保持原帧率输出时反交错很不错,不过画面有点一顿一顿的,明明是30fps的,看起来像是24~29fps。
TDeint+EEDI2有些好转,锯齿也修复得较平滑,可惜速度太慢,字幕闪烁。
Yadif以60fps输出时也不错,锯齿修复得很好。
要综合两者的有点,就要靠AVS脚本分段处理了。
(3)TDeint处理的画面为何会一顿一顿的?
与其他反交错滤镜相比,TDeint和Yadif的效果远优于其他滤镜,接下来成为重点研究对象。TDeint当以原帧率(30fps)输出的画面没那么流畅,尽管有些场景里不太明显,但在镜头移动的情景里感觉有点丢帧。Tdeint有很多参数,参照官方的说明(u/docs/english/externalfilters/tdeint.htm),调试了一些参数,如type、mtnmode、tryweave、MI、AP、slow、blim等(真累人 >.< )可惜不见任何起。
也许是我对反交错原理认识不足吧,到Doom9论坛差不多翻倒底了也没到这个问题的解决方法,让我郁闷了N久,囧……
(4)60fps → 30fps的研究
TDeint和Yadif都可以Bob到60fps,输出的画质比较满意,但总不能在X264压缩后的视频也是以60fps播放吧?那样不仅需要提高压缩码率以维持较好的画质,同时也增大视频体积,而且老机器播放60fps会吃不消。能否通过其他命令强制混合输出30fps呢?
AVS有几个关于调整fps的语句:AssumeFPS、ChangeFPS、ConvertFPS。
AssumeFPS只是用于调整播放速度。
ChangeFPS和ConvertFPS都是混合帧来达到目的,但两者效果都不理想。
做个DVDRIP原来会是这样艰难T.T
离目标已不远了,可是最后一道障碍不知如何跨越。暂且用DirectShowSource那个版本压缩了,得出满意度为80的成果来安慰一下自己。
后来要出差一个星期,公司的任务又多了,一个星期5天都要加班,累,暂时放弃研究。于是休整了一段时间,以后有空再想。
(5)BlendBob的惊喜
一个多月过去了,在家有点时间再重操旧业。仔细想60 fps、1 frame、2 field的关系,30 fps本来就应该是每两个field的混合成1个frame,如果ChangeFPS和ConvertFPS都不奏效,那就上AviSynth Filter Collection(/warpenterprises/)好些的混合滤镜。一个叫BlendBob的滤镜吸引着我的目光。参考其说明文档和Doom9论坛上的相关讨论,感觉看到了一丝希望。将其运用到Tdeint和Yadif的语句下面测试:
TDeint(mode=1,order=1)
BlendBob(BadFrames=0)

Yadif(mode=1,order=1)
BlendBob(BadFrames=0)
帧率混合到30fps了,结果还是令我失望,效果跟TDeint(mode=2)的SmartBob几乎一模一样。真纳闷这种SmartBob方式的“Smart”体现在哪里?
偶然间试了BlendBob的debug=true参数,VDM预览时将显示调试信息,猛然发现它在blend的时候是“智能”地将prev和curr,或者curr和next进行混合,也就是自动分析当前的、上一个、下一个field,通过对比,自动作出最佳的两个field来blend。每个几帧,混合prev和curr就会切换成curr和next,比如:
Filed A:1 3 5 7 9  11 13……
Field B:2 4 6 8 10 12 14……
混合后的帧可能是:(1+2) (3+4) (6+7) (8+9) (10+11) (13+14)
那么第5、12个field会被忽略,因为假如要混合(5+6)、(11+12),BlendBob会判断出是坏
帧。
难怪混合后的帧在回放时会感觉丢帧!
好在BlendBob有个强制混合的参数:
forcematch=1 ―― 将混合curr和next
forcematch=2 ―― 将混合prev和curr
经测试,forcematch=1时,无论是TDeint或Yadif,都获得非常流畅、稳定的画面,TDeint不再丢帧,Yadif使字幕闪烁大大减少,总体效果接近DVD硬解了,满意度90分!天大的发现啊!困扰了我近两个月的难题卒之解决掉了!吹号角,敲大鼓,散花祝贺跨越巅峰!!!
6、Crop & Resize
片源是720×480还原4:3的,其实上下都有黑边,而且左右各有8像素为黑边,应裁去。用Gordian Knot载入D2V进行crop,按照Mod 16原则(长、宽像素值能被16整除),左右各裁8像素,上下共裁80像素,为确保下边的字幕能全部显示,上边我裁了42,下边裁38。Resize时长边不超过704像素,那么宽就应该resize到448,这样的比例看起来基本上与DV
D的画面相吻合。如果显示器是宽屏的(如1440×900分辨率),全屏显示时几乎覆盖整个屏幕。抖音小程序