视频编码器领域一直有个比较复杂的问题:mpeg2、divx、xvid、mpeg4、vp8、vp9、x264、openh264、x265等等这一系列编码器到底哪个好?而对于同一种视频编码器,又包括了各种各样的参数配置,这些配置对视频编码器的影响又是怎样的?为了研究这个问题,我和师弟们在课余时间开发了一个软件系统,专门用于评价视频编码器的性能。
本文记录自己做的视频编码器性能评价的系统VideoCodecRank。本系统可以通过调整几种不同的维度的参数取值——视频内容、分辨率、编码器预设、码率来对视频编码器的性能进行评价和对比。对于每一个编码器,本系统可以遍历上述几种参数进行编码,并且记录编码视频图像质量和编码速度。通过本系统,可以全方位的对比视频编码器在各种条件下性能的优劣。在此还要感谢二位师弟的参与。目前在大家的合作下该系统基本功能刚开发完成,下一步打算继续测试和完善。
目前本系统计算了下列编码器:
x264-faster
x264-medium
x264-ultrafast
x264-superfast
x264-veryfast
x264-fast
x264-slow
x264-slower
x264-veryslow
x265-faster
x265-medium
x265-ultrafast
x265-superfast
x265-veryfast
x265-fast
x265-slow
x265-slower
x265-veryslow
f265-quality10
f265-quality20
DivX265-aqo2
DivX265-aqo3
DivX265-aqo4
VP8-good-0
VP8-good-1
VP8-good-2
VP8-good-3
VP8-good-4
VP8-good-5
VP8-realtime
DivX265-aqo1
openh264-rc0
openh264-rc1
mpeg4
mpeg1
mpeg2
xvid
h263p
theora
VC1-adv0
VC1-adv1
VC1-adv2
VC1-adv3
VC1-adv4
VC1-adv5
VP9-good-0
VP9-good-1
VP9-good-2
VP9-good-3
VP9-good-4
VP9-good-5
VP9-realtime
Intel-h264-speed
Intel-h264-quality
Intel-h264-balanced
Intel-mpeg2-speed
Intel-mpeg2-quality
Intel-mpeg2-balanced
使用了下列几种内容的测试视频:
src01
src02
src04
src05
src06
src08
src11
src12
src14
ducks
park
ped
riverbed
station2
sunflower
tractor
每种内容的测试视频被缩放成了如下分辨率:
640x360
848x480
1280x720
1920x1080 (raw)
每个测试视频设定了如下的BPP(可换算为码率):
0.025
0.05
0.075
0.1
0.15
0.2
统计了如下视频图像质量指标:
PSNR
SSIM
时间信息(TI)
TI反映了一个序列画面随着时间的变化而变化的程度。画面内容运动程度剧烈的序列通常会有较高的TI值。它的计算方法是求序列的每一帧与前一帧图像的帧差,然后对帧差图像计算标准差。选这些标准差中的最大值为TI。它的计算公式如下所示:
空间信息(SI)
SI反映了一个序列画面的空间复杂程度。内容细节越多的序列通常会有较高的SI值。它的计算方法是对每一帧视频进行Sobel滤波,然后对滤波后图像计算标准差。选这些标准差中的最大值为SI。它的计算公式如下所示:
BPP的意义是视频中一个像素点的数据量。例如我们假设帧率为25fps,上文中1280x720的1Mbps的视频的BPP取值为0.043,640x360的500kbps的视频的BPP取值为0.087。下表列出了BPP,码率和常见分辨率之间的对应关系。
|
对应码率(kbps) |
|||
每像素比特数 (bits/pixel) |
640x360 |
848x480 |
1280x720 |
1920x1080 |
0.025 |
144 |
254 |
576 |
1296 |
0.05 |
288 |
508 |
1152 |
2592 |
0.075 |
432 |
763 |
1728 |
3888 |
0.1 |
576 |
1017 |
2304 |
5184 |
0.15 |
864 |
1526 |
3456 |
7776 |
0.2 |
1152 |
2035 |
4608 |
10368 |
SSIM取值在0-1之间,取值越大代表图像质量越好。SSIM相对于PSNR来说更加符合人眼的主观感受,因此也是一种使用很广泛的视频质量评价方法。
编码速度评价主要通过统计编码和解码的耗时(以毫秒为单位)来实现。
上述逻辑下图所示。从图中可以看出本系统遍历参数的顺序如下:
视频内容-->分辨率-->编码器-->码率-->客观质量评价方法
当系统完成了一次客观质量评价算的计算之后,就会生成一条保存了当前实验参数的记录,并将该记录存储到数据库中。速度质量权重:目前只支持时间/质量权重设置为1或0。质量权重为1则按照编码器输出视频质量进行排序,时间权重为1则按照编码器消耗时间进行排序。首页的内容如下所示。
分辨率:该选项可以选择输入视频的尺寸。
码率:该选项可以选择输入视频的码率。注意码率是按照BPP(Bit Per Pixel,每像素比特数)为单位的。
内容复杂度:该选项可以选择输入测试视频序列。注意输入的视频内容是按照时间复杂度TI或空间复杂度SI(这两个指标均取自于ITU BT.1788标准)进行排序的,以方便选择。
编码器
视频序列
分辨率
每像素比特数
编码时间
解码时间
视频质量评价算法
客观质量
主观质量
结果集页面的内容如下图所示。可以通过在下拉框中调整“编码器”,“视频序列”,“分辨率”,“每像素比特数”,“客观质量评价算法”几个参数来筛选符合特定条件的结果。
编码器名称编码器页面的内容如下图所示。单击编码器的名称可以进入编码器详细信息页面。
所属标准
厂商
版本
视频序列名称视频序列页面的内容如下图所示。单击视频序列的名称可以进入视频序列详细信息页面。
原始分辨率
像素采样格式
帧率
帧数
视频序列时间/空间复杂度对比图如下所示。图中每个点代表一个视频序列,图表横坐标为SI,纵坐标为TI。由此可知位于图表上方的视频序列运动比较剧烈,而位于图表右边的视频序列内容纹理比较复杂。最为简单的视频序列位于图表的右上角,最为简单的视频序列位于图表的左下角。