[SilkyBible] XviD系列-6

来源:互联网 发布:手机淘宝可以买火车票 编辑:程序博客网 时间:2024/04/25 02:06
 
引用 02-16-2003
引用有同感,还是舍不得3.11,xvid镶边问题相当严重,有时到了难以忍受的地步,尤其是当片源有一定程度镶边的时候,xvid会放大镶边,而3.11则相反。个人感觉divx全片的总体画质要好过xvid,但大动态的场面差些,比3.11的马赛克严重, 码率的分配好象比较中庸,但xvid总体上noise较3.11来得大,
XviD 用 MPEG Quant 的话 noise 感很重,一般的 MPEG-1/MPEG-2 encoder 会用 Adaptive Quant,每个 Macroblock 的 quantizer(MQUANT,MPEG-4 叫 DQUANT)会视情况变化,不是整个画面都一样。XviD 只有在用 Lumi masking 的时候才有这种功能,否则画面上全部的 Macroblock 的 quantizer 都一样。而且 MPEG-4 先天有个限制,Macroblock 和 Macroblock 之间最大的 DQUANT 差距不可以相差超过 3,所以它的弹性很小,限制比较多,无法像 MPEG-1/MPEG-2 那样运用自如。不知道是不是因为这个原因,还是说 MPEG-4 的 MPEG Quant 还有其它 bug(MPEG-4 的缺点太多了,有些设计简直让人吐血),我觉得 XviD 的 MPEG Quant noise 很严重,尤其是锐利线条周围,很容易出现 ringing effect。所以我后来都只用 H.263 Quant。而 DivX 5 也是使用 H.263 Quant,也只能用 H.263 Quant,不知道他们是不是也遭遇到这种 MPEG Quant 的问题。
MPEG-4 真是烂毙了... >_<
引用我的xvid是2002.12.03版本,不知其它版本如何?在我的win2000上只能装这个版本,装其它版本会出现绿色抽丝画面,很奇怪
更新最新的版本看看,最近 XviD 又改进了很多,例如 sysKin 的 VHQ 模式(不能和 GMC 一起用,目前 B-frame 不会使用 VHQ,只对 P-frame 有效),pete 的高品质 AC 预测模式(intra-block 独立压缩很消耗 bit,MPEG-4 会用 DC/AC 预测进一步缩减 intra-block 的大小,pete 的这个高品质预测模式可以进一步提高 intra-block 的压缩率,虽然只有一点点,.01% ^^;;),应该会进步很多。安装前记得先把旧版本删除掉。
引用 02-27-2003压缩第二遍的时候因为参考的画面和第一遍不同,第一遍参考的画面是 quant 2 压出来的前一张画面,第二遍参考的前一张画面不一定也是 quant 2 压缩,就算也是 quant 2 压缩前面累积的误差也不一定相同(前面的参考画面也不会是每张都 quant 2 压缩,累积的误差不相同)。因为参考的画面不同,所以判断要以 intra-frame 压缩或以 inter-frame 压缩的结果就不同,因此有可能 1-pass 压缩时是 keyframe,2-pass 时却变成 delta frame,1-pass 是 delta frame,2-pass 却变成 keyframe,这是正常的。
不过现在 XviD 的 2-pass 确实有很多问题
新的 rate control 码率控制 已经写好了,现在就等新的 api-4 的接口弄好确定没问题之后就可以合并进去了
可喜可贺,可喜可贺 ^_^

至于 Hinted ME,使用之后会减损画质,对于速度的提升,不如使用较低精度的动作检索模式。gruel 在 FFMPEG 的 mailing list 上有说明过,sysKin 最近在 Doom9 上也说明过,开发人员一致认为 Hinted ME 是个无用的烂点子,所以 Hinted ME 应该不会恢复,将来新的接口出来这个选项会被拿掉。(Alt. CC 也是,限制 quantizer 的功能也是)
1. 如果要用 Hintd ME,1st-pass 的 I/P/B Frame 分配必须要和 2nd-pass 一样,不可以 1st-pass 是 B-frame,而 2nd-pass 却是 P-frame,这样 MV 要怎么用?然而目前 XviD 的 B-frame 是动态分配决策,会视画面的情况自动决定要以哪种型态压缩。由于 1st-pass 和 2nd-pass 的压缩 quant 不一样,和参考画面之间的相差不一样,所以 2nd-pass 时决定使用的 Frame Type 就不会完全一样,因此 Hinted ME 便不能使用。如果硬要用,好吧,那么我们改 XviD 的动态分配决策,关掉动态分配,改成强制固定的 B-frame 个数,例如固定使用 IBBPBBPBBPBB... 这样的 sequence。

2. 接下来,因为 1st-pass 和 2nd-pass 参考的画面不同,直接用 1st-pass 找出来的 MV 使用在 2nd-pass 上不会是最好的 MV,压缩率会大减,画质会很差。

3. 所以比较好的做法是,拿 1st-pass 的 MV 作为预测的最佳 MV,然后在这个 MV 的周围做有限度的更细的搜寻,再找更好的 MV,可以节省动作搜寻的时间。但是其实目前 MPEG-4 用的 EPZS 动作搜寻方法本身就已经具有这个预测最佳 MV 的作法,使用 Hinted ME 是多此一举。比较 Hinted ME 和改成低精度的动作搜寻法(Motion search precision: 5~),低精度的动作搜寻品质比 Hinted ME 好,而且速度还比较快。

