自己做的视频编码器评测系统:VideoCodecRank

视频编码器领域一直有个比较复杂的问题:mpeg2、divx、xvid、mpeg4、vp8、vp9、x264、openh264、x265等等这一系列编码器到底哪个好?而对于同一种视频编码器,又包括了各种各样的参数配置,这些配置对视频编码器的影响又是怎样的?为了研究这个问题,我和师弟们在课余时间开发了一个软件系统,专门用于评价视频编码器的性能。

本文记录自己做的视频编码器性能评价的系统VideoCodecRank。本系统可以通过调整几种不同的维度的参数取值——视频内容、分辨率、编码器预设、码率来对视频编码器的性能进行评价和对比。对于每一个编码器,本系统可以遍历上述几种参数进行编码,并且记录编码视频图像质量和编码速度。通过本系统,可以全方位的对比视频编码器在各种条件下性能的优劣。在此还要感谢二位师弟的参与。目前在大家的合作下该系统基本功能刚开发完成,下一步打算继续测试和完善。

测试系统地址::8080/vcr/

目前的状态

目前本系统计算了下列编码器:

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

每种内容的测试视频被缩放成了如下分辨率:

640×360

848×480

1280×720

1920×1080 (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。它的计算公式如下所示:

分辨率分辨率指的是视频的尺寸。例如常见的分辨率有3840×2160 (4K), 1920×1080 (HD), 1280×720 (720P), 640×360 (360P)等。编码器和编码器预设不同编码器的编码效果相差很大。此外,同一编码器的预设(preset)对输出的图像质量有较大的影响。本系统将同一编码器的不同的预设也看作为不同的“编码器”。预设指的是预先定义好的一套编码器参数。编码器的预设一般是在速度和图像质量上寻求一个平衡点:速度快的预设一般情况下是以牺牲视频质量为代价的;视频质量好的预设一般情况下编码速度比较慢。例如x264编码器中按照编码速度从快到慢包含了10个预设:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo。码率码率是影响视频质量最主要的参数之一。其它条件形同的情况下,码率越大,视频质量越好。例如一个640×360的1Mbps的的视频的质量肯定好于一个640×360的500kbps的视频。但是不同分辨率的视频码率差别很大。例如我们很难断定一个1280×720的1Mbps的视频的质量是否高于一个640×360的500kbps的视频。为了去掉分辨率这个影响因子,我们在本文的系统中引入了一个新的变量——BPP(每像素比特数)。BPP的计算公式如下:

BPP=bitrate/(framerate*reso_w*reso_h)

其中,bitrate是视频的码率,framerate是视频的帧率,reso_w和reso_h分别代表视频的宽和高。

BPP的意义是视频中一个像素点的数据量。例如我们假设帧率为25fps,上文中1280×720的1Mbps的视频的BPP取值为0.043,640×360的500kbps的视频的BPP取值为0.087。下表列出了BPP,码率和常见分辨率之间的对应关系。

BPP与码率之间的对应关系

对应码率(kbps)

每像素比特数

(bits/pixel)

640×360

848×480

1280×720

1920×1080

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

好想从现在开始抱着你,紧紧地抱着你,一直走到上帝面前。

自己做的视频编码器评测系统:VideoCodecRank

相关文章:

你感兴趣的文章:

标签云: