视频编码器领域一直有个比較复杂的问题: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
系统涉及到的參数
本章主要介绍本视频编码器性能评价系统涉及到的參数。这些參数能够分为输入參数和评价參数。输入參数用于模拟不同的编码环境。而评价參数则用于在编码完毕后统计编码性能。
输入參数
本节介绍该系统的输入參数。这些參数的变动一般会明显的影响视频编码器的性能。这些參数包括:视频内容,分辨率。编码器预设,码率。
视频内容
在同样视频质量的前提下,画面内容复杂、运动剧烈,要求的码率较高。画面内容简单、景物精巧,要求的码率较低。本系统中我们选择ITU- BT.1788标准中提出的时间复杂度(TI)和空间复杂度(SI)来分别衡量视频的复杂程度。时间信息(TI)
TI反映了一个序列画面随着时间的变化而变化的程度。画面内容运动程度剧烈的序列一般会有较高的TI值。它的计算方法是求序列的每一帧与前一帧图像的帧差,然后对帧差图像计算标准差。选这些标准差中的最大值为TI。它的计算公式例如以下所看到的:
空间信息(SI)
SI反映了一个序列画面的空间复杂程度。
内容细节越多的序列一般会有较高的SI值。
它的计算方法是对每一帧视频进行Sobel滤波,然后对滤波后图像计算标准差。选这些标准差中的最大值为SI。
它的计算公式例如以下所看到的:
分辨率
分辨率指的是视频的尺寸。比如常见的分辨率有3840x2160 (4K), 1920x1080 (HD), 1280x720 (720P), 640x360 (360P)等。
编码器和编码器预设
不同编码器的编码效果相差非常大。此外,同一编码器的预设(preset)对输出的图像质量有较大的影响。本系统将同一编码器的不同的预设也看作为不同的“编码器”。预设指的是预先定义好的一套编码器參数。编码器的预设通常是在速度和图像质量上寻求一个平衡点:速度快的预设普通情况下是以牺牲视频质量为代价的;视频质量好的预设普通情况下编码速度比較慢。
比如x264编码器中依照编码速度从快到慢包括了10个预设:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo。
码率
码率是影响视频质量最基本的參数之中的一个。其他条件形同的情况下,码率越大,视频质量越好。比如一个640x360的1Mbps的的视频的质量肯定好于一个640x360的500kbps的视频。可是不同分辨率的视频码率区别非常大。比如我们非常难断定一个1280x720的1Mbps的视频的质量是否高于一个640x360的500kbps的视频。为了去掉分辨率这个影响因子。我们在本文的系统中引入了一个新的变量——BPP(每像素比特数)。BPP的计算公式例如以下:
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 |
评价參数
评价參数用于在编码完毕后统计编码的质量情况。评价參数能够分为两类:质量评价參数和速度评价參数。质量评价參数
编码质量评价主要通过全參考视频质量评价算法实现。全參考视频质量评价算法通过比較编码前原始视频与编解码后受损视频获得视频质量的评价结果。最常见的全參考视频质量评价模型为PSNR和SSIM。
PSNR
PSNR(峰值信噪比)是使用最为广泛的视频质量评价方法。它的计算公式为:
PSNR取值通常在20-40之间。取值越大代表图像质量越好。虽然PSNR计算简单。可是因为没有考虑到人类视觉感知特性。所以其评价结果与主观感受往往相差较大。
SSIM
SSIM(结构类似度)是zhou wang等人提出的一种常见的视频质量评价方法。该方法考虑了人类视觉感知特性,综合考虑了亮度、对照度以及结构的影响。
它的计算公式例如以下所看到的。
SSIM取值在0-1之间,取值越大代表图像质量越好。
SSIM相对于PSNR来说更加符合人眼的主观感受,因此也是一种使用非常广泛的视频质量评价方法。
速度评价參数
编码速度评价主要通过统计编码和解码的耗时(以毫秒为单位)来实现。
系统执行原理
本系统会依据输入的配置信息,遍历上文介绍的几种输入參数值,组合成不同的命令进行编码和评价工作。系统開始执行后,会依照顺序执行以下几步工作:
(1) 对于每一个输入的视频測试序列,对它的尺寸进行缩放,生成一系列不同分辨率的视频序列。
(2) 对于每种分辨率的原始视频序列,选择不同的编码器准备编码。
(3) 对于每种编码器,设置不同的码率进行编码,生成码流文件。随后解码生成的码流文件。得到受损的视频序列。
(4) 对于每一个受损视频序列。使用不同的视频质量评价方法进行质量评价,得到质量分数。
上述逻辑下图所看到的。
从图中能够看出本系统遍历參数的顺序例如以下:
视频内容-->分辨率-->编码器-->码率-->客观质量评价方法
当系统完毕了一次客观质量评价算的计算之后,就会生成一条保存了当前实验參数的记录,并将该记录存储到数据库中。站点说明
VideoCodecRank站点的结构例如以下图所看到的。整个站点除了首页之外包括了“结果集”、“编码器”、“视频序列”、“系统配置”、“关于”几个页面。这些页面之间的关系例如以下图所看到的。
首页
首页中包括了一张编码器的综合比較图表。当中蓝色横条代表了编码图像质量,而黄色横条代表了编码时间。能够拖动图表上方的滑动条调整以下几种參数选择不同的数据对编码器的性能进行排序。
速度质量权重:眼下仅仅支持时间/质量权重设置为1或0。质量权重为1则依照编码器输出视频质量进行排序,时间权重为1则依照编码器消耗时间进行排序。首页的内容例如以下所看到的。
分辨率:该选项能够选择输入视频的尺寸。
码率:该选项能够选择输入视频的码率。注意码率是依照BPP(Bit Per Pixel,每像素比特数)为单位的。
内容复杂度:该选项能够选择输入測试视频序列。注意输入的视频内容是依照时间复杂度TI或空间复杂度SI(这两个指标均取自于ITU BT.1788标准)进行排序的,以方便选择。
结果集页面
结果集页面中包括了系统中全部客观视频质量评价的结果。每一条实验记录包括了例如以下信息:编码器
视频序列
分辨率
每像素比特数
编码时间
解码时间
视频质量评价算法
客观质量
主观质量
结果集页面的内容例如以下图所看到的。能够通过在下拉框中调整“编码器”,“视频序列”。“分辨率”。“每像素比特数”。“客观质量评价算法”几个參数来筛选符合特定条件的结果。
编码器页面
编码器页面中包括了系统中全部參与评价的编码器(注:对于包括多种预设的编码器,每种预设都算作一种编码器)。当中每一条记录包括了例如以下信息:编码器名称编码器页面的内容例如以下图所看到的。单击编码器的名称能够进入编码器具体信息页面。
所属标准
厂商
版本号
编码器具体信息页面
编码器具体信息页面包括了3个部分:编码器简单介绍、编码器具体质量和编码器时间-质量权衡图。
编码器简单介绍部分内容例如以下所看到的。
能够看出该列表列出了编码器的基本信息。
能够通过选择參数(编码器、视频序列、分辨率、码率),列出特定条件下測试视频序列每一帧画面的图像质量信息(客观算法PSNR、SSIM等)。
图表中横坐标为视频序列的帧序号,纵坐标为视频客观质量评价算法的值。
该图表能够通过选择參数(视频序列、码率、分辨率、客观评价方法),列出特定条件下測试视频编码器的耗时信息和图像质量信息。
视频序列页面
视频序列页面中列表显示了系统中全部參与測试的原始视频序列信息。当中每一条记录包括例如以下信息:视频序列名称视频序列页面的内容例如以下图所看到的。单击视频序列的名称能够进入视频序列具体信息页面。
原始分辨率
像素採样格式
帧率
帧数
视频序列具体信息页面
视频序列具体信息页面包括了3项内容:视频序列预览、视频序列具体特性以及视频序列时间/空间复杂度对照图。视频序列预览部分内容例如以下所看到的。
能够通过该功能预览測试视频的内容。
能够通过该功能查看视频中每一帧图像的TI(Temporal perceptual Information)信息和SI(Spatial perceptual Information)信息。TI和SI两个指标取自于ITU BT.1788标准。
TI越大,代表视频运动剧烈(时间上变化大)。SI越大。代表视频内容复杂(空间上纹理多)。图表中横坐标为视频序列的帧序号,纵坐标为视频特性值。
视频序列时间/空间复杂度对照图例如以下所看到的。图中每一个点代表一个视频序列,图表横坐标为SI,纵坐标为TI。由此可知位于图表上方的视频序列运动比較剧烈,而位于图表右边的视频序列内容纹理比較复杂。最为简单的视频序列位于图表的右上角,最为简单的视频序列位于图表的左下角。
系统配置页面
系统配置页面的内容例如以下图所看到的。该页面中列出了系统配置的參数信息。比如显示了输入视频会被拉伸为哪几种分辨率,编码时候会选择哪些BPP,客观质量评价算法有哪些等等。
雷霄骅
leixiaohua1020@126.com
http://blog.csdn.net/leixiaohua1020