x264 编码器选项分析 (x264 Codec Strong and Weak Points) 1

本文通过实验分析了x264编码器的各种选项及其对视频质量和编码速度的影响,给出了不同使用场景下的最佳配置建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录:

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如下所列。
 

 
简单翻译一下:

选项

备注

Partitions(分块方式)

--partitions x

"none"

"p8x8,b8x8,i8x8,i4x4"

"all"

宏块使用的分块方式。

默认值:
"p8x8,b8x8,i8x8,i4x4"

 

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的搜索半径,使用者可自行增减搜索的空间尺寸。
  esa(exhaustive全面搜索) 在最优预测值附近M.E.半径范围范围内的整个空间内,以高度优化的智能方式搜索运动向量。相当于数学上的穷举法,搜索区域内的每一个运动向量,但是更快些。然而,此方法远远慢于UMH,且好处不多,对于普通编码没有太大用处。
  tesa (transformed exhaustive变换全面搜索)算法尝试对各个运动向量近似哈达玛变换比较法。与exhaustive类似,但效果略好,速度略慢。
2. 子像素运动估计
子像素(subpixel)估测复杂度,越大越好。数值1-5单纯控制子像素细化强度。数值6会开启模式决策RDO,数值8将开启运动向量和内部预测模式RDO。RDO模式大幅慢于低级模式。
采用低于2的值,会使用一种较快、但较低质量的lookahead模式,同时会影响--scenecut的决策,因此不推荐。
可选值:
0. fullpel only
1. QPel SAD 1 iteration
2. QPel SATD 2 iterations
3. HPel on MB then QPel
4. Always QPel
5. Multi QPel + bi-directional motion estimation
6. RD on I/P frames
7. RD on all frames
8. RD refinement on I/P frames
9. RD refinement on all frames
10. QP-RD (requires --trellis=2, --aq-mode > 0)
11. Full RD 


三. 最佳Preset

下图显示了本次实验的全部结果。实验系统通过枚举上表所列参数的所有选项,而后进行压缩编码得到的实验结果。每一个绿色的点代表一种Preset压缩的结果,可见实验的数据量很大。

下面简单解释一下这张图的含义。纵坐标代表视频的码率,取值越低,代表同等视频质量的的情况下码率越小。横坐标代表视频的编码时间,取值越低,代表编码时间越低。坐标取值是一个相对值。每一个绿色的点代表一种Preset。因此可知,越是位于左下角的Preset,其编码速度越快,且码率越低。最优的Preset应该是位于凸包(Convex hull)上的点(即那条红颜色线上的点)。需要注意的是,横坐标和纵坐标都是一个相对值而不是绝对的码率和时间。横坐标和纵坐标的值都是相比于X264的Default Preset而言的。X264的Default Preset即X264全部使用默认值的Preset,位于这张图的(1,1)点处。

如果固定编码时间,则最优的Preset位于包络线上。如图所示,位于粉红色五角星位置的Preset在相同的编码时间下码率最低。


 
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。
 

四. “彩云图”的Preset分析

本章中,每张图对应一种关注的Option,包含不同Option Value的 Preset被标记为不同的颜色。实验结果如下所示。







 
 
从以上图表可以得出的各个Option的分析结果如下表所示。
 
简单翻译一下:

选项

结论

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

 
### Weak-to-Strong 3D Object Detection Using X-Ray Distillation X-ray distillation 是一种用于提升模型性能的技术,在计算机视觉领域中被广泛应用于从弱监督学习到强监督学习的任务转换。对于三维物体检测而言,这种方法可以通过利用标注较少的数据集来训练初始模型,并逐步增强其能力以适应更复杂的场景。 #### 方法概述 在 weak-to-strong 的框架下,X-ray distillation 主要通过以下几个方面实现: 1. **数据预处理与特征提取** 初始阶段通常依赖于大量未标注或部分标注的二维图像作为输入源[^1]。这些图像经过初步处理后,会生成对应的伪标签(pseudo-labels),从而构建起一个基础的三维空间表示。此过程可以借助现有的成熟算法完成,例如基于单目相机估计深度图或者使用多视角几何重建技术[^2]。 2. **教师-学生架构设计** 整体流程采用 teacher-student learning paradigm 来促进知识迁移。具体来说,“teacher model”是在高质量但数量有限的真实世界三维标注上训练而成;而“student model”,则主要依靠上述提到的大规模低质量甚至无标记样本进行优化调整[^3]。两者之间的交互方式即为所谓的 “distillation”。 ```python import torch.nn as nn class TeacherModel(nn.Module): def __init__(self, input_dim=3, output_dim=80): super(TeacherModel, self).__init__() self.layers = nn.Sequential( nn.Conv3d(input_dim, 64, kernel_size=(7, 7, 7), stride=(2, 2, 2)), ... ) def forward(self, x): return self.layers(x) class StudentModel(nn.Module): def __init__(self, input_dim=3, output_dim=80): super(StudentModel, self).__init__() self.layers = nn.Sequential( nn.Conv3d(input_dim, 32, kernel_size=(5, 5, 5), stride=(1, 1, 1)), ... ) def forward(self, x): return self.layers(x) ``` 3. **损失函数定义** 针对学生网络的学习目标,除了传统的分类交叉熵外还需要引入额外项用来衡量预测分布与老师输出的一致程度。常见的做法有 KL-divergence 或者 mean squared error (MSE)[^4]: \[ L_{total} = L_{cls}(y,\hat{y}) + \lambda * D(\text{{Teacher Output}},\text{{Student Output}}) \] 其中 \(L_{cls}\) 表示类别预测误差,\(D\) 可选自不同距离度量方法之一,参数 \(\lambda\) 控制二者权重平衡关系。 4. **迭代改进机制** 随着 student 模型逐渐接近 teacher 性能水平,则可进一步将其视为新的 teacher 并重复整个循环直至收敛为止[^5]。这种不断自我强化的过程有助于最终获得具备较强泛化能力和鲁棒性的解决方案。 --- #### 实验验证与应用前景 实验表明,该策略能够有效缓解传统端到端训练过程中因缺乏充分优质资源而导致的效果瓶颈问题[^6]。特别是在自动驾驶、医疗影像分析等领域内,当面临昂贵的人工标注成本时显得尤为重要。 尽管如此,仍需注意某些潜在挑战比如如何合理设置超参组合以及防止过拟合现象发生等问题都需要深入探讨研究。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值