下面来完全对比一下Xvid和H.264,看看到底哪个更有前途 注意测试平台是PC,PSP由于有局限性,所以后面我会给出用MeGui压MP4格式AVC的方法
MPEG-4 Video 中包含有2个标准:ISO 14496-2 (Video)和ISO 14496-10 (Video),亦即通常说的 MPEG-4 ASP 和 MPEG-4 AVC。
现在来看一下2个不同 Profile 的 Codec 在编码质量上的差别!
我分别选了2个开源的Codec:XviD 和 x264进行简单测试
尝尝AVC/H.264给我们带来了什么!
考虑到动画比较能突出重点细节,且现在很多小孩喜欢看动画,所以先选一段
源为《ハウルの動く城》Chapter 17的动画
首先来看看视源的特性,使用XviD q2 的编码作为参考
编码参数设置,目标码流设置为 xvid q2 码流的一半,使用2-pass编码
xvid-1.2.cvs.2005.12.10
QUOTE:
VHQ4,Use VHQ for bframes too,BVOPs=2,ratio=1,offset=2,Max I-frame quantizer:2,Quarter Pixel,Global Motion Compensation
file size:37,130 KB
Y: PSNR: 37.8778 43.1724 49.8913
U: PSNR: 37.6963 44.2841 50.6220
V: PSNR: 38.1674 44.5764 51.4783
Sum: PSNR: 38.3576 43.5519 50.0746
x264 core:42 svn-388 + patchs
QUOTE:
x264.exe --keyint 300 --min-keyint 24 --bframe 3 --b-pyramid --nf --analyse "none" --weightb --me "dia" --subme 1 --pass 1 --stats "x264_2pass.log" --qcomp 0.7 --bitrate 1033 --qpstep 32 --ratetol inf --progress --output NUL --no-psnr --quiet "17.avs"
x264.exe --keyint 300 --min-keyint 24 --bframe 3 --b-pyramid --ref 16 --nf --analyse "all" --weightb --me "umh" --merange 64 --subme 7 --b-rdo --mixed-refs --8x8dct --trellis 2 --no-fast-pskip --pass 2 --stats "x264_2pass.log" --qcomp 0.7 --bitrate 1033 --qpstep 32 --progress --output 17.mp4 "17.avs"
file size:37,189 KB
Y: PSNR: 39.8436 44.9354 49.9480
U: PSNR: 39.5507 45.5019 51.1331
V: PSNR: 39.6453 45.7164 51.4455
Sum: PSNR: 39.8308 45.1482 50.0778
frames size 图可以看到码流分布情况,所有的图x轴为帧数时间轴,由此可以得知影片时间的大致位置对应的具体情况。图为2帧平均显示
compressibility 图显示影片可压缩性,50 parts of 140 frames
motion 运动侦测情况,红线为kblk,黑色为mblk。可以看到影片结尾部分的运动情况比较剧烈。
PSNR 图,x264 使用 ffdshow-20051129 来解码。另外也可以使用最新 nero 7 的解码器来解码,终于修正了B帧的问题了,不过nero 7在解码器上做了手脚,能被它自己播放器调用。我使用MPC播放时出现错误的提示,尽管这样,还是可以通过使用秘籍来调用的。经过测试,解码的结果和 ffdshow是一样的,但速度比 ffdshow快。
可以见到两者的曲线特性很相似,压不好的地方两者一起压不好,压得好的地方两者一起压得好,所不同的是x264的PSNR平均都高出xvid的。
所有编码和解码过程都关闭PP,按照PSNR曲线图上标明的各点所在位置进行截图比较,以下所有的图片统一由Avisynth做YV12->RGB,codec输出YV12,而不是由Codec解码为RGB
选点截图通常为PSNR曲线的低值区间,没有特别说明的都是为P帧的截图
图片顺序依次为:视源-x264-xvid
#120 a点PSNR x264:41.8131 xvid:40.0544
此段的色彩较丰富,PSNR在整段视频中很低,由于高频比例较大,画面非常难压。对比一下之前的frames size 和 motion 图,可知道这是静态的场景,但是码流分配很高。不过画面都是花丛,看起来比较乱,就算压得不好,如果不看源来的画面,也不容易察觉出来。
另外Avisynth中算x264的PSNR是调用了DirectShow Filter处理, 所以结果与x264编码时自带那个算出来的有些误差
x264算的结果如下,图片为x264算的和Avisynth算的区别,使用了 Y channel 作对比
QUOTE:
x264 [info]: slice I:56 Avg QP:15.63 size: 45931 PSNR Mean Y:47.97 U:48.06 V:48.15 Avg:48.01 Global:47.80
x264 [info]: slice P:2434 Avg QP:17.77 size: 11725 PSNR Mean Y:45.44 U:46.03 V:46.17 Avg:45.64 Global:45.22
x264 [info]: slice B:4559 Avg QP:19.19 size: 1510 PSNR Mean Y:45.20 U:46.11 V:46.24 Avg:45.50 Global:45.09
x264 [info]: mb I I16..4: 11.1% 48.0% 40.9%
x264 [info]: mb P I16..4: 1.8% 4.1% 2.8% P16..4: 49.4% 15.4% 13.8% 1.6% 0.6% skip:10.5%
x264 [info]: mb B I16..4: 0.0% 0.1% 0.1% B16..8: 48.8% 1.3% 1.8% direct: 0.9% skip:46.9%
x264 [info]: 8x8 transform intra:47.0% inter:37.3%
x264 [info]: ref P 58.4% 12.4% 8.4% 3.2% 3.7% 2.3% 2.4% 1.4% 1.4% 1.1% 1.1% 0.9% 0.9% 0.8% 0.8% 0.7%
x264 [info]: ref B 79.0% 8.6% 5.1% 1.8% 1.1% 0.9% 1.0% 0.7% 0.4% 0.3% 0.3% 0.3% 0.2% 0.2% 0.1%
x264 [info]: PSNR Mean Y:45.307 U:46.098 V:46.233 Avg:45.564 Global:45.149 kb/s:1033.93