终于到年底了..........
今年以来视频编码的发展进入了百家争鸣的时代........
免费的视频编码越来越多..........
而且在压缩质量和效率上比原来也有所提高.........
这里就把最新的六种视频编码作出比较.........
它们分别是:
3ivx D4 4.5(MPEG4)
DIVX 5.11
RV9 新VBR 2pass
WMV9
VP6 6.0.9.2
XVID 圣诞版(patch -156)
要说的几点是, 没想到XVID再我测试刚好做完的时候就出了beta3, 不过只差了5各patch, 而有可能会影响结果的只有I-frame那, 不过应该区别不大.
VP6 终于改进了原来的2-pass和休整了bug, 现在终于可以和其他编码一搏了.............
其实本来还计划了一个片段的.........
不过因为花的时间远远超出了预计(一共花了5天时间)..........
所以最后一个就没做了...........
下面是测试用的设置:
全部的max key-frame interval 都是 10 sec
3ivx:
基本没什么可设置的
2-pass best quality
half-pel + 4mv
Divx使用的设置是:
performance/quality --> slowest
Bidirectional encoding on
其它的都是 off
n-pass, n>=3
Rv9使用的设置是:
EHQ=80
customPacketSize=16000
patternAdaptivity=1
MSL=60
使用了新的VBR 2-pass
Max bitrate 一般是 average的两倍
zoom and pan的MSL 改成了 5, low motion的改成了10.
WMV:
Maximum quality
decoder = Complex
2pass
10sec max I-frame interval
XVID:
motionsearch= Ultra high
VHQ=4
quant type = h.263
BF: 3/100/100
trellis = on
chromamotion = on
chroma optimizer=off
2 pass:
high bitrate scene=10
low bitrate scene=10
degration=5
improvement=5
over flow control=5
i-f boost=0
i-f reduction = 20
min i-f=4
这里在低动态的那个片段里的25%中因为无法接近设置的码率, degration改成了20.
VP6:
这里到后来才发现犯了个错误, 本来该使用 advance profile, 但使用了simple profile.
使用advance profile的话,PSNR应该会有0.1到0.3的提高.这个以后如果有时间再重新测试.
good quality<<用best quality的话速度就会由 帧/秒 变成 秒/帧 了....
VBR
progressive
quant= 2-31
2pass= 70/40/400
其他都是off
下面是测试的样板script:
3ivx:
fil=avisource("M:\avis\3ivx\3ivx25.avi")
org=avisource("ffv1.avi")
compare(fil,org,channels="YUV",logfile="M:\avis\3ivx\3ivx25.log")
divx:
fil=avisource("M:\avis\divx\divx90.avi")
org=avisource("ffv1.avi")
compare(fil,org,channels="YUV",logfile="M:\avis\divx\divx90.log")
RV9:
fil=directshowsource("M:\avis\rv9\rv990.rmvb",fps=29.97)
org=avisource("ffv1.avi")
compare(fil,org,channels="YUV",logfile="M:\avis\rv9\rv990.log")
VP6:
fil=avisource("M:\avis\vp6\vp690.avi")
org=avisource("ffv1.avi")
compare(fil,org,channels="YUV",logfile="M:\avis\vp6\vp690.log")
WMV:
fil=avisource("M:\avis\wmv\wmv25.avi")
org=avisource("ffv1.avi")
compare(fil,org,channels="YUV",logfile="M:\avis\wmv\wmv25.log")
XVID:
fil=avisource("M:\avis\xvid25.avi").trim(1,0)
org=avisource("ffv1.avi")
compare(fil,org,channels="YUV",logfile="M:\avis\xvid25.log")
这里是测试结果的表格:
http://www-personal.umich.edu/~liusu/test/results.xls如果没有M$ office的话, 只有看图了
http://www-personal.umich.edu/~liusu/test/spreadsheet.png先讲解一下各个测试的作用.......
Average PSNR= 平均峰值信噪比
作用是测量一个视频编码在一定文件大小下和源文件的差别的平均值
这个越高画质就越高
Overall PSNR = 全局峰值信噪比
作用是测量一个视频编码在一定文件大小下和源文件的差别, 还考虑PSNR的连续性.........
和平均峰值信噪比相比, 如果有一个10dB和90dB的帧, 那平均峰值信噪比就是50, 而两个50dB的帧的平均峰值信噪比也是50.......
很明显两个50dB的看起来要好得多, 因为10dB的帧看起来可以说和原来的是完全不一样了, 即使有一个90dB的, 但那个烂的帧会让人觉得总体的画质低下. 而全局峰值信噪比则考虑到了这一点..........
峰值信噪比的数值的变化越小, 数值就越高..............
一个视频编码本身的压缩能力决定了平均峰值信噪比.........
但它的流量控制(rate control)却是它全局峰值信噪比 高低的关键..........
下面的rate control就是用全局峰值信噪比/平均峰值信噪比 x 100% 得出来的, 从这里可以看出一个视频编码的2-pass(或n-pass)的性能.
因为测试的东西太多........
我不可能用人眼来看谁好谁差了............
所以暂时只有依靠PSNR来判定了............
这里文件大小的100%是用xvid quant 2 来决定的........
之所以最高用90%, 就是为了测试xvid的流量控制能力........
第一个片段是使用的gundam seed的第一个op
使用的avs sript是:
import("D:\aviutil\aviutilfilters.avs")
mpeg2source("seed.d2v",idct=7)
converttoyuy2()
ConvertYUY2ToAviUtlYC()
AU_wavelet3DNR2(2,0,20,0,20,20,20,20,20,20,5,0,0,0,0,10,false,true,true,false,false,false,false,false,false,false,false,false,true,true,false,false)
ConvertAviUtlYCToYUY2()
converttoyv12()
warpsharp(bump=100,depth=96,blur=3,cubic=-0.6)
undot()
因为这个script很慢....
所以转成了ffv1的avi来做测试.........
在高动态的情况下, 光看平均psnr的话, RV9是最强的......
不过RV9的2-pass性能似乎不太理想..........
在overall psnr里面的领先在80%的时候被XVId超越了........
不过在这个测试里面, RV9是明显的胜利者............
只有在高码率的情况下XVID 才会胜出........
VP6在中低码率的情况下表现相当不俗.........
再进入高码率后就不行了............
Divx5.11似乎比XVID差了一点,几乎平行, 毕竟都是mpeg4的codec.....
不过,同样是mpeg4的3ivx的表现就相当差了.........
average psnr和overall psnr都殿底了........
MS的WMV9似乎还老当益壮......
实力和xvid 不相上下, 但相对与RV9就差了不少............
第二个片段是使用的12国记的op:
用的script:
mpeg2source("123.d2v",idct=7)
trim(0,2280)
这里完全是镜头的动作,横移,拉近,拉远.........
这里面XVID基本上是所向披靡.........
除了在低码率下被RV9和WMV击败外.............
overall psnr 在大部分情况下都远远超过其他codec.........
这个片段的前半对码率的需求相当低, 而后半对码率的需求比较高.....
这对2-pass是一个很好的考验.............
从这里来看..........
xvid的2-pass的rate control(流量控制是相当优秀的)..........
而divx的n-pass也不错, 虽然在average psnr 中差点殿底, 不过在overall psnr中总算搬回一成, 缩短了和其他codec的差距..............
这里要注意的是wmv在低码率下超过了设定码率 20%以上.........
所以实际PSNR应该更低...........
第三个片段是用的12国记第8话一段比较暗,动态低,但背景有不少缓慢移动的灰尘的场景(DVD的chapter 2)
mpeg2source("123.d2v",idct=7)
trim(301,4080)
这里首先要说的是WMV好像并不喜欢这一段场景...........
在2nd pass里老是出错退出..............
我花了半天时间, 始终无法弄明白是什么原因...........
始终无法压出25%大小的wmv..........
在低动态下, RV9继续保持无敌性..............
无论是overall psnr还是average psnr.........
RV9都是绝对的胜利者............
DIVX和XVID的表现相当相似..........
不过XVID在高码率下胜出.........
VP6在最低的码率下仅次于RV9(虽然差了很远)............
在高码率下表现不佳............
WMV在90%的时候的文件大小超出了设置大小很多..........
不明白为什么会如此............
而3ivx在25%的时候居然超出了设定50%以上..............
所以实际应该会低与xvid和divx的...........
关于压制的速度......
3ivx是最快的.................
然后是vp6 simple.......
vp6 advance和xvid的速度大概差不多........
不过xvid有fast first pass(beta 3 还有了turbo mode), 所以速度应该快与VP6..........
剩下几个应该就是慢了一个等级的了.........
Rv9因为也有fast first pass, 所以速度在vp6之后..........
而WMV9和DIVX5.11的速度就是有XVID或VP6的1/7-1/10了......
当然两个可以使用更低的精度来提高速度, 不过在画质上就会差更远了............
似乎到这里就是完了............
因为测试的数量太大........
所以多半有一些错误........
希望大家看到后能指出来................
哦......
还没说哪个最强啊............
如果要质量的话.......
应该是选RV9吧...........
如果觉得RV9太慢............
就使用XVID吧.............