DVD VOB转RMVB压制技巧和经验
来源: garden.net.cn 作者: 日期:2006-11-21 17:00:04 我要评论
安装软件
Gk0.28.7(可以使用其内的滤镜和DVD2avi工具)以上版本,Avisynth2.5x,阿飞解码插件包(vobsub、mpge2,AC3ACM等解码器)或者风暴插件包,rma(分离合成rm视频和音频用)
一,源处理
1,smartripper和DVDecrypter提取vob文件
压制vob-rmvb推荐使用smartripper,可以很方便的合成输出整个vob,也方便后续字幕的提取和使用
需要注意几点:
1)硬盘分区格式如果是Fat32的只能提取4G的文件,所以如果文件超过4G,可以ripper到NTFS格式的分区上,同时在smartripper上定义文件大小,默认是4G。
2)对于多声道的文件,如同时有2ch或者6ch的,就采用2ch。如此ripper时的文件会进一步缩小,而且2ch的压制问题较少。双语影片根据实际情况提取,参见下文。
3)如果要进行切割分集,那么用DVDecrypter来进行ripper更方便些。
2,DVD2AVI生成工程文件和音轨
DVD2AVI可以查看源的一些信息。打开后按F5预览,弹出的窗口中可以查看信息如帧率,是否是PAL还是NTCS。注意,DVD2AVI 显示的 Frame Type = Interlaced 的信息,不是表示这张画面是否交错,而是根据DVD内置的一些参数得出的,DVD2AVI 根本不会去分析、判断画面上是否有交错。因为我们手里拿到的很多DVD片子制作也非标准。
设置上,field operation设置成None,交给后续的avs的decomb做IVTC处理,其他的设置一般论坛上介绍的就是默认的设置,如在视频 [Video]菜单下的[iDCT]中选择IEEE-1180,可以获得最好的解码质量,速度上也不是传说中的最慢.最后保存工程文件File->Save Project (1.76)
如果是一些双语的连续剧,通过这步就可以将几个音轨都提取出来,就可以先单独压制d2v文件得到视频rm,然后分别将2个音轨压制,最后可以用rma进行合并。见下文。
二,avs及其滤镜的合理使用
1,IVTC
IVTC是对场处理笼统的叫法,狭窄意义上讲,场处理一般又分IVTC,FieldDeinterlace,Bob等.实际压缩证明IVTC可以在一定程度上控制码率。
IVTC(Inverse Telecine),简单的说,IVTC就是将DVD纪录的29.976fps(NTSC)或25fps(PAL)的隔行信号还原为胶片的23.976fps的逐行信号。IVTC可以有效的消除影片的“拉丝(Interlace)”现象,还可以平滑的减少每杪内的桢数,以获得画面质量与码流的最佳比例。不过所谓的拉丝,如同http://www.100fps.com给的示例,我在DVD处理过程中倒从没见过.估计处理DV源和TVRIP时这种现象多见.另外,在rmvb压制中,如果开启软件本身的"反交织(Deinterlace)"功能,效果反而不好.所以我不知道那些所谓高手谈论去拉丝时到底结合了多少实际压缩体会.
FieldDeinterlace一般用于纯交错(interlaced)的视频流上,如DV源等,是真正意义上的反交织.http://www.100fps.com上有很多示例图.
Bob()有场分离的意思,用于vedio制式的转换,具体也了解不多,略.
做IVTC有很多方法,如TMPGENC里的ODD/EVEN去场,VDM的BLEND去场,又有很多avs滤镜可以实现,如IT,Warpsharp,decomb,GreedyHMA,TomsMoComp等.这里只根据常用的用GK或者AutoRv9自动生成的avs模板介绍avisynth的滤镜decomb,感兴趣的可以根据这些关键词到百度或者google寻找相关资料.
下面参考DVDSHarexvid里介绍的IVTC的内容(混合型的不介绍)和doom9官方的http://gb.doom9.org/index.html?/decomb.htm,结合工作室几个组员的测试结果做些介绍.Decomb不同版本的功能略有不同.
PAL制式
FieldDeinterlace(blend=false)
#FieldDeinterlace()
#FieldDeinterlace(full=false)
#Telecide(guide=2).Decimate(cycle=25)#有些版本order加了会出错,就取消
NTSC制式
Telecide(guide=1,post=false).Decimate(Cycle=5)
估计是抽去重复帧的作用才使得rmvb压制时,码率在一定程度上有所控制.而对于绝大多数的DVD,所谓的拉丝现象是不明显的.
下面顺带将这几个的详细参数说明下
FieldDeinterlace参数
FieldDeinterlace(full, threshold, dthreshold, blend, chroma, debug)
FieldDeinterlace()相当于FieldDeinterlace(full=false, threshold=15, dthreshold=9, blend=true, chroma=false, debug=false) 为默认设置
full关闭,说明只对检测到的交织的画面进行处理
blend指在交错画面用渲染来替代填充
threshold (0-255), dthreshold (0-255), 默认分别为15和9,一般用threshold, dthreshold等阈值参数都会增加压缩时间,但效果提升又有限
常用的,如FieldDeinterlace(blend=false),FieldDeinterlace(full=false),大家可以自己测试体会下.
decomb参数
Telecide(reverse, swap, firstlast, guide, gtresh, post, treshold, dthreshold, blend, chroma, y0, y1, debug)
其中
guide,0-3,默认0 ,NTSC用1,PAL用2,当已知DVD是NTSC或者Pal时,使用此参数可以大大提高field matching
threshold(0-255, default 15),设定一个极限,超过此极限telecide便认为它是有横纹的祯,将在后面被deinterlace.增大这个值如果过多的好祯被deinterlace,减小此值如果一些地方的横纹没有被探测到。
dthreshold(0-255, default 9),设置deinterlace的强度,可以开启到75,不过速度马上降低.
post默认是开启,说明Telecide后还要进行deinterlace,如果画质好,可以关闭.
如:用于一些动画片制作avi时的设置
Telecide(Guide=1,Gthresh=50,Chroma=True,Post=false)
Decimate(cycle=5)
Decimate参数
Decimate(cycle, mode, threshold, debug)
Decimate有删除重复帧率的作用,cycle里NTSC用5,PAL用25
mode主要用于混和帧的处理
如:
Decimate(mode=1,threshold=50)
关于decomb的更详细的内容参见http://gb.doom9.org/index.html?/decomb.htm
注:对于混合型的IVTC处理参见其他人介绍的内容.
2,画面裁减和缩放 crop()/LanczosResize()
若要著名的silky讲解画面裁减和缩放,起码5千字。我就占他光简单的说一句:只要人物没有压扁或太阳等圆形物体没有变成椭圆即可。有经验的也就无所谓用GK来精确计算,何况很多情况下(4:3模式的连续剧),就是GK算过的也还是要手动来调整
想了解的多的,请看
http://dream4ever.org/showthread.php?t=441
根据rmvb压制的实际情况,推荐自由裁减和固定缩放(新手还是试试GK或者VDM)。
自由裁减
先用mediaplayer在原始画面下观看效果,了解黑边、视频噪音线的大致情况。一般尽可能的裁减掉,特别是左右黑边。
自crop(左,上,-右,-下)
固定缩放:根据片子的特点,经裁减后用以下三个固定画面来用于rmvb的压制
全屏4:3模式的用448×336,480×360,512×384
普通宽银幕(2.35:1)用640×272(建议这类画面保留部分黑边,则画面大小为640×360)
一般宽银幕用576×312,608×336
如:
crop(16,8,-8,-8)
LanczosResize(448,336)
若用于动画片的压制,有不少人使用SimpleResize
如:
LoadPlugin("C:\Program Files\Gordian Knot\SimpleResize.dll")
crop(8,24,-8,-4)
SimpleResize(512,384)
画面缩放是我在rmvb压制中比较强调的问题。作为一种高度压缩的格式,没有那么多数据来保证大画面。而用于vob-rmvb的压制,缩小画面不仅可以一定程度上控制码率(如果片子本身容易错位的,那缩小画面还是不能有效控制码率,除非缩小到384×288的小画面以下),而且合适的画面大小是人性化压制的体现。当在电脑上打开一个rmvb,其原始画面近乎充满屏幕时,我真的不知道操作点在哪里。另外高分辨率的画面需要硬件支持,更何况播放rmvb本身对硬件要求要高,所以压制者必须考虑画面缩放的问题。
3,亮度
亮度是rmvb压制需要注意的问题。很多人问我怎么我的码率设置的那么低,而画质却相当好,是不是用了什么额外的滤镜。实际我就是在压制时增加了些亮度。增加亮度在xvid制作中一般卡的较紧,他们认为是增加亮度也会同时增加噪音,同时码率也会加大。rmvb压制中,建议用Levels(),增加点亮度即可,所谓的噪音也可以为rmvb柔化的本着特点给掩饰了。而增加了亮度的rmvb整体画质上就感觉比较阳刚。
增加亮度,在rmvb压制中对码率和压缩时间基本无影响
4,降躁
用于vob-rmvb,使用降低噪音的目的是为了控制码率。参考了部分xvid制作时的avs参数,使用undot()。undot滤镜是进行象素及细小噪点降噪,一般用来去除细小的、肉眼不容易察觉的噪点,所以具体效果上并不明显,而且对压缩速度也影响不大。结合IVTC可以在一定程度上控制1pass压制码率错位。
我一般这么用,加一套滤镜就用一次undot
LoadPlugin("c:\Program Files\GORDIA~1\UnDot.dll")
LoadPlugin("C:\PROGRA~1\GORDIA~1\decomb.dll")
DirectShowSource("e:\temp\sample.vob")
#IVTC略
UnDot()
crop(16,8,-8,-8)
LanczosResize(448,336)
UnDot()
Levels(0,1.2,255,0,255)
UnDot()
或者
LoadPlugin("C:\Program Files\GORDIA~1\mpeg2dec3.dll")
LoadPlugin("C:\Program Files\GORDIA~1\decomb.dll")
LoadPlugin("c:\Program Files\GORDIA~1\UnDot.dll")
v=mpeg2source("e:\temp\sample.d2v",cpu=4).undot()
#IVTC略
v=crop(v,16,8,-8,-8)
v=LanczosResize(v,448,336).undot()
v=Levels(v,0,1.2,255,0,255).undot()
a=DirectShowSource("e:\temp\sample.ac3")
AudioDub(v,a)
5,柔化降躁(具体参见VCD-rmvb压制篇)
也就是常用的fluxsmooth、deen/eDeen和Convolution3D,这几个会增加压缩时间,1pass码率控制上不明确。一般用于动画片或者片源较差的片子以及DV录制的片源的处理。其中fluxsmooth用于VCD压制可以明显改善VCD的画质,这个会在VCD-rmvb压制中说明。对于画质较好的DVD片子特别要注意取舍。我看很多人的avs滤镜中,这几个全套加入,实为不可取!
加载deen和Convolution3D有的系统上需要转换色彩环境,那么可以根据出错提示来增加转换颜色环境的滤镜,如CONVERTTOYV12()
Convolution3D可以直接用作者内建的preset
Convolution3d (preset="movieHQ") // Movie Hi Quality (good DVD source)
is an alias for Convolution3D (0, 3, 4, 3, 4, 2.8, 0)
Convolution3d (preset="movieLQ") // Movie Low Quality (noisy DVD source)
is an alias for Convolution3D (0, 6, 10, 6, 8, 2.8, 0)
Convolution3d (preset="animeHQ") // Anime Hi Quality (good DVD source)
is an alias for Convolution3D (0, 6, 12, 6, 8, 2.8, 0)
Convolution3d (preset="animeLQ") // Anime Low Quality (noisy DVD source)
is an alias for Convolution3D (1, 8, 16, 8, 8, 2.8, 0)
Convolution3d (preset="animeBQ") // Anime Bad Quality
is an alias for Convolution3D (1, 12, 22, 8, 8, 2.8, 0)
Convolution3d (preset="vhsBQ") // VHS capture Bad Quality
is an alias for Convolution3D (0, 32, 128, 16, 64, 10, 0)
anime用于动画片,movie用于普通影视,vhs主要用于DV源的处理
deen可以用 deen("a2d",2,10,12),具体参见vcd压制篇
edeen默认是(7,14,21,2,3,true)
fluxsmooth可以参考一些自动生成的模板,如
# 1) little noise
#Temporalsoften(2,3,3,mode=2,scenechange=6)
#mergechroma(blur(1.3))
#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)
可以使用其中的一套,我一般考虑到压缩时间的代价,很少用,至多用个FluxSmooth(5,7)或者deen
具体参数可以查阅滤镜自带的说明
http://www.avisynth.org/warpenterprises/
有些滤镜已经有更新!
6,字幕提取和加载
分集的根据实际cell来进行提取
其他的参照我的中高级教程里的相关内容
7,最后来说说源的加载
1,目前的aisynth版本可以使用DirectShowSource直接加载vob文件(2ch声道),如此可以同时利用ERP的avs功能来实现成批加载。不过非经验者,由于插件选择不当,直接用DirectShowSource加载会有些问题。
2,mpeg2source加载d2v是沿袭至今的方法,速度上稍微快点。对于直接加载vob压制,时间显示不正确的可以用d2v的方法。
3,多声道的音轨,也可以不必直接转换成上G的wav文件。可以按照mimi8和老Q介绍的方法用Graphedit将提取得到的ac3/DTS音轨转换得到GRF工程文件进行加载,可谓妙用。
如:
v=mpeg2source("e:\temp\sample.d2v",cpu=4)
v=crop(v,16,8,-8,-8)
v=LanczosResize(v,448,336).undot()
v=Levels(v,0,1.2,255,0,255).undot()
a=DirectShowSource("e:\temp\sample.GRF")
AudioDub(v,a)
注:若有时间差,可加用DelayAuido(),或者在ERP里直接设置时间差也比较含蓄!
三,压缩软件及模板设置
经过以上处理,那么可以选择压缩软件来压制了。目前推荐用ERP1.71来加载avs压制 r9 1pass压制。
码率选择:
刚开始时直接用Helix压制vob文件,所以码率设置480-1500k,也不去管它是否错位。尽管vob画质清晰,因为只是单纯压制,这么大的码率效果还是不好,呵呵!晚近,经过avs处理后画质更可以得到改善和修饰,所以根本就没有必要使用大码率压制。现在根据我的界点码率1pass压制方案和我对real低码率下压制特点的认识,我的初始平均码率设置一般为 290k;330k,350k,380k;390k,最大码率700-1000k而已。帧率23-25,声音根据实际情况选用,一般推荐32k或者44k的立体声r8高回放.其他所谓的高级设置可以不必理会,因为只要注意我上述介绍的细节,普通r9就可以获得精良的效果!
双语连续剧,可以先单独压制d2v文件得到视频rmvb,然后分别将2个音轨压制,最后可以用rma进行合并。
将视频文件重命名成01.001
将音频文件重命名成01.000
文件放置在rma的\BIN\DOS目录内
在“开始-运行”里面输入“cmd”,进入dos模式(2k和xp用户)
CD命令进入rma的bin\dos目录
CD\ 回到根目录
CD E: 进入E盘
CD E:\rma 进入rma目录
......
运行合并命令:
rma -j/01.000//01.001/ 01.rm
(注意里面的空格)
最后常规建立索引,得到正式的rm文件,播放即可以拖动
rma -i 01.rm
注:经rma分离合成处理后的rm不能在GUI界面下编辑,显示out of memory错误。DOS模式下尽管可以进行切割,但因不能明确定义关键帧,所切割效果让人郁闷。


