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 ...
随机推荐
- avalon加载一闪而过现象
为了避免未经处理的原始模板内容在页面载入时在页面中一闪而过,我们可以使用以下样式(详见这里): .ms-controller,.ms-important,[ms-controller],[ms-i ...
- Redis开启远程登录连接
Redis 安装详见 http://www.cnblogs.com/zendwang/p/6560628.html 当前安装测试版本:Redis 3.2.8 默认安装完毕Redis只能本机访问 [ro ...
- mysql catalog的名字
def 算是一个一点卵用都没有的知识点 然后tmd各个版本不同 用这个语句查 SELECT * FROM information_schema.SCHEMATA where schema_name=' ...
- Gradle入门--基本配置
Gradle配置: Gradle构建脚本 build.gradle Gradle属性文件 gradle.properties Gradle设置文件 settings.gradle build.grad ...
- spring cloud 入门系列二:使用Eureka 进行服务治理
服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分 ...
- dubbo服务的发布和调用
Dubbo是分布式服务架构,是一个优秀的开源服务型框架,使得应用可以通过高性能的rpc实现服务的输入和输出功能.其实dubbo就是资源调度和治理中心的管理工具. 发布dubbo服务:在提供服务的应用中 ...
- sublime安装配置
http://www.sublimetext.com.cn/ 打华东师范大学校赛的时候,学长谈论到这个编辑器.自定义背景多行多光标同时编辑酷炫爆了.感觉这是一个万能的文本编辑器.通过配置可以写多种语言 ...
- Codeforces Round #417 (Div. 2)-A. Sagheer and Crossroad
[题意概述] 在一个十字路口 ,给定红绿灯的情况, 按逆时针方向一次给出各个路口的左转,直行,右转,以及行人车道,判断汽车是否有可能撞到行人 [题目分析] 需要在逻辑上清晰,只需要把所有情况列出来即可 ...
- Do a web framework ourselves
step 1: from wsgiref.simple_server import make_server def application(environ, start_response): star ...
- Java内存泄漏分析系列之七:使用MAT的Histogram和Dominator Tree定位溢出源
原文地址:http://www.javatang.com 基础概念 先列出几个基础的概念: Shallow Heap 和 Retained Heap Shallow Heap表示对象本身占用内存的大小 ...