x264 编码器选项分析 (x264 Codec Strong and Weak Points) 2
文章目录:
x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1
x264 编码器选项分析 (x264 Codec Strong and Weak Points) 2
======================
上篇文章简单翻译了MSU实验室做的X264的Option(即编码选项,后文称其英文名)分析报告《x264 Codec Strong and Weak Points》的前面部分。前面部分部分比较基础,而其后的内容相对来说要复杂许多。本文继续上篇文章的内容,简单记录接下来的内容。
前文通过“彩云图”的方法分析了X264的Preset。“彩云图”这种方式的优点是一目了然,可以清晰地看出各种Option取不同的值对视频的质量和编码速度的影响。但“彩云图”这种分析是有局限性的。关键在于它对X264的Option只能定性的作分析,而不能定量地作分析。如果想要定量地画出图表,还需要下文所述的几种方法。
下文所述的几种方法,可以定量地分析X264的Option。根据不同的情况,画出相应的图表。
Lambda的 Preset分析
编码速度和编码质量对于视频编码器来说都很重要。但是这两个因素差别太大,因而很难以比较它们。如果一个Preset的速度和质量都高于另一个Preset,我们可以说前面那个Preset更好一些。但是如果一个Preset的速度高于另一个Preset,质量却低于另一个Preset,该如何比较?比较极端的情况下,我们通过主观的方式可以进行比较。比如说Preset A比Preset B的速度高两倍,但是码率高0.1%,我们可以说Preset A好于Preset B。为了定量研究上述问题,我们引入参数λ,用于表示期望编码时间与期望质量之间的比值。
λ=期望编码时间较优/期望质量较优
较大的λ代表期望的速度比质量重要(如果λ为无穷大,则只追求最快的速度,而质量根本无足轻重)。较小的λ含义则相反。
我们将通过以下方式分析数据
1.计算所有Preset的λ值。
2.根据λ值选取“前10%的Preset”。
3.选择不同的λ值,分别得到它们“前10%的Preset”,最后得到实验结果。
注意下面这张图,非常形象了说明了实验的步骤。
选择λ
本实验的难点之一是λ的取值。取值过程不再细说,最后选定了0.01-7的多个λ值。较大的λ代表速度比质量重要(如果λ为无穷大,则希望速度最快而质量无所谓)。较小的λ含义则相反。
据λ值选取“前10%的Preset”
其中有较多的数学方法,讲述起来很繁琐,自己也没有深入进去看。大概明白其选择”前10%的Preset“的方法,简单叙述一下。
筛选的目的其实就是找到一部分速度和质量都比较好的Preset。前文已经分析过,实验结果图上越是位于左边的点,代表其Preset速度快;越是位于下面的点,代表其Preset质量好。因此位于左下方的Preset是最好的。关键的问题就是选择哪些位于左下方的点。实验中使用下述公式进行筛选:
M=λT+Q
这是一个普通的线性函数。斜率是λ,横坐标T是相对时间,纵坐标M是相对码率,截距Q是一个不定的数字。这样当我们选定一个λ的时候,就确定了一条斜率固定,截距可以变化的直线,如图所示(如图中的粉红和蓝色的线)。下面假设这条线的截距从0开始逐渐增加,当它碰上的第一个点,就是该λ值最佳的Preset(因为它是最靠近左下方的,如下图中红色五角星的点)。然后直线截距继续增加,会遇到越来越多的点。直到获取到占总点数10%的点(如图中浅蓝色的点)。至此,直线遇到的所有的点就可以列为该λ下“前10%的Preset”。
下面几张图分别列举了不同的λ情况下,“前10%的Preset”的点的分布情况。可以看出,λ越小,点越分布在图表的下方(例如λ=0.01,λ=0.02)。代表期望编码质量更优。λ越大,点越分布在图表左边(例如λ=7)。代表期望编码时间更优。
最后的分析就是针对上述的“前10%的Preset”的点进行分析的。其它没有列入的位于图表右上方的点都不在本次实验数据分析的范围内。由此可见本次实验数据主要分析图表中左下方的点(也就是性能比较好的Preset),取不同的λ,分析的点也不同。
实验结果
最终的分析结论如下列图所示。每种Option可以得到一张结果图,它的横坐标为λ(图上是Q/T),值越大,代表期望的时间更优(也就是希望更快一些,质量相对较差),值越小,代表期望质量更优(质量要好,时间相对较慢),纵坐标为百分比,代表每个Option Value占用的比例。
最终得到的各Option的分析结果如下表所示。
最终得到的分析结果如下表所示。下表分别列出了λ在不同取值范围内(取值越小,代表对质量要求高;取值大,代表对速度要求高;当然表中也包含了对应的Time和Bitrate)各个Option最适合的value。
距离凸包(Convex hull)的Preset分析
上一章介绍的“Lambda的Preset分析”方法,集中分析了位于实验数据图表左下方的Preset。这些Preset都属于比较“好”的Preset。要么质量高,要么速度快,要么不但质量高而且速度快。本章介绍的距离凸包的Preset分析和上一章有很大的不同。本章将要衡量所有的Preset。大体上的思想是将Preset分成不同“质量”的Preset:距离凸包近(位于左下方)的Preset属于“优秀生”;距离凸包远(位于右上方)的Preset则属于“差生”(例如位于右上方的Preset,不但质量低,而且速度慢)。最后得到不同的Preset的“质量”下各个Option的value的分布情况。
PS:凸包可以理解为包络线
算法不再细说。直接说一说实验中的图表。根据实验结果图表中各个Preset与凸包的距离,将不同的Preset分成了不同的类别。下图列出了1-10,11-20,21-30,31-40,41-50,51-60这些类别的Preset,并标记成了不同的颜色。绿色的点为不在这些类别中的Preset。
下图继续列出了62-70,71-80,81-90,91-100,101-110,111-120这些类别的Preset,并标记成了不同的颜色。
下图列出了不同类别的点的个数。可以看出后几个类别点的个数要稍微小一点。
最终分析的结论图如下图所示。每个Option对应一张图表。横坐标为上文所述的根据与凸包的距离而划分的类别,纵坐标为不同的Option value所占的比例。
最终得到的各Option的分析结果如下表所示。
不同视频序列的分析
本部分的主要目的是验证上文所述方法的合理性。上文所述的方法只使用了一个测试视频序列。而实际环境中视频的内容多种多样。因此必须确定本报告提出的方法也适用于其他的视频。否则本报告的研究就没有意义了。下面列出了3个标准测试视频序列的实验结果图:“bus”,“news”,“stefan”。简单描述一下图表的含义:每张图表对应一个测试视频序列的实验结果;除了包含该测试视频序列的实验结果之外,还包含了其他2个测试视频序列位于凸包(convex hull)上的点,并标记以不同的颜色。
从结果上来看,尽管视频的内容不同,它们位于凸包上的点的位置是趋近于一条包络线的。也就是说,“最佳Preset”不太受视频内容的影响(当然还是有一点点的,只是程度不大)。
本报告中使用的是“bus”测试视频序列的实验结果。
总结
本报告一共用了4种方法分析x264的选项:
1.使用凸包(convex hull)分析最佳Option。
2.使用“彩云图”分析Option。这种方法简单直观,但是无法精确的量化分析。
3.使用Lambda参数分析Option。这种方法可以分析Option的速度和质量的权衡。
4.使用凸包距离分析Option。这种方法可以分析“好”和“坏”的Option。
原文地址:http://compression.ru/video/codec_comparison/pdf/x264_options_analysis_08.pdf
x264 编码器选项分析 (x264 Codec Strong and Weak Points) 2的更多相关文章
- x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1
文章文件夹: x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1 x264 编码器选项分析 (x264 Codec Strong and Weak P ...
- x264源代码简单分析:编码器主干部分-1
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- x264源代码简单分析:编码器主干部分-2
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- ffmpeg源码分析五:ffmpeg调用x264编码器的过程分析 (转5)
原帖地址:http://blog.csdn.net/austinblog/article/details/25127533 该文将以X264编码器为例,解释说明FFMPEG是怎么调用第三方编码器来进行 ...
- x264源代码简单分析:x264命令行工具(x264.exe)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- x264源代码简单分析:熵编码(Entropy Encoding)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- x264源代码简单分析:宏块编码(Encode)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- x264源代码简单分析:宏块分析(Analysis)部分-帧内宏块(Intra)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
随机推荐
- js error
0x800a0259 - JavaScript 运行时错误: 未知的运行时错误 <p id="navigatorInfo"></p> var txt = & ...
- Deap Learning (吴恩达) 第一章深度学习概论 学习笔记
Deap Learning(Ng) 学习笔记 author: 相忠良(Zhong-Liang Xiang) start from: Sep. 8st, 2017 1 深度学习概论 打字太麻烦了,索性在 ...
- Python Selenium 之数据驱动测试
数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测 ...
- 使用 OpenCV 与 Face++ 人脸识别
今天看到一篇文章<使用 OpenCV 与 Face++ 实现人脸解锁>,感觉挺好玩,就照着作者的讲解,写了一下.详细内容还请看原作者文章. # *^_^* coding:utf-8 *^_ ...
- PHP 5 Math 函数
PHP Math 简介 Math 函数能处理 integer 和 float 范围内的值. 安装 PHP Math 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. PHP 5 Math 函 ...
- 什么是 Docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 ...
- Winform DevExpress控件库(二) 使用SplashScreenManager控件定制程序加载页面
SplashScreenManager控件:主要作用是显示在进行耗时操作时的等待界面: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下: 在工具 ...
- Bootstrap3 表格-紧缩表格
通过添加 .table-condensed 类可以让表格更加紧凑,单元格中的内补(padding)均会减半. <table class="table table-condensed&q ...
- Web Worker Best Practices
使用Web Worker可以把一些比较计算量相对大的阻塞浏览器响应的计算放在单独的线程里计算. 请求优化 构造Worker的时候需要给定js的链接URL,worker内部请求js运行代码.假如work ...
- java 里面保留字volatile及其与synchronized的区别
锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility).互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议, ...