首页 > 代码库 > 视频编码器评估与参数优化

视频编码器评估与参数优化

视频编码器评估与参数优化是个比较麻烦的问题,主要原因是:编码器种类多,输入的参数繁多,参数的相互影响非线性,深入理解其实现需要投入巨大的精力或者不可能(对于商业产品而言)。而另一方面,评估和选择编码器、针对特定的目标选择最优的编码参数组合对于视频服务商——比如视频网站来说,是一个现实的需要。有感于或者苦恼于如何选择最优的方案,笔者通过对多目标优化方法的尝试进行了一定的探索,之所以选择这种方法,主要原因是它比较“暴力”和“傻瓜”,并不需要过多的纠缠参数的涵义f‘(*∩_∩*)′。

下文仅仅是一个初步的方案可行性论证(发布此文的一个月前),所有展示的数据为实际运行结果,但是只有参考价值或者不完整,仅供交流思路使用。

因涉及到工作的内容,不打算更新以展示最新的进展——好吧,由于中间各种事情打岔的关系,其实没啥进展.....................╮( ̄﹏ ̄)╭

1.测试视频资源

 

视频序列

说明

码率kb/s

帧数

FPS 帧/秒

分辨率

Cartoon

少儿动漫

2336

746

25

720x576 (yuv420p)

Sport-Soccer

足球世界杯预选赛

2553

713

25

720x576 (yuv420p)

Sport-NBA

NBA篮球赛

2394

738

25

720x576 (yuv420p)

Course

百家讲坛

2513

711

25

720x576 (yuv420p)

Scenic

风景片《大黄山》

2804

710

25

720x576 (yuv420p)

Documentary

历史纪录片《燃烧的太平洋》

8291

730

25

1920x1080 (yuv420p)

 

2.编码器:

x264-snapshot-20141012-2245

 

3.测试方法

基于分布式计算的多目标优化

 

4.评估方法

4.1目标

1.        文件压缩率

2.        处理速度:文件大小 / 编转码时长

3.        视频质量:SSIM

 

4.2编码参数

参数

说明

取值范围

deblock

 

[-3, 3]

crf

 

[0, 51]

trellis

 

[0, 2]

nr

 

[0, 1000]

subq

 

[0, 6]

mbd

 

[0, 2]

pass

 

[0, 2]

coder

 

[ "vlc", "ac", "raw", "rle", "deflate", ]

me_method

 

[ "zero", "full", "epzs", "esa", "tesa", "dia", "log", "phods", "x1", "hex", "umh", "iter", ]

Partitions

 

[ "parti4x4", "parti8x8", "partp4x4", "partp8x8",]

Etc…..

 

 

 


5.测试结果

 

5.1 2目标(视频质量&文件压缩)

 

曲线拟合结果:

对应的编码参数:

Cartoon视频部分解:

 

 

5.2 2目标(视频质量&编码速度)

 

 

5.3 3目标(视频质量&编码速度&文件压缩率)



 

5.4最优解集收敛速度(convergence rate)

 

6.简要结论

1.        X264编码器对不同类型的视频内容有明显不同的最优解集。

a)        在视频质量、视频压缩率、编码速度三项指标的多种组合上,色彩不丰富、变化幅度小的视频(如动画),帕累托前端的数据要全面优于色彩丰富、变化剧烈的视频(如体育赛事)。这也说明,在强调最优策略的场合,针对不同视频类型进行编码是有价值和必要性的。

b)       如何对视频类型进行区分,需要更多的工作要做。如:更大的样本。

2.        多个编码器的比较和评估同样可以基于对多个编码器的帕累托前端的比较。如:对intel mdk进行求解。

3.        在实验过程中,我们将编码器视作“黑盒子”或者是一个非线性的未知方程组,进行最优求解。

a)        最终的pareto front可以拟合为一个线性方程:

b)       最优解集的规律性有待进一步挖掘


视频编码器评估与参数优化