我是靠谱客的博主 怡然电脑,这篇文章主要介绍H264编码常用参数整理,现在分享给大家,希望可以做个参考。

1.Profile
profile是代表编码器能力的,一般有BP、MP、HP。越高级的profile性能需求越强。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
typedef enum VENC_H264PROFILETYPE { VENC_H264ProfileBaseline = 66, /**< Baseline profile */ VENC_H264ProfileMain = 77, /**< Main profile */ VENC_H264ProfileHigh = 100, /**< High profile */ }VENC_H264PROFILETYPE;
  • Baseline
    I/P 帧、CAVLC,无交错(Progressive),不支持CABAC。
    一般用于实时通讯,比如视频通话等;

  • Main
    兼容Baseline,支持I/P/B 帧,支持无交错(Progressive)和交错(Interlaced)、CAVLC 和CABAC 、支持interlaced 场视频格式、加权预测。
    常用于流媒体,比如网络视频播放,mp4等媒体设备。

  • High
    兼容Main Profile,支持8x8 transform内部预测等功能。
    用于较高的商业场合,比如蓝光、电影、高清电视等。

CAVLC :基于上下文的自适应可变长编码。CABAC:基于上下文的自适应二进制算术编码。CAVLC是低质量的,易于解码的选项,CABAC是高质量的,难于解码的选项。> 通常来说CABAC被认为比CAVLC效率高5%-15%。

2.level
对应不同的分辨率、比特率、宏块数和帧率等。level越高,对应级别越大。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
typedef enum VENC_H264LEVELTYPE { VENC_H264Level1 = 10, /**< Level 1 */ VENC_H264Level11 = 11, /**< Level 1.1 */ VENC_H264Level12 = 12, /**< Level 1.2 */ VENC_H264Level13 = 13, /**< Level 1.3 */ VENC_H264Level2 = 20, /**< Level 2 */ VENC_H264Level21 = 21, /**< Level 2.1 */ VENC_H264Level22 = 22, /**< Level 2.2 */ VENC_H264Level3 = 30, /**< Level 3 */ VENC_H264Level31 = 31, /**< Level 3.1 */ VENC_H264Level32 = 32, /**< Level 3.2 */ VENC_H264Level4 = 40, /**< Level 4 */ VENC_H264Level41 = 41, /**< Level 4.1 */ VENC_H264Level42 = 42, /**< Level 4.2 */ VENC_H264Level5 = 50, /**< Level 5 */ VENC_H264Level51 = 51, /**< Level 5.1 */ }VENC_H264LEVELTYPE;

参考:H264 Profile和Level

3.QPRange

复制代码
1
2
3
4
5
6
7
typedef struct VencQPRange { int nMaxqp; int nMinqp; }VencQPRange;

QP:量化参数 quantization parameter。DCT时的量化参数大小。QP数值越大,失真越多,压缩越好,画质越差。
参考:QP量化参数详解
QP 区间。QP值对应量化步长的序号,对于亮度取值0-51, 对于色度取值0~39。
值越小,量化步长越小,量化的精度就越高,意味着同样画质的情况下,产生的数据量可能会更大。QP值每增加6,量化步长就增加一倍。

  • nMinqp 最小量化步长
    设置x264可以使用的最小量化器。量化参数越小,输出越接近输入。使用某些值时,x264的输出可以和输入看起来完全一样,虽然其实并不是精确相同的,通常就够了没有必要使用更多比特在宏块上了。如果开启了自适应量化器(默认开启),则不鼓励提高qpmin的值,那样可能会降低帧的平坦部分的质量。
  • nMaxqp 最大量化步长
    qpmin的反面,设置x264可以使用的最大量化器。默认值51是H.264标准中的最大值,质量非常低。默认值51其实相当于没有设置qpmax。如果你想控制x264输出的最低品质,也许你想要把这个值调低一点(调到30-40最低了),但一般而言不推荐调节这个值。

4.MotionParam
移动侦测的参数。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct MotionParam { int nMotionDetectEnable; int nMotionDetectRatio; /* 0~12, advise set 0 */ int nStaticDetectRatio; /* 0~12, should be larger than nMotionDetectRatio, advise set 2 */ int nMaxNumStaticFrame; /* advise set 4 */ double nStaticBitsRatio; /* advise set 0.2~0.3 at daytime, set 0.1 at night */ double nMV64x64Ratio; /* advise set 0.01 */ short nMVXTh; /* advise set 6 */ short nMVYTh; /* advise set 6 */ }MotionParam;

