x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1
文章文件夹:
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的Option非常繁多,怎样搭配这些繁多的參数以让编码后的视频体积小,质量好。同一时候编码速度快。确实是一个非常让人头疼的问题。本报告中的实验就是为了解决上述问题而设计的。
一.简单介绍
本文通过使用客观质量评价算法分析X264编码器的选项。
下表列出了文中用到的几个词汇。
简单翻译一下:
名称 |
定义 |
样例 |
Option(选项) |
编码选项 |
B帧数,运动预计算法 |
Option value(值) |
编码选项的值 |
--me(运动预计算法)包括以下值:”dia”, “hex”, “umh”, “esa”, “tesa” |
Preset(预设) |
由一系列固定Value(值)的Option(选项)组成的集合 |
|
Pareto-optimal Point (Preset) (帕累托最优的预设) |
没有不论什么其它Preset(预设)能够比该Preset获得更好的视频质量和更快的编码速度。 |
|
Envelope line Points (Preset) (包络线上的预设) |
位于Convex hull(凸包)上的预设。 代表了最好的预设。 |
|
Parameter λ(λ參数) |
代表期望的编码时间和码率的比值。 能够用下式表示: M=λT+Q 当中T代表了相对编码时间,Q代表了相对的视频质量。 |
二.选项(Option)和选项的值(Option value)
本报告分析的X264的Option例如以下所列。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
简单翻译一下:
选项 |
值 |
备注 |
Partitions(分块方式) --partitions x |
"none" "p8x8,b8x8,i8x8,i4x4" "all" |
宏块使用的分块方式。 默认值: |
B-Frames(B帧数) --bframes n |
0 2 4 |
I帧和P帧之间连续B帧出现的数量。 默认值:0 |
Reference Frames(參考帧数) --ref n |
1 4 8 |
參考帧的数量。 默认值:1 |
Motion Estimation Method(运动预计方法) --me x |
“dia” “hex” “umh” “tesa” |
运动预计的方法。具体见凝视。 默认值:“hex” |
Subpixel Motion Estimation(子像素运动预计) --subme n |
1 4 5 6 |
子像素(subpixel)估測复杂度。 默认值:5 |
Mixed References --mixed-refs |
off on |
默认值:off |
Weighted Prediction --weightb |
off on |
每一帧对B帧的影响力与其和该B帧的距离相关。 默认值:off |
注: 1.运动预计方法简单介绍 dia(diamond菱形搜索) 是最简单的搜索方式。从最优预測值出发,往上、左、下、右一个像素处检測运动向量。挑选最好值,然后反复该步骤,直至找不到更优的运动向量。 hex(hexagon正六角形搜索) 的策略相似,但它对周围六个点进行range-2搜索。因此称为正六角形搜索。 此方法效率大大高于dia,且速度相当。因此通常编码经常使用此项。 umh(uneven multi-hex不正确称多六角形搜索)比hex慢非常多,但能搜索复杂的多六角形,以避免错过非常难找到的运动向量。 与hex和dia相似。M.E.半径范围參数直接控制umh的搜索半径,使用者可自行增减搜索的空间尺寸。 2. 子像素运动预计 採用低于2的值,会使用一种较快、但较低质量的lookahead模式,同一时候会影响--scenecut的决策,因此不推荐。 |
三. 最佳Preset
下图显示了本次实验的所有结果。实验系统通过枚举上表所列參数的所有选项,而后进行压缩编码得到的实验结果。每个绿色的点代表一种Preset压缩的结果。可见实验的数据量非常大。
以下简单解释一下这张图的含义。纵坐标代表视频的码率,取值越低,代表同等视频质量的的情况下码率越小。横坐标代表视频的编码时间,取值越低。代表编码时间越低。坐标取值是一个相对值。
每个绿色的点代表一种Preset。因此可知。越是位于左下角的Preset,其编码速度越快。且码率越低。最优的Preset应该是位于凸包(Convex hull)上的点(即那条红颜色线上的点)。须要注意的是。横坐标和纵坐标都是一个相对值而不是绝对的码率和时间。
横坐标和纵坐标的值都是相比于X264的Default Preset而言的。
X264的Default Preset即X264所有使用默认值的Preset,位于这张图的(1,1)点处。
假设固定编码时间,则最优的Preset位于包络线上。
如图所看到的,位于粉红色五角星位置的Preset在同样的编码时间下码率最低。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
X264默认值例如以下表所看到的。
Option |
默认值 |
Partitions |
“p8x8,b8x8,i8x8,i4x4” |
B-Frames |
0 |
Reference Frames |
1 |
Motion Estimation Method |
“hex” |
Subpixel Motion Estimation |
5 |
Mixed References |
off |
Weighted Prediction |
off |
下图显示了Pareto-optimal Point(帕累托最优点)Preset(即没有不论什么其它Preset能够比该Preset获得更好的视频质量和更快的编码速度)以及凸包(Convex hull)上的Preset。
凸包(Convex hull)上的Preset数据统计例如以下。
凸包(Convex hull)上的Preset分析结果例如以下。表格中一方面列出了凸包(Convex hull)上的Preset使用较多的Option以及使用较少的Option。还有一方面列出了消耗时间较长可是质量较高的Preset以及速度较快可是质量较差一些的Preset。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
四. “彩云图”的Preset分析
本章中,每张图相应一种关注的Option,包括不同Option Value的 Preset被标记为不同的颜色。实验结果例如以下所看到的。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
从以上图表能够得出的各个Option的分析结果例如以下表所看到的。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
简单翻译一下:
选项 |
值 |
结论 |
Partitions(分块方式) --partitions x |
"none" "p8x8,b8x8,i8x8,i4x4" "all" |
要求速度快的时候用”none”。要求视频质量高的时候用”all”。 要求速度质量均衡考虑的时候使用"p8x8,b8x8,i8x8,i4x4" |
B-Frames(B帧数) --bframes n |
0 2 4 |
要求速度极高的时候用”0”。其它情况下用”2”,”4”。它们二者之间区别不大。 |
Reference Frames(參考帧数) --ref n |
1 4 8 |
要求速度快的时候用”1”,要求视频质量极高的时候用”8”。 要求速度质量均衡考虑的时候使用"4" |
Motion Estimation Method(运动预计方法) --me x |
“dia” “hex” “umh” “tesa” |
要求速度快的时候用”dia”和”hex”,要求视频质量极高的时候用”tesa”。要求速度质量均衡考虑的时候使用"umh"。 |
Subpixel Motion Estimation(子像素运动预计) --subme n |
1 4 5 6 |
要求速度快的时候用”1”。要求视频质量高的时候用”6”。 要求速度质量均衡考虑的时候使用"4" |
Mixed References --mixed-refs |
off on |
|
Weighted Prediction --weightb |
off on |
注1:“Weighted prediction”作用不明显
注2:“bframes”中的2和 4 B-frames区别不大。
“彩云图”的分析结论例如以下表所看到的。该表列出了不同的使用环境下Option应该使用的值(Option value)。分成三种情况:速度最重要,速度和视频质量平均考虑。视频质量最重要。
原文地址:
http://compression.ru/video/codec_comparison/pdf/x264_options_analysis_08.pdf
x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1的更多相关文章
- x264 编码器选项分析 (x264 Codec Strong and Weak Points) 2
文章目录: x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1 x264 编码器选项分析 (x264 Codec Strong and Weak Po ...
- 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 ...
随机推荐
- Python 学习之urllib模块---用于发送网络请求,获取数据(2)
接着上一次的内容. 先说明一下关于split()方法:它通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串(把一个字符串分割成很多字符串组成的list列表) 语法: ...
- VC皮肤库之duilib
首先是个国产的开源 的,directui 界面库,开放,共享,惠众,共赢,遵循bsd协议,可以免费用于商业项目,目前支持Windows 32 .Window CE.Mobile等平台. Duilib ...
- dictionary ----- python
Learn of dictionary,simple example of dictionary in “Simple Python tutorial"------------------ ...
- tomcat发布静态网页
- [BZOJ 1014] [JSOI2008] 火星人prefix 【Splay + Hash】
题目链接:BZOJ - 1014 题目分析 求两个串的 LCP ,一种常见的方法就是 二分+Hash,对于一个二分的长度 l,如果两个串的长度为 l 的前缀的Hash相等,就认为他们相等. 这里有修改 ...
- [UOJ 74] 【UR #6】破解密码
题目链接:UOJ - 74 题目分析 题目中,将字符串 S 的第一个字符移到末尾,其他字符向前移动一个位置,f(S) 就从 Hi 变成了 Hi+1. 我们分析一下这个过程:假设第一个字符为 c, (H ...
- dispatch队列
GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用.所以说,结合bloc ...
- The Lost Art of C Structure Packing
对齐要求 首先需要了解的是,对于现代处理器,C编译器在内存中放置基本C数据类型的方式受到约束,以令内存的访问速度更快. 在x86或ARM处理器中,基本C数据类型通常并不存储于内存中的随机字节地址.实际 ...
- 【poj1087/uva753】A Plug for UNIX(最大流)
A Plug for UNIX Description You are in charge of setting up the press room for the inaugural meeti ...
- java rest版简单的webservice
目前的webservice风格,rest应该是其中一种 还有种就是soap,rest是轻量级的,越来越流行.下面举一个简单例子说明下rest的用法. 1. 准备ws的jar和spring的jar,如何 ...