随着XVID的发展, 现在即使新手也能压出不错的效果...
下面就介绍一下XVID的使用方法和功能
本文使用的XVID版本为XviD-14052003-1
画面上的是建议使用的设置:
顺便说一下,很多单词不知道正式的译名是什么, 所以可能有错, 不过大意差不多了,如果有知道正确译法的朋友请帮忙指正
在进入了xvid的设置画面后就会看到这个画面
encoding mode 有6种.......
第一种是1 Pass - CBR, constant byte rate, 这种模式XVID会使用均匀的码流来压制每一段内容, 不过, 实际上这是这个CBR也不是是每一秒都是同样的......
因为 再XVID在压的时候实际上是使用VBR的, 然后再在某一个时间段里面来平均码流, 来达到指定的码流.....
比如说有一段动画, 把平均码流的间断设置10秒,而前5秒为大动态的片段用了太多的码流, 而后面的5秒就必须用低与平均数值的码流来补偿前面用掉的来使这10秒的码率达到指定值. 当然, 实际上的判断会更复杂, 这里只是把它简单化了.
1 Pass - quality:
这里指的是指定画质比, 用量化值为2压出来的文件大小就为100%, 而这里设置的数值就是根据这个大小来判断文件的码率的. 当然, 因为没有做2-pass,所以这里的判断不可能是以正个文件的大小来判断的, 只能是和CBR一样, 以某一段时间类的数值来判定使用的量化值. 这种方法是最接近2-pass的......
(以上的解释可能有错误, 因为我很少用这种模式来压, 所以上面的解释都是我估计的)
1 Pass- quantizer:
这个模式就是指定量化值来压的. 何为量化值(quantizer)呢, 说起比较复杂, 而且我也不懂傅立叶变换, 所以这里就跳过了, 只要大家把量化想成除法就行了,量化值就是被除数(汗...忘了是除数在前还是被除数在前了, 不过看后面的式子就明白了), 比如DCT(好像叫离散余弦变换,就是视频转换的过程)后的数据的大小是10, 量化值是3, 那最后的文件大小就约等于10÷ 3= 3.333333=3....... 因为量化是整数, 所以结果都是整数, 所以在还原的时候就会丢失信息(3 x 3=9).
量化值也就决定了画面的质量, 量化值越小,保留的信息也就越多.XVID一般把2作为最高值, 因为量化值1的文件比2大一倍,而质量上却没有什么区别.
在这种模式下压就是把所有的画面都用同一个量化值来压, 也就是所质量都相等. 和quality 模式不同的是, quality模式重视的是实际的文件大小, 而这个模式重视的信息的保留程度.
2 Pass - 1st pass
2 Pass - 2nd pass int:
这里两个就连在一起讲了, 2 Pass - 1st pass就是用2的量化值把整段动画压一遍,把每个帧的信息记录下来, 以供 2nd pass 来使用. 而 2nd pass 就是在真正的压了,使用从 1st pass得来的信息来智能的分配码流. 在选2nd pass后就输入想要的文件大小就行了.
具体的使用方法就看后面了
2 Pass - 2nd pass ext.:
这个在XVID已经建立了完善的2 pass逻辑之后就没什么用了....
需要使用这个的人也不许要看这个教程了.......
下面讲第一个菜单里面的设置:
先是motion search precision, 动态探测精度:
一共有7个选项, 这里选得越高,速度就越慢, 而质量也越好.
一般都选6 - Ultra High, 不然使用xvid就没有意义了......
quantization type:
这里是选量化的矩阵,DCT后的信息都是先除以这个矩阵再除上面那个量化值的.量化矩阵的不同, 压出来的效果也就不同. XVID主要使用的是h.263和MPEG两种, modulate的那两个都是把h.263和MPEG交换使用, 新版的XVID下moduleted已经没什么用了, 所以一般都使用h.263和MPEG. MPEG的细节保留得最多,所以文件也大,而且也容易产生DCT噪音, 一般在比较高的码率下使用. h.263保留的细节就要少一些,文件也比较小,所以产生的画面比MPEG柔和,也可以叫模糊.h.263比较适合低码率的使用, 也就是适合压制动画.不是所以在压制动画的时候推荐使用h.263. 另外, 还有很多自制的矩阵可以用, 在后面的endit quantizer matrix 里面可以选, 当然先要到网上去下才会有, 针对特殊的情况有特效.......
FourCC used:
这里没什么说的,选XVID就行了....
这是给文件打标签做区别用的,影响到用什么来解码....
VHQ mode:
这个是近几个月的XVID才有的功能...
主要功能是在macro block(16x16像素的方块,压缩的基本单位)里面做动态探测,还有做是否使用4倍动态矢量(4 motion vector, 4MV)的判定. 现在这个版本是开到4最好.
这里开的越高, 文件就越小,而速度也越慢, 以前的版本开到4会降低画质,但新版本已经解决这个问题了, 特别是在高量化值的情况下(>4),会提高画质.
maximum I-frame interval(最大关键帧间距),minimum I-frame(最大关键帧间距) interval:
这里是顾名思义, 设定关键帧的间距离, 单位是帧.
Enable lumi masking:
lumi masking就是给macro block付于不同的量化值,在不选的情况下每个MB的量化值是一样的, 不过因为在某些画面下, 很多地方不容易被肉眼看到. "既然看不到,是也就不需要把码率浪费到这些地方了,所以不如提高肉眼不容易看到的地方的量化值,把省下来的码率用到容易被人看到的地方, 不就提高了画面的质量了吗?" 在这中想法下, lumi masking就出现了, 不过理论归理论, 实际上做出来后效果不明显, 所以就要用它了,会降低速度的.....
Enable grayscale:
这个就是用黑白来压, 想看回顾以前看黑白电视的时代吗, 用这个吧....(我没用过,估计大家也用不到,不知道实际效果如何)
Enable interlacing:
用来压画面全是交错的东西的......
又是我们很少用到的东西.........
Use chroma motion(使用色彩动态探测):
前面的动态探测只使用了亮度的信息, 这里选了后会加入色度的信息来做探测, 可以提高准确度.
这个是一定要选的...
Quaterpel:
这里是提高动态预测的精度的,主要作用是把精度提高到像素的1/4大小. 具体的理论我看到有更详细的讲解, 暂时忘了在哪里了, 下次找到时在贴上来.
现在不推荐使用,回降低压制和解码的速度,效果不明显
Global Motion Compensation(全局动态补偿):
这个的作用是在碰到镜头横移,旋转,缩小放大等正个画面都是有着相同的运动轨迹,而画面本身不变的时候(比如12国记的片头,一直是在横移), 可以用GMC来压,就可以省下很多码流. divx有类似的功能, 不过只用了1个warp point, 基本上没有用, XVID现在用了两个warp point,但还是效果不大, 未来的XVID会用到3个wapr point.......
这里也是不要选的, 特别是不能和VHQ一起开, 不然多半会出问题, 具体原因就偷懒不写了...........
B-frame control:
Maximum B-frame: 最大的连续BF数量
B-frame quantizer ratio: BF的量化值比
B-frame quantizer offset: BF的量化值offset
把鼠标放在输入框里不动就能看到公式, 这里就不写了(懒啊....).....
B-frame threshold: 这里控制着BF的使用量,越大BF就用的越多,越小就用的越少, 想把文件压小就开到255吧.......
下面把DX50 B-vop compatibility钩上就行了........
其他的不要钩
这里就是选量化值的大小
Min i-frame quantizer: 最小关键帧量化值
Max i-frame quantizer:最大关键帧量化值
Max p-frame quantizer:最小帧量化值
Max p-frame quantizer:最大帧量化值
后两个也决定了BF的量化值,就是用前面那个公式来决定的.
进edit quantier matrix就可以修改矩阵, 不过要在global里面的quantization type里面选custom才行. 这里新手就不要碰了, 用h.263就行了.
这里的选项是一直都存在的,很多教程都讲过了, 我也就偷懒了.....
新手就用图上的设置就行了.....
注意把Discard first pass钩上, 不然每次 1st pass都会生成一个文件
Alt. Curve 和 Credits就跳过了.
Alt. Curve Nandub的高手会用, 不过在XVID里面效果不是很好, 只有在比较特殊的情况下才有用. 主要功能就是码率高的帧的码流分给码率低的帧,劫富济贫,这样码率低的帧就不会因为码率低而导致量化值过高,画质明显降低. 反正码率高的帧本来就有很多码率, 所以分一点出来也降低不了多少画质,标准不过却可以拯救一大堆码率低的帧. 另外码率高的帧多半是动态大的帧, 即使质量低点也不容易被看出来. 而照上图设置就是使用的线性分配, 每帧该给多少给多少, 按需供给.
Credits在压电影时比较有用, 不过动画就用处不大了, 这里就不提了
在Debug里面, 有一些试验性的功能,
chroma optimizer: 选了可以柔化色彩的边缘
use trellis R-D quantisatino:
用过ffvfw的人都知道,ffvfw早就使用了trellis quantization了:
Trellis searched quantization
This will find the optimal encoding for each 8x8 block.
Trellis searched quantization is quite simple a optimal quantization in the PSNR vs bitrate sense (assuming that there would be no rounding errors introduced by the IDCT, which is obviously not the case) it simply finds a block for the minimum of error + lambda*bits. Lambda is a qp dependant constant Bits is the amount of bits needed to encode the block Error is simple the sum of squared errors of the quantization
koepi的解释:
http://forum.doom9.org/showthread.php?s=&threadid=53383&highlight=trellis我试了一下, 暂时没发现什么bug.........
可以使用...
好像暂时就完了, 还有不明白的可以参考
http://popgo.net/bbs/showthread.php?s=&threadid=115574http://popgo.net/bbs/showthread.php?s=&threadid=74062