[SilkyBible] XviD系列-6
来源:互联网 发布:手机淘宝可以买火车票 编辑:程序博客网 时间:2024/04/25 02:06
不过现在 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 是个烂点子,忘了它吧
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 使用者接口中,通通拿掉
这是 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 压缩测试报告里。
限制quantizer我认为很有必要
XviD老实说,我实践的感觉不论压缩度还是质量都不比SBC好,而且不好控制,但是色彩的优势很明显,限制quantizer就相当于制定SBC的DRF,不使用B帧的情况下,就很容易压出和SBC一样质量好又容易控制大小的成品(色彩优于SBC)
其实我也是赞成使用限制 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 测试报告。
- [SilkyBible] XviD系列-6
- [SilkyBible] XviD系列-1
- [SilkyBible] XviD系列-2
- [SilkyBible] XviD系列-3
- [SilkyBible] XviD系列-4
- [SilkyBible] XviD系列-5
- [SilkyBible] XviD系列-7
- [SilkyBible] XviD系列-8
- [SilkyBible] XviD系列-9
- [SilkyBible] XviD系列-10
- [SilkyBible] XviD系列-11
- [SilkyBible] XviD系列-12
- [SilkyBible] XviD系列-13
- [SilkyBible] XviD系列-14
- [SilkyBible] XviD系列-15
- [SilkyBible] XviD系列-16
- [SilkyBible] XviD系列-17
- [SilkyBible] XviD系列-18
- [VB.NET]doubleclick和mousedoubleclick有什么区别?
- JAVAFX:数据绑定
- [VB.NET]登陆窗口登陆成功后的ID值如何取出来....
- [VB.NET]一个简单的编程问题
- Delphi利用多线程创建系统服务
- [SilkyBible] XviD系列-6
- bnu1060 寻找最圆满的生活 C语言版
- [VB.NET]请问如何从OpenFileDialog中读取所有文件名到Listbox
- bnu1061 古墓丽影 C语言版
- [SilkyBible] XviD系列-7
- [VB.NET]询异步socket通信完善的例子.
- bnu1063 聪明的辉蛋 C语言版
- [VB.NET]求支持ole的菜单命令代码!60分答谢!
- [SilkyBible] XviD系列-8