4. 所以,Hinted ME 是个烂点子,忘了它吧
引用 04-24-2003小弟又要忍不住插话...

1. 你用的是旧版的 XviD,请用新版
2. 用新版请打开 VHQ 的功能
3. 不要用 Alt. Curve,请把它关掉
4. 请把 I-frame Boost %, High bitrate scenes%, Low bitrate scenes% 都设为 0
5. Minimum I-frame interval 设为 1
6. 请不要限制 I/P Frame 的 quantizer,这个功能是 Koepi 加上去的,但是你如果有看最近 Doom9 的讨论,会发现 Koepi 一再强调请不要限制 quantizer,会什么当初设计这个功能的人现在自己却不推荐这个功能,要大家不要使用?您想想就可以知道限制 quantizer 到底是好是坏。

7. 码率不高时,B-frame 的 quantizer 不要设得太高
8. DivX 5.04 不会用多个 B-frame,不会用动态 B-frame,B-frame 预设的 quantizer 是 I/P Frame 的两倍。

9. DivX 5.04 的压缩率还是低于现在的 XviD,画质也还是低于 XviD,而且差距很明显。但是制作者必须要善用 XviD,否则作出来还是会比 DivX 5 差。

10. 我会建议 XviD team,把一堆无用反而会破坏画质的设定选项,在新版的 dev-api-4 使用者接口中,通通拿掉
引用 04-29-2003
引用想顺便请教Silky兄一个问题,就是在XviD打开了QPel和GMC之后,大面积的灰色颗粒比较多的画面部分会出现一种像是液体流动的感觉,这是什么原因呢?
opaljac 兄

这是 Qpel 的 bug,用新版的 XviD 编码,用新版的 ffdshow 或 XviD 自己解码,可以解决这个问题。
MPEG 在编码的时候,要将前一个编码过的画面解码出来当作参考画面。
编码的时候会用 Forward DCT,解码的时候要用 Inverse DCT。
编码器在编码的时候,需要用到 iDCT,将编码过的画面解码,做为参考画面。
压好的文件可以用不同的解码器来播放。不同的解码器,其 iDCT 的算式不一定相同;iDCT 的演算法好几种,只要解出来和 IEEE Reference Decoder 的误差在一定范围内,就算是符合标准的 Decoder。
如果 iDCT 算式不同,则解码出来的画面就会和编码器编码时,解出来的画面有一点点不同。而这张不同的画面会被下一张画面拿来做为参考的对象,当然,这和编码时所使用的参考画面是有点不同的,所以编码时算出来的动作补偿(MC),用在这张画面上就会产生一点点的误差。 接着,这张 MC 有误差 加上 iDCT 也有误差的画面,又要在被下一张画面拿来做为参考对象,误差会逐渐累积,越滚越大。
MPEG-1/2/4 的标准中都有为了这个 iDCT 算式不相符的问题做设计,可以减少 iDCT mismatch 所带来的问题。
并且,由于 MPEG-1/2 的 GOP 长度都长只有半秒钟,每半秒钟就会更新一次,有一个独立压缩不参考其它画面的 I-frame,所以这个问题不严重。
但是到了 MPEG-4,这个就变成大问题,因为大家压 MPEG-4 通常 I-frame 间距都设得很长,这样误差会一直累积,连续 P-frame 后画质会逐渐劣化。
而 Qpel 似乎更加放大了这个问题,误差会严重到形成明显瑕疵。

另一个造成这种液体流动瑕疵的原因,我写在下面的 MPEG-4 Codec 压缩测试报告里。
引用 04-29-2003
引用to Silky

限制quantizer我认为很有必要
XviD老实说,我实践的感觉不论压缩度还是质量都不比SBC好,而且不好控制,但是色彩的优势很明显,限制quantizer就相当于制定SBC的DRF,不使用B帧的情况下,就很容易压出和SBC一样质量好又容易控制大小的成品(色彩优于SBC)
DC 兄

其实我也是赞成使用限制 quantizer 的
因为现在的 XviD 2-pass 演算法设计不良(抱歉了 Koepi,我不得不这么说,实际上我更想说的是,不只是不良,根本是一塌糊涂 :P ),所以使用者有时候必需使用限制 quantizer 的方法,才能补强 Codec 的缺陷。
然而我的建议是:
1. 当码率足够的时候,也就是 1st-pass 压出来的档案大小和你设定 2nd-pass 目标大小的差距不大,例如只压缩了 70~80%,那么码率是足够的,此时使用 linear-scaling 的效果是最好的,不要用限制 quantizer。

2. 等将来 dev-api-4 开发完成,新的 RC 算法出来之后,其实就不需要再保留限制 quantizer 的选项。当 Codec 本身的 Rate Control 设计很好的时候,交给 Codec 去做弹性的运用,效果会比较好。君不见 DivX 5.0.5 就把限制 quantizer 的选项从使用者接口中拿掉了,表示他们认为现在的 DivX 5.0.5 的 RC 已经好到不需要使用者再去动了 :P

至于小弟个人压缩,其实也是会用到限制 quantizer 的功能的,详情请见下面的 Codec 测试报告。
原创粉丝点击