视频编码器领域一直有个比较复杂的问题:mpeg2、divx、xvid、mpeg4、vp8、vp9、x264、openh264、x265等等这一系列编码器到底哪个好?而对于同一种视频编码器,又包括了各种各样的参数配置,这些配置对视频编码器的影响又是怎样的?为了研究这个问题,我和师弟们在课余时间开发了一个软件系统,专门用于评价视频编码器的性能。本文记录自己做的视频编码器性能评价的系统VideoCodecRank。本系统可以通过调整几种不同的维度的参数取值——视频内容、分辨率、编码器预设、码率来对视频编码器的性能进行评价和对比。对于每一个编码器,本系统可以遍历上述几种参数进行编码,并且记录编码视频图像质量和编码速度。通过本系统,可以全方位的对比视频编码器在各种条件下性能的优劣。在此还要感谢二位师弟的参与。目前在大家的合作下该系统基本功能刚开发完成,下一步打算继续测试和完善。测试系统地址:http://www.velab.com.cn:8080/vcr/目前的状态目前本系统计算了下列编码器:x264-fasterx264-mediumx264-ultrafastx264-superfastx264-veryfastx264-fastx264-slowx264-slowerx264-veryslowx265-fasterx265-mediumx265-ultrafastx265-superfastx265-veryfastx265-fastx265-slowx265-slowerx265-veryslowf265-quality10f265-quality20DivX265-aqo2DivX265-aqo3DivX265-aqo4VP8-good-0VP8-good-1VP8-good-2VP8-good-3VP8-good-4VP8-good-5VP8-realtimeDivX265-aqo1openh264-rc0openh264-rc1mpeg4mpeg1mpeg2xvidh263ptheoraVC1-adv0VC1-adv1VC1-adv2VC1-adv3VC1-adv4VC1-adv5VP9-good-0VP9-good-1VP9-good-2VP9-good-3VP9-good-4VP9-good-5VP9-realtimeIntel-h264-speedIntel-h264-qualityIntel-h264-balancedIntel-mpeg2-speedIntel-mpeg2-qualityIntel-mpeg2-balanced使用了下列几种内容的测试视频:src01src02src04src05src06src08src11src12src14ducksparkpedriverbedstation2sunflowertractor每种内容的测试视频被缩放成了如下分辨率:640x360848x4801280x7201920x1080 (raw)每个测试视频设定了如下的BPP(可换算为码率):0.0250.050.0750.10.150.2统计了如下视频图像质量指标:PSNRSSIM系统涉及到的参数本章主要介绍本视频编码器性能评价系统涉及到的参数。这些参数可以分为输入参数和评价参数。输入参数用于模拟不同的编码环境。而评价参数则用于在编码完成后统计编码性能。输入参数本节介绍该系统的输入参数。这些参数的变动通常会明显的影响视频编码器的性能。这些参数包括:视频内容,分辨率,编码器预设,码率。视频内容在相同视频质量的前提下,画面内容复杂、运动剧烈,要求的码率较高;画面内容简单、景物静止,要求的码率较低。本系统中我们选择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=bitrate/(framerate*reso_w*reso_h)其中,bitrate是视频的码率,framerate是视频的帧率,reso_w和reso_h分别代表视频的宽和高。BPP的意义是视频中一个像素点的数据量。例如我们假设帧率为25fps,上文中1280x720的1Mbps的视频的BPP取值为0.043,640x360的500kbps的视频的BPP取值为0.087。下表列出了BPP,码率和常见分辨率之间的对应关系。BPP与码率之间的对应关系 对应码率(kbps)每像素比特数(bits/pixel)640x360848x4801280x7201920x10800.02514425457612960.05288508115225920.075432763172838880.15761017230451840.158641526345677760.211522035460810368评价参数评价参数用于在编码完成后统计编码的质量情况。评价参数可以分为两类:质量评价参数和速度评价参数。质量评价参数编码质量评价主要通过全参考视频质量评价算法实现。全参考视频质量评价算法通过比较编码前原始视频与编解码后受损视频获得视频质量的评价结果。最常见的全参考视频质量评价模型为PSNR和SSIM。PSNRPSNR(峰值信噪比)是使用最为广泛的视频质量评价方法。它的计算公式为:其中L为图像灰度值范围,对于8bit位深的图像来说L=2^8-1=255;M*N图像块的MSE(均方误差)计算公式为:PSNR取值通常在20-40之间,取值越大代表图像质量越好。尽管PSNR计算简单,但是由于没有考虑到人类视觉感知特性,所以其评价结果与主观感受往往相差较大。SSIMSSIM(结构相似度)是zhou wang等人提出的一种常见的视频质量评价方法。该方法考虑了人类视觉感知特性,综合考虑了亮度、对比度以及结构的影响。它的计算公式如下所示。其中l(x,y)为亮度比较函数,c(x,y)为对比度比较函数,s(x,y) 为结构比较函数。这三个函数的具体计算方法可以参考相关文献。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.comhttp://blog.csdn.net/leixiaohua1020