初学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版)
香港版原装碟通常在内地很难,我在市内走遍大大小小的唱片店都没得卖,这是在淘宝网上花一百块钱买的。
视频格式: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是个去拉丝的模拟工具,反复尝试以后方知道原来根本不是,只是用来分析片源而已。
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、反交错
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):
乐谱和麦克风边缘、钢琴盖折边的金属部分等出现很明显的锯齿。
陈数赵胤胤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自动判断出最佳的反交错方案(这个分析过程要花较长时间,而且分析后提供的“最佳”方案未必是好的)。脚本生成后会出现视频窗供快速预览。
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后的画面使那个锯齿镜头圆滑了不少!效果直逼硬解!!!
当mode设为1时以Bob处理,帧率提高一倍(30fps → 60fps),这是Bob的特征,效果比mode=0的保持原帧率更好,Bob后的画面使那个锯齿镜头圆滑了不少!效果直逼硬解!!!
只是仍还有一些瑕疵,如发丝不平滑,字幕闪烁。
评分:85
周公解梦梦见蛆评分:85
(b) TDeint(mode=1,order=1)
同样提供一倍帧率的Bob处理,发丝处理得较平滑,字幕有点闪烁,锯齿镜头解决不好。
评分:85
同样提供一倍帧率的Bob处理,发丝处理得较平滑,字幕有点闪烁,锯齿镜头解决不好。
评分:85
(c) TDeint(mode=2,order=1)
Mode设为2时是自动将Bob后的画面智能混合,以原帧率输出,也就是自动处理60fps → 30fps,发丝平滑,字幕稳定,锯齿镜头解决不好,画面有点不流畅,似乎丢帧。
评分:85
Mode设为2时是自动将Bob后的画面智能混合,以原帧率输出,也就是自动处理60fps → 30fps,发丝平滑,字幕稳定,锯齿镜头解决不好,画面有点不流畅,似乎丢帧。
评分:85
(d) interp = separatefields().eedi2(field=-2)
TDeint(mode=2,edeint=interp)
该方式处理速度最慢!但锯齿镜头得到较好的解决,字幕有点闪烁,画面还是有点丢帧的感觉。
评分:80
TDeint(mode=2,edeint=interp)
该方式处理速度最慢!但锯齿镜头得到较好的解决,字幕有点闪烁,画面还是有点丢帧的感觉。
评分:80
灵活就业人员社保缴费(e) FieldDeinterlace(blend=true, full=true)
效果一般,消除大部分拉丝,锯齿镜头处理不好。
评分:70
效果一般,消除大部分拉丝,锯齿镜头处理不好。
评分:70
(f) TomsMoComp(1,5,1)
拉丝虽然是去掉了,但画面很闪很凌乱!
评分:60
拉丝虽然是去掉了,但画面很闪很凌乱!
评分:60
(g) ffdshow(options="isDeinterlace=1,deinterlaceMethod=10")
这个我判它0分!因为这个语句不管怎么设置都根本不起作用,而MPC播放器调用FFDshow解码MPEG2时明明是有效的,害我研究了一个晚上,也不知是哪里的问题。
这个我判它0分!因为这个语句不管怎么设置都根本不起作用,而MPC播放器调用FFDshow解码MPEG2时明明是有效的,害我研究了一个晚上,也不知是哪里的问题。
综上所述,个人感觉Tdeint和Yadif对演唱会MV处理得最好,两者各有千秋。
TDeint的保持原帧率输出时反交错很不错,不过画面有点一顿一顿的,明明是30fps的,看起来像是24~29fps。
TDeint+EEDI2有些好转,锯齿也修复得较平滑,可惜速度太慢,字幕闪烁。
Yadif以60fps输出时也不错,锯齿修复得很好。
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等(真累人 >.< )可惜不见任何起。
(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呢?
(4)60fps → 30fps的研究
TDeint和Yadif都可以Bob到60fps,输出的画质比较满意,但总不能在X264压缩后的视频也是以60fps播放吧?那样不仅需要提高压缩码率以维持较好的画质,同时也增大视频体积,而且老机器播放60fps会吃不消。能否通过其他命令强制混合输出30fps呢?
AVS有几个关于调整fps的语句:AssumeFPS、ChangeFPS、ConvertFPS。
AssumeFPS只是用于调整播放速度。
ChangeFPS和ConvertFPS都是混合帧来达到目的,但两者效果都不理想。
做个DVDRIP原来会是这样艰难T.T
离目标已不远了,可是最后一道障碍不知如何跨越。暂且用DirectShowSource那个版本压缩了,得出满意度为80的成果来安慰一下自己。
ChangeFPS和ConvertFPS都是混合帧来达到目的,但两者效果都不理想。
做个DVDRIP原来会是这样艰难T.T
离目标已不远了,可是最后一道障碍不知如何跨越。暂且用DirectShowSource那个版本压缩了,得出满意度为80的成果来安慰一下自己。
后来要出差一个星期,公司的任务又多了,一个星期5天都要加班,累,暂时放弃研究。于是休整了一段时间,以后有空再想。
(5)BlendBob的惊喜
(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)
或
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会判断出是坏
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 ―― 将混合curr和next
forcematch=2 ―― 将混合prev和curr
经测试,forcematch=1时,无论是TDeint或Yadif,都获得非常流畅、稳定的画面,TDeint不再丢帧,Yadif使字幕闪烁大大减少,总体效果接近DVD硬解了,满意度90分!天大的发现啊!困扰了我近两个月的难题卒之解决掉了!吹号角,敲大鼓,散花祝贺跨越巅峰!!!
6、Crop & Resize
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分辨率),全屏显示时几乎覆盖整个屏幕。抖音小程序
发布评论