运动补偿包括全局运动补偿 和 分块运动补偿两类。
全局运动补偿,反映摄像机的各种运动,包括平移,旋转,变焦等等。这种模型特别适合对静止场景的编码。 分块运动补偿,每帧被分为若干像素块
(在大多数视频编码标准,如MPEG中,是分为16x16的像素块)。从参考帧的某个位置的等大小的块对当前块进行预测,预测的过程中只有平移,平移的大小被称为运动矢量。比如一固定物体从画面的一端移动到另一端。

5.FixQP
固定 QP 参数,不使用码率控制,固定 QP。

复制代码
1
2
3
4
5
6
7
8
9
typedef struct VencH264FixQP { int bEnable; int nIQp; int nPQp; }VencH264FixQP;
  • bEnable
    0:码率控制固定QP模式关闭;1:码率控制估计QP模式打开;

  • nIQp
    int I 帧的 QP(0~51);

  • nPQp
    int P 帧的 QP(0~51);

6.CodingMode
编码模式

复制代码
1
2
3
4
5
6
7
typedef enum VENC_CODING_MODE { VENC_FRAME_CODING = 0, VENC_FIELD_CODING = 1, }VENC_CODING_MODE;

帧编码与场编码:
在帧编码中,参考为帧图像,采用帧运动补偿,两个场是联合编码;在场编码中,参考为场图像,两个场是分别编码,采用场运动补偿。
场编码适用场合:对于运动激烈的情况,也就是画面变化快,画面中的人物、背景等等短时间里就会有很大的变化。这样,如果使用帧编码,由于相邻两行(一行在顶场,一行在底场)的扫描时间相差了许多(因为是隔行扫描),那么由于变化剧烈(画面在短时间内就会产生很大的差异),相邻行没有太多的相关性。而对于场图像来说,相邻行的扫描时间非常短,所以即使运动剧烈,但还是有很强的时间相关性。所以在这种情况下用场编码,就能去除时间上的冗余。
帧编码适用场合:对于相对静止没有什么变化的情况应该相对好理解,因为画面内容没有太大的变化,扫描时间的长短并不影响相关性。倒是帧场的相邻行由于是真正意义上的相邻,所以空间相关性肯定要比场的相邻行(其实是隔行)的空间相关性要大。那么在这种情况下使用帧编码,就能去除空间上的冗余。

7.ROI
感兴趣区域

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct VencROIConfig { int bEnable; int index; /* (0~3) */ int nQPoffset; unsigned char roi_abs_flag; VencRect sRect; }VencROIConfig;

ROI(Region of Interest)是指图像中的指定需要特殊关注或处理的区域。

  • nQPoffset
    ROI 区域的 QP 为码率控制产生 的 QP 与 用 户 设 定 的nQPoffset 的差;例如:一帧图像使用固定 QP=30;nQPoffset = 10;那么 ROI 区域的 QP 为:30 - 10 = 20;

8.AspectRatio
VUI 扩展选项,对播放视频时的显示比例进行限制。

复制代码
1
2
3
4
5
6
7
8
typedef struct VencH264AspectRatio { unsigned char aspect_ratio_idc; unsigned short sar_width; unsigned short sar_height; }VencH264AspectRatio;
  • aspect_ratio_idc
    取值 255,表示启用自定义显示比例;
  • sar_width 显示比例宽度;
  • sar_height 显示比例高度;

一 般 把aspect_ratio_idc 设为 255,显示 比 例 取 sar_width 和sar_height 的比值。

9.SVCSkip
时域可伸缩编码及跳帧,不能与插帧混用。

复制代码
1
2
3
4
5
6
7
8
9
10
11
typedef struct VencH264SVCSkip { T_LAYER nTemporalSVC; SKIP_FRAME nSkipFrame; int bEnableLayerRatio; unsigned int nLayerRatio[4]; }VencH264SVCSkip;
  • nTemporalSVC:时域分层数,取值0/2/3/4。
  • nSkipFrame:跳帧倍数
    取 值0/2/4/8。若 nTemporalSVC为 0,则可独立使用;否则没意 义, 实 际 跳 帧 受nTemporalSVC 控制。
    关于SVC可参考H.264 SVC。

最后

以上就是怡然电脑最近收集整理的关于H264编码常用参数整理的全部内容,更多相关H264编码常用参数整理内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部