[SilkyBible] XviD系列-9

来源:互联网 发布:qq邮箱的smtp端口 编辑:程序博客网 时间:2024/04/25 17:50

引用 05-04-2003接下来是 DivX 5 单一且固定 B-frame 所造成的惨剧 :P
下面这几张图是动态蛮大的几个画面,前景快速往下平移,后景快速往右平移,画面交错重迭,前景淡出,后景淡入,同时画面的亮度由亮转暗。XviD 在这几个场景,判断不适合使用 B-frame,决定都以 P-frame 压缩。

1177DivX B-frame Quantizer 81177XviD P-frame Quantizer 41178DivX P-frame Quantizer 41178XviD P-frame Quantizer 41179DivX B-frame Quantizer 81179XviD P-frame Quantizer 4

这种类型的画面持续了几百个 Frame,DivX 完全破功,是输得最惨的地方。
引用 05-04-2003最后是比较红色的部分
1729DivX P-frame Quantizer 41729XviD B-frame Quantizer 81730DivX B-frame Quantizer 81730XviD P-frame Quantizer 4

呃,应该不用小弟再多言....

小弟个人观看的感觉,XviD 的画面稍微清晰一点点,整体来说压缩瑕疵较少,但是有些画面锐利线条周围的噪声较明显,Frame #628 附近,背景的方块瑕疵太明显。DivX 的画面则较模糊,整体压缩瑕疵较多,给人的印象画质较差。
引用 05-04-2003测试四

因为 PSNR 不一定能反应看起来的视觉品质(有时候要看哪种瑕疵人眼看起来会觉得比较舒服),我另外做了 VQM 测试。
VQM 是 ITS 发展的视讯品质评量法,也是 ANSI T1.801.03 标准所采用的方法,会根据人眼的视觉特性,对人眼较敏感的部分作分析比较,例如画面细节的损失度,物体边缘、锐利线条周围的噪声等等。
这个评量法,也就是 ITU-T Recommendation J.143, "User requirements for objective perceptual video quality measurements in digital cable television" 当中提到的 "reduced-reference" video quality measurements。
VQM 做出来的评量分数,会和主观测试的分数非常接近,和人眼观看的感受趋于一致。
这个测试的演算法,说起来要写好几万字,而且很多数学,所以就不仔细说明了 ^^;
以下简单介绍它的测试原理:
1. 测量画面的模糊程度
侦测计算一个参数叫做 Spatial Information,空间信息(SI),包含了画面上 edge 边线的能量,比较 input 和 output 能量的损失,计算画面模糊化的程度。
原始画面 #690原始画面边缘强度 #690XviD 压缩后边缘强度 #690

2. 测试画面马赛克(方格状)的程度
测量垂直和水平的 SI,比较 input 和 output 的 SIh/SIv,由 SI 的 histogram 可以分析强度增强的程度。方块瑕疵,会使画面上多出许多明显的边界,会增加垂直和水平的 SI,减弱对角的 SIr。
DivX #938DivX #938 的 SIh/SIv

3. 测试画面的噪声程度
将前后画面相减,计算一个参数叫做 Temporal Information,如果画面有噪声,前后画面的差异会加大,TI 会增加。
原始 #567-566DivX 压缩后 #567-566

其它项目的测试原理,碍于时间因素,就不详加介绍了。
引用 05-04-2003因为硬盘空间大小的限制,我只有比较后面 750 个 Frame
评量分数我选择用 VQM native 的表示法,范围是 0.0~1.0,0.0 代表观察不出明显的压缩瑕疵,1.0 代表有非常明显的压缩瑕疵,所以分数越小越好。

VQM 的评量结果
DivX: 0.0791
Blurring = 8%
Block Distortion = 5%

XviD: 0.0685
Blurring = 7%
Block Distortion = 4%

细部参数有七个之多,因为图实在太多了,我只列出两个上面提过的有关参数:SI 的损失程度 SI LOSS 和 SIh/SIv 的增强程度 HV_GAIN。
注意 XviD 和 DivX 的 histogram,纵轴的单位长度不一样。由 histogram 得到的结论是,XviD 的 SI LOSS 程度较少,HV GAIN 的强度较弱。
DivX SI LOSSXviD SI LOSSDivX HV GAINXviD HV GAIN
引用 05-06-2003小弟在别的地方和其它网友的讨论,转贴过来,起因是因为有网友说我太闲了,做这种测试
==
说老实话我也很怀疑我是不是吃饱太闲了 :P
(可惜事实上我就是一点也不闲... >_<)
其实现在回文的动力,只剩下一些不吐不快的相关议题。
这些说明的目的,主要是想帮 XviD 平反一下。
有些人一直认为 XviD 是免费的,效果一定不如要钱的 DivX Pro。
XviD 还在开发中,有许多 bug,非常不稳定。
XviD 和 MPEG-4 标准有兼容性的问题,压出来的东西可能不兼容 MPEG-4。
例如那个 VHQ 功能,是 MPEG-4 兼容的吗?
(虽然开发者会认为,这个问题很笨... 而且常常被这样问,会有点不爽 :P)
所以他们坚持,除非 XviD 推出 1.0 版,否则他们是不会用 XviD 的。
(1.0?那只不过是个数字而已。要的话,我可以自行把版号改成 127 都没问题
然而实际上 DivX Pro 也有 bug,而且和 MPEG-4 不兼容的问题更严重。
(5.0.2 版的 Qpel 错误,大家已经用了一整年了。就是到现在的 5.0.5,Qpel + B-frame 仍然是错的。DivX 5 解 B-frame + 4MV 从来没解对过。符合 MPEG-4 标准?不要作梦了 :P )
但是因为它是要钱的,它的名气大,所以使用者也认为,相信它的标准性、兼容性是没有问题的。
然而这些都不是事实。
所以我才会不厌其烦地,一直在这些议题上,说明这些技术的原理,说明实际的情形。
以上的测试,我也尽量保持在中立的立场,说明两种 Encoder 的优点和缺点的地方。
这一切的目的,只是想帮 XviD 说说话,让大家多了解一下这个 Encoder,平衡一下和 DivX 的报导。
算算从开始到现在,我好像也已经在各地写了好几万字了吧 ^^;
真的是吃饱太闲了 ^^;;
有时候写这些东西真的是有一种无力感... 最近 Doom9 上的 XviD 讨论区,管理员 Nic 决定"不玩了",我有点能体会他的心情...
他的网站已经关闭了 XviD 区,不知道以后还会不会有 Nic 版的 XviD 编译版本。
http://nic.dnsalias.com/
引用NEWS

3.05.03
The XviD Section is now closed, this may mean the closing of this site, but I hope not
好好休息吧 Nic,辛苦了

不过我还是要鞭尸一下
前面的测试中有提到,Nic 写的 MPEGDecoder,chroma upsampling 是错的,我建议大家不要使用。现在我把这个错误的图片贴出来,再次提醒大家注意。
错误的 chroma upsampling,MPEGDecoder YUY2 版本解码,或者是 MPEGDecoder/MPEG2Dec3 YV12 版本解码,输出 YV12,然后 ConvertToYUY2(interlace=false),模拟播放时的情况,注意人物脸部和头发交错(拉丝)的部分,衣服红色的部分,这样的颜色是错的
http://net1999.net/silky/MPEGDecoder.jpg
正确的 chroma upsampling,MPEG2Dec YV12 版本解码,会自动输出 YUY2,其它 DVD2AVI/MPEG2Dec.dll/MPEG2Dec2.dll/MPEG2Dec3.dll YUY2 版本解码也都一样,注意人物脸部和头发交错(拉丝)的部分,衣服红色的部分,这样的解码颜色才是正确的
http://net1999.net/silky/MPEG2Dec.jpg
MPEGDeocder 的解码画质并没有比较好(MPEGDecoder 是用 libmpeg2 解码,color space 的程序代码还是用 XviD 的程序代码,XviD 的 color space 品质并不好),用 DVD2AVI/MPEG2Dec.dll/MPEG2Dec2.dll/MPEG2Dec3.dll 解码是一样的,而且这几个解码又正确,所以建议不要再用 MPEGDecoder 了。
真正解码(upsampling)品质有比较好的,是 m2v,不过 m2v 只支持到 YUY2(要用密技,否则一般情况下走 VFAPI 还是 RGB24),不支持 YV12。
不过全程 YV12 的做法,只有在讯源完全是 Progressive Frame 的时候才可以使用,如果用 DVD2AVI 预览,发现所有的 Frame Type 都是 Interlaced 或者是部分 Progressive 部分 Interlaced,这种讯源就不可以使用全程 YV12 的制程。
为什么?前面有提过了,再说一次:
Interlaced Frame 是由奇偶两个 Field 组成的,两个 Field 是各自独立的画面,所以 Interlaced chroma 解出来,要分给隔行的 chroma1 和 chroma 3,因为位于 line1 的 chroma1 和位于 line3 的 chroma3 才是属于同一个画面。而一般的 Progressive Frame,chroma 解出来是分给 chroma1 和 chroma2 使用。
不同 Frame Type 要用不同的 upsampling 算式。
如果讯源存的是 Interlaced Frame,用全程 YV12 制程
DVD(interlaced chroma) -> YV12(interlaced chroma) -> MPEG-4(interlaced chroma)

MPEG-4 AVI 文件内并没有一个旗标,会注明这是 Interlaced Frame,MPEG-4 Decoder 解码的时候,会假设储存的都是 Progressive Frame,用 Progressive Frame 的方式做 upsampling,chroma 就会被分配错位置,造成 chroma upsampling 错误。
所以遇到完全 Interlaced Frame 的讯源,不可用全程 YV12 制程,需将原本储存的 Interlaced chroma,转成 Progressive chroma,才可以压成 MPEG-4 AVI
DVD(interlaced chroma) -> YV12(interlaced chroma) -> ConvertToYUY2(interlace=true) -> YUY2 -> ConvertToYV12(interlace=false) -> YV12(progressive chroma) -> MPEG-4 AVI

部分 Progressive 部分 Interlaced 的讯源,要用 YUY2 版本的 MPEG2Dec1/2/3 做解码,MPEG2Dec1/2/3 会根据 MPEG-2 文件内的 progressive_frame 旗标,做正确的 upsampling 动作。

关于 XviD 自动判断插入 B-frame 的问题,
其实 XviD 判断插入 B-frame 的地方都是对的地方,那些地方(静态画面)用 B-frame,可以发挥很大的压缩效率。
会出现那些瑕疵,一方面是因为动画难压,容易出现瑕疵,另一方面是 MPEG-4 的规格绑死,不这么做不行。其实如果不管 MPEG-4 标准,开发小组可以做出比现在更强好几倍的 Encoder。MPEG-4 有多少令人吐血的设计..... 实在太多了,写下去又没完没了 :P
一般状况下开 B-frame 是不会这么糟糕的,根据一些实验,动画类、CG 类的讯源似乎不太适合使用 B-frame。(高动态、不规则运动、跳跃式运动、画面太干净、无残影、前后无关联性的讯源)

在低码率的时候不开 B-frame 画质会更惨。有 B-frame 提高压缩率才能压到那么小。
如同您说的,如果码率够,不计文件大小的话,不开 B-frame 画质是会比较好。
但是不开 B-frame 的同时,I-frame 间距要设小一点,否则 P-frame 太多张,画面会明显劣化。
B-frame 也具有时间轴上内插的作用,有一些视觉作用的效果,所以如果不计文件大小的话,可以试着开 B-frame,但是用很低的 quantizer 压缩,例如将 B-frame 的 quantizer 设为 3 甚至是 2。
原创粉丝点击