跳转至

智能编码使用指导

前言

概述

本文档主要介绍H264、H265和SVAC3.0协议智能编码相关内容。智能编码主要包含四部分内容:

  • 第一部分是GOP结构,不同的GOP结构适合不同的场景,GOP结构可以动态设置,对不同的场景选择合适的GOP结构能够优化编码性能;
  • 第二部分是编码器输入信息,编码器输入信息接口可以和其他的智能分析模块联动,对智能分析出的感兴趣区域或重要区域,使用QpMap进行保护,或结合客户自己的算法做出更好的码率控制;
  • 第三部分是编码器输出信息,客户可以根据编码器输出信息,给智能分析算法提供更多可参考的输入;
  • 第四部分是Cyclic Intra Refresh,此技术不编码IDR帧,在P帧中周期性的编码I宏块,在特殊的应用场景实现码率平滑。

产品版本

与本文档相对应的产品版本如下。

产品名称

产品版本

Hi3519D

V500

Hi3516D

V500

Hi3516C

V608

Hi3516C

V610

Hi3511C

V100

读者对象

本文档(本指南)主要适用于以下工程师:

  • 技术支持工程师
  • 软件开发工程师

修订记录

修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。

文档版本

发布日期

修改说明

00B01

2026-06-30

第1次临时版本发布。

GOP结构和适用场景

GOP模式名词解释

表 1 GOP模式术语

GOP模式

P帧同时可参考的参考帧帧数

备注

NormalP

1

P帧只参考一个参考帧。

SmartP

2

P帧参考一个长期参考帧和一个短期参考帧。

DualP

2

P帧参考两个参考帧。

BiPredB

2

  • P帧参考两个参考帧;
  • B帧参考一个前向参考帧和一个后向参考帧。

NormalP模式GOP结构说明及使用方法

说明: NormalP是最通常的一种GOP结构,如果没有特殊说明,_我司_所有芯片均支持这一模式。

结构说明

  • NormalP参考关系很简单,每个P帧参考一个前向参考帧。
  • NormalP对使用场景没有要求,任何场景都可以使用。

NormalP模式GOP结构,如图1所示。

图 1 NormalP模式GOP结构

使用方法

【相关接口】

ss_mpi_venc_create_chn

【相关参数】

ot_venc_chn_attr::gop_attr.gop_mode = OT_VENC_GOP_MODE_NORMAL_P

ot_venc_chn_attr::gop_attr.normal_p.ip_qp_delta推荐设为3,值越大I帧越大,I帧质量越好。

DualP模式GOP结构说明及使用方法

结构说明

  • 其中:SP指特殊的P帧,这里简称SP帧,该帧Qp值推荐小于其他P帧Qp值,sp_interval=0指不支持SP帧。
  • DualP模式下P帧参考就近的两个前向参考帧,能够利用更多参考帧的时域相关性提升编码压缩性能。主要应用在运动且有低延时要求的场景,DualP压缩性能低于BiPredB模式但高于NormalP模式。DualP由于两个参考帧均使用前向参考帧,因此不存在编码和解码延时。

DualP模式GOP结构,如图1所示。

图 1 DualP模式GOP结构

使用方法

【相关接口】

ss_mpi_venc_create_chn

【相关参数】

  • ot_venc_chn_attr::gop_attr.gop_mode = OT_VENC_GOP_MODE_DUAL_P
  • 可以通过周期性的编码质量更好的P帧(即SP帧),优化图像质量。

    SP帧间隔可以通过ot_venc_chn_attr::gop_attr.dual_p.sp_interval参数设置。

SmartP模式GOP结构说明及使用方法

结构说明

SmartP模式下P帧参考IDR帧(长期参考帧)和前向参考帧(短期参考帧),利用两个参考帧的时域相关性提升编码压缩性能。主要应用在_录像机_镜头固定场景。

此场景的特点是_录像机_固定安装,场景中的人和物体有静止有运动。

  • 在静止区域,利用长期参考帧和当前帧的时域相关性可以大幅降低码率,并减少呼吸效应和拖尾效应;
  • 在运动区域,利用短期参考帧进行运动估计。SmartP模式拉长IDR帧间隔,中间定期插入虚拟I帧,能够大幅度降低_录像机_镜头固定场景的码率并提升图像质量,码率节省可以达到30%~50%,但对于_录像机_镜头有相对运动的场景不适用。

SmartP模式GOP结构,如图1所示。

图 1 SmartP模式GOP结构

使用方法

【相关接口】

ss_mpi_venc_create_chn

【相关参数】

  • ot_venc_chn_attr::gop_attr.gop_mode = OT_VENC_GOP_MODE_SMART_P
  • ot_venc_chn_attr::gop_attr.smart_p.bg_interval = 1200; // 30fps, 40seconds
  • ot_venc_chn_attr::gop_attr.smart_p.bg_qp_delta= 7
  • ot_venc_chn_attr::gop_attr.smart_p.vi_qp_delta = 2
  • ot_venc_chn_attr::rc_attr.gop = 30; // virtual I interval
  • ot_venc_chn_attr::rc_attr.stats_time = 40; // 40 second

BiPredB模式GOP结构说明及使用方法

结构说明

说明:

此小节Hi3519DV500/Hi3516DV500/Hi3516CV610不支持。 Hi3511CV00仅SVAC3.0支持B帧。

  • 其中:b_frame_num指IDR帧和P帧或P帧和P帧之间B帧的个数,如图1中b_frame_num = 2,每个Gop的最后一帧一定是P帧,之前的B帧个数可能不满足b_frame_num要求。
  • BiPredB模式相邻两个P帧中支持插入1~3个B帧,B帧不做参考,使用一个前向参考帧和一个后向参考帧。对于运动场景,双向预测能够更好的做运动估计并且可以支持加权预测,可以提升编码器的压缩性能。

BiPredB模式GOP结构,如图1所示。

图 1 BiPredB模式GOP结构

使用方法

【相关接口】

ss_mpi_venc_create_chn

【相关参数】

  • ot_venc_chn_attr::gop_attr.gop_mode = OT_VENC_GOP_MODE_BIPRED_B
  • ot_venc_chn_attr::gop_attr. bipred_b.b_frame_num = 2
  • ot_venc_chn_attr::gop_attr. bipred_b.ip_qp_delta = 3
  • ot_venc_chn_attr::gop_attr. bipred_b.b_qp_delta = -2

Cyclic Intra Refresh原理和使用方法

原理

一般场景IDR帧大小会超出P帧很多倍,特别是运动比较小的场景,IDR帧可能达到P帧的几十至上百倍。在网络传输特别是无线传输的时候,IDR帧会引起瞬时网络冲击造成丢帧及增大延时。一般编码技术可以通过增大IDR帧的QP来降低IDR帧大小,但同时会降低IDR帧质量引起呼吸效应。Cyclic Intra Refresh不改变IDR帧质量,把本来一个IDR帧编码的Intra LCU/宏块分散在若干个P帧中,使每一个帧的大小相对平均。如图1所示,使用Cyclic Intra Refresh技术,在_录像机_镜头固定场景下1080P@25fps在4Mbps码率的最大帧大小可以从200k字节降低到37k字节。使码率非常平稳。

图 1 Cyclic Intra Refresh效果

使用方法

【相关接口】

ss_mpi_venc_set_intra_refresh

【相关参数】

  • ot_venc_intra_refresh::enable = TD_TRUE
  • ot_venc_intra_refresh::mode = OT_VENC_INTRA_REFRESH_ROW ;//宏块/LCU按行刷新
  • ot_venc_intra_refresh::refresh_num; // 每帧刷新宏块/LCU行数
  • ot_venc_intra_refresh::request_i_qp; // 请求I帧时使用的QP

  • 优势

  • 使用限制

优势
  • 码率非常平稳,对网络的冲击小,适合用于无线网络传输环境;
  • 编码、解码及网络延迟非常小;
  • 不会降低I帧质量,不会引起严重的呼吸效应。
使用限制
  • 由于Intra LCU/宏块分布在几个P帧中,所以播放视频最开始的几帧是不完整的;
  • 对解码器有兼容性要求,必须支持没有IDR帧的码流的解码;
  • 只支持NormalP的GOP结构,其他GOP结构不支持。
  • 该技术主要针对码率平稳要求高的场景,并不会降低码率,对低码率场景不适用。

GOP结构内存占用、延时、适用场景及兼容性

说明:

  • PicSize为参考帧帧存(图像格式为YUV420格式)。
  • PicSize的计算方法下面将详细描述。
  • SrcPicSize为编码之前的源图像大小,主要是B帧有延时需要缓存一部分源图像。
  • BiPredB模式编码端和解码端都有延时,其他模式编码端和解码端都不存在延时。

表 1 内存占用、延时及适用场景

GOP模式

DDR占用

Delay

适用场景

H.264&H.265&SVAC3.0 Enc

H.264&H.265&SVAC3.0 Dec

H.264&H.265&SVAC3.0 Enc

H.264&H.265&SVAC3.0 Dec

NormalP

2 * PicSize

2 * PicSize

NA

NA

一般场景

SmartP

3 * PicSize

3 * PicSize

NA

NA

录像机镜头固定不动场景

DualP

3 * PicSize

3 * PicSize

NA

NA

录像机镜头有相对运动场景。如行车记录仪,手持DV等。

BiPredB

(N为B帧个数)

3*PicSize+N*SrcPicSize

3 * PicSize

N frames

1 frame

录像机镜头有相对运动场景。如行车记录仪,手持DV等。

PicSize的计算方式

  • 编码帧存(参考帧和重构帧)每块VB大小计算方式如下:

    PicSize= YHeaderSize + CHeaderSize + YSize + CSize +PmeSize + PmeInfoSize+TmvSize + NbiUpSize

  • 帧存大小各子项计算方法请参考文档《MPP 媒体处理软件Vx.y 开发参考》的“视频编码”章节。

兼容性

后端产品兼容性,如表1所示。

表 1 后端产品兼容性

-

H264 Decoder

H265 Decoder

Hi3519DV500/

/Hi3516DV500/Hi3516CV610/Hi3511CV100

Hi3511CV100

H.264

H.265

H.264/H.265

SVAC3.0

NormalP

Yes

Yes

Yes

Yes

SmartP

Yes

Yes

Yes

Yes

DualP

Yes

Yes

Yes

Yes

BiPredB

No

Yes

No

Yes

Cyclic Intra Refresh

Yes

Yes

Yes

Yes

编码器输入信息

QpMap/SkipMap接口定义

QpMap编码方案总体设计系统框图,如图1所示。

图 1 QpMap编码方案总体设计

方案实现细节和注意事项:

  • 为了保证每帧的SrcPic和QpMap能够保持同步,方案需要在用户态App完成,App通过用户态从VI/VPSS取走图像,经过智能分析和帧级码率控制,计算一帧内每个宏块的QpMap,再把SrcPic和QpMap通过send_frame_ex接口配置下来;SDK内部Bypass帧率控制和帧级码率控制;智能分析和帧级码率控制算法客户自己开发。
  • SDK内部不会有图像和码流缓存,但是调度的延迟不可避免;方案的性能和延迟客户自行评估。
  • H.264、H.265都按照16x16的块大小配置QpMap,但H.265的编码CU可能大于16x16,因此同一个CU可能对应有几个不同QP值,SDK提供接口,在这种情况支持从以下3种模式中选择一种。

    • 取多个QP的最大值
    • 取多个QP的最小值
    • 取多个QP的平均值
  • QpMap的配置,支持相对Qp和绝对Qp两种模式。

    • 相对Qp指的是基于编码器内部逻辑计算的码控(宏块级)仍然生效,外部通过QpMap输入Qp大小是一个变化量Qpdelta,在原始码控(宏块级)基础上,叠加该Qpdelta。
    • 绝对Qp指的是每一个编码块的Qp完全是由用户外部输入确定,不依赖于内部宏块级码控算法。
  • 编码器内部的重编码和丢帧机制可能无法使用。

  • SDK可以提供每帧图像的如下信息。

    • ISP相关信息;
    • 前一帧编码字节数。
  • QPMAP 表内存排布方式

QPMAP 表内存排布方式

QPMAP表,H.265和H.264编码基本单元不同,所以QP排列方式不同。H.264编码和H.265编码QP值的组织方式如图1和图2所示,SVAC3.0排布方式和H.265相同。

图 1 H.265 QPMAP LCU排放位置

图 2 H.264 QPMAP MB排放位置

编码接口定义

码率控制接口

typedef enum {
    OT_VENC_RC_MODE_H264_ABR = 1,
    OT_VENC_RC_MODE_H264_CBR,
    OT_VENC_RC_MODE_H264_VBR,
    OT_VENC_RC_MODE_H264_AVBR,
    OT_VENC_RC_MODE_H264_QVBR,
    OT_VENC_RC_MODE_H264_CVBR,
    OT_VENC_RC_MODE_H264_FIXQP,
    OT_VENC_RC_MODE_H264_QPMAP,
    OT_VENC_RC_MODE_H264_RANGEQP,
    OT_VENC_RC_MODE_MJPEG_CBR,
    OT_VENC_RC_MODE_MJPEG_VBR,
    OT_VENC_RC_MODE_MJPEG_FIXQP,
    OT_VENC_RC_MODE_H265_ABR,
    OT_VENC_RC_MODE_H265_CBR,
    OT_VENC_RC_MODE_H265_VBR,
    OT_VENC_RC_MODE_H265_AVBR,
    OT_VENC_RC_MODE_H265_QVBR,
    OT_VENC_RC_MODE_H265_CVBR,
    OT_VENC_RC_MODE_H265_FIXQP,
    OT_VENC_RC_MODE_H265_QPMAP,
    OT_VENC_RC_MODE_H265_RANGEQP,
    OT_VENC_RC_MODE_SVAC3_ABR,
    OT_VENC_RC_MODE_SVAC3_CBR,
    OT_VENC_RC_MODE_SVAC3_VBR,
    OT_VENC_RC_MODE_SVAC3_AVBR,
    OT_VENC_RC_MODE_SVAC3_QVBR,
    OT_VENC_RC_MODE_SVAC3_CVBR,
    OT_VENC_RC_MODE_SVAC3_FIXQP,
    OT_VENC_RC_MODE_SVAC3_QPMAP,
    OT_VENC_RC_MODE_SVAC3_RANGEQP,
    OT_VENC_RC_MODE_BUTT,
}ot_venc_rc_mode;
typedef struct {
    ot_venc_rc_mode rc_mode;
    union {
        ot_venc_h264_abr   h264_abr;
        ot_venc_h264_cbr   h264_cbr;
        ot_venc_h264_vbr   h264_vbr;
        ot_venc_h264_avbr  h264_avbr;
        ot_venc_h264_qvbr  h264_qvbr;
        ot_venc_h264_cvbr  h264_cvbr;
        ot_venc_h264_fixqp h264_fixqp;
        ot_venc_h264_qpmap h264_qpmap;
        ot_venc_h264_rangeqp h264_rangeqp;

        ot_venc_mjpeg_cbr   mjpeg_cbr;
        ot_venc_mjpeg_vbr   mjpeg_vbr;
       ot_venc_mjpeg_fixqp mjpeg_fixqp;

        ot_venc_h265_abr   h265_abr;
        ot_venc_h265_cbr   h265_cbr;
        ot_venc_h265_vbr   h265_vbr;
        ot_venc_h265_avbr  h265_avbr;
        ot_venc_h265_qvbr  h265_qvbr;
        ot_venc_h265_cvbr  h265_cvbr;
        ot_venc_h265_fixqp h265_fixqp;
        ot_venc_h265_qpmap h265_qpmap;
        ot_venc_h265_rangeqp h265_rangeqp;

        ot_venc_svac3_abr   svac3_abr;
        ot_venc_svac3_cbr   svac3_cbr;
        ot_venc_svac3_vbr   svac3_vbr;
        ot_venc_svac3_avbr  svac3_avbr;
        ot_venc_svac3_qvbr  svac3_qvbr;
        ot_venc_svac3_cvbr  svac3_cvbr;
        ot_venc_svac3_fixqp svac3_fixqp;
        ot_venc_svac3_qpmap svac3_qpmap;
        ot_venc_svac3_rangeqp svac3_rangeqp;
    };
} ot_venc_rc_attr;
  • QpMap使用Adaptive ROI方式,RC模式使用CBR或VBR,同时QpMap使用相对QP模式;
  • QpMap使用外部码率控制,RC模式使用QpMap,bypass内部RC算法,此时帧级码率控制和宏块级码率控制都由外部实现。

编码发送图像接口

typedef struct {
    td_bool qpmap_valid;
    td_bool skip_weight_valid;
    td_u32  blk_start_qp;
    td_phys_addr_t qpmap_phys_addr;
    td_phys_addr_t skip_weight_phys_addr;
    ot_venc_frame_type frame_type;
} ot_venc_user_rc_info;
typedef struct {
    ot_video_frame_info user_frame;
    ot_venc_user_rc_info user_rc_info;
    ot_venc_user_roimap user_roimap;
} ot_venc_user_frame_info;
/*-1:block  0:nonblock   >0 : overtime   */
td_s32 ss_mpi_venc_send_frame_ex(ot_venc_chn chn, const ot_venc_user_frame_info *frame, td_s32 milli_sec);

QpMap/SkipMap实现自适应ROI

感兴趣区域,如图1所示。

图 1 感兴趣区域示意图

使用QpMap调整感兴趣区域和非感兴趣区域QP,如图2所示。

图 2 使用QpMap调整感兴趣区域和非感兴趣区域QP

通过QPMap可以画出任意形状及任意个数的感兴趣区域,并通过降低QP提升感兴趣区域图像质量,或提升QP降低非感兴趣区域质量。此模式下需要使用相对QP调节方式。

QpMap/SkipMap实现外部码率控制

通过配置QPMap实现外部码率控制,支持相对和绝对方式配置QP。此模式下所有LCU/MB的QP均由外部指定,帧级码率控制将不起作用。

编码器输出信息

SSE和PSNR信息

  • PSNR代表整帧图像的信噪比数据,数据越大代表图像质量越好;
  • 除了衡量整帧图像的PSNR外,编码器还支持统计局部质量的SSE信息输出。编码器支持输出最多8个区域的SSE。用户可以根据这8个区域的大小及SSE算出区域信噪比。其中,SSE统计的是部分像素点的取值,H.265统计每个LCU像素点个数:(Lcu_width-5) *(Lcu_width-4);H.264统计每个MB像素点个数:(Mb_width-5) * (Mb_width-4)

HeaderBits和ResidualBits信息

HeaderBits和ResidualBits都是描述CU级的信息,HeaderBits包含块类型、帧内帧间预测信息等;ResidualBits包含变换量化后的剩余残差信息。

  • HeaderBits较大一般代表:

    • 图像纹理比较多,块划分比较细碎;
    • 运动比较复杂,相对运动比较多,mv信息比较多。
  • ResidualBits较大一般代表:

    • 运动不规则或运动过大超出搜索窗范围,运动补偿后剩余残差较多;
    • 空间纹理比较复杂,帧内预测后剩余残差较多。
    • 原始图像噪声较大。

Madi和Madp信息

Madi用于度量当前帧的空域纹理复杂度,一个块内基于像素值的纹理的变化,块的大小可以是16x16,32x32或64x64。

Madi复杂度计算公式为:

  • 其中N代表一个64x64、32x32块或16x16块的像素点的个数。对应一个块内的亮度均值,f对应一块内亮度复杂度计算公式。
  • 编码器支持帧级上报Madi统计信息(一帧内所有LCU单元madi的平均值)。该上报信息仅H.265支持。

Madp用于度量当前帧的时域运动复杂度,以16x16块为单位,对一帧图像(该图像是原始图像按1/4分辨率下采样后的图像)中所有块进行运动搜索和补偿后残差绝对值(SAD,Sum of Absolute Difference)的平均值。其度量了所有块平均编码的时域复杂度,通过其值的大小,可以反馈一帧图像的编码压力,该上报信息仅H.265支持。

Madp复杂度计算公式:

其中SAD分为块级和帧级,若对于块级SAD(16*16块),M=N=16,对于帧级,则M=图像高,N=图像宽,为原始像素,基于ME搜索预测像素,为Madp。

QP Histogram

QP直方图:

以4x4图像块为单位,统计所有小块使用的QP的直方图,其QP是编码过程中亮度分量(Y)使用的真实QP,无论是skip模式,还是非skip模式。该真实QP一般是在结合帧级,行级和CU级上面推断出来的。共52级(H.265/H.264都支持)。

其他上报信息

说明:

如无特殊说明,下表中描述的上报信息与本文档相对应的产品版本均支持。

表 1 其他上报信息表

名称

描述

mean_qp

编码整帧图像使用的QP的平均值。可以反映编码过程中,当前编码压力的大小。

start_qp

当前帧的起始QP。

H.264

inter16x16_mb_num

编码当前帧中采用Inter16x16预测模式的宏块数。

inter8x8_mb_num

编码当前帧中采用Inter8x8预测模式的宏块数。

intra16_mb_num

编码当前帧中采用Intra16预测模式的宏块数。

intra8_mb_num

编码当前帧中采用Intra8预测模式的宏块数。

intra4_mb_num

编码当前帧中采用Intra4预测模式的宏块数。

H.265/SVAC3.0

inter64x64_cu_num

编码当前帧中采用Inter64x64预测模式的CU块数。

inter32x32_cu_num

编码当前帧中采用Inter32x32预测模式的CU块数。

inter16x16_cu_num

编码当前帧中采用Inter16x16预测模式的CU块数。

inter8x8_cu_num

编码当前帧中采用Inter8x8预测模式的CU块数。

intra32x32_cu_num

编码当前帧中采用Intra32x32预测模式的CU块数。

intra16x16_cu_num

编码当前帧中采用Intra16x16预测模式的CU块数。

intra8x8_cu_num

编码当前帧中采用Intra8x8预测模式的CU块数。

intra4x4_cu_num

编码当前帧中采用Intra4x4预测模式的CU块数。

智能编码

智能编码

智能编码(Smart Video Coding,简称:SVC)技术包括编码更低码率与前景保护的控制机制。用户可在方案层引入码率质量自适应调节策略,通过结合码控算法、智能编码算法整体调节,以达到用户对码率节省或前景保护的目的。

目前智能编码分为1.0版本和2.0版本。

智能编码1.0使用说明

智能编码1.0控制机制主要包括对不同区域的QpMap及Skip倾向性的控制及对编码码控的参数控制(目前只对AVBR码控参数进行调整,其他码控算法只支持不同区域QpMap的调节)。

  • SVC QpMap及Skip倾向性的调节:

    • 用户通过设定ss_mpi_venc_send_svc_region接口,传送的智能检测框信息,区分出前景区域、背景区域及ROI区域,根据侧重码率节省或侧重保护前景的不同需求,使用ss_mpi_venc_set_svc_param接口,在不同区域设定不同的QpMap及Skip倾向性。
    • 接口的相关参数信息及具体使用方法请参考《MPP 媒体处理软件Vx.y 开发参考》的“视频编码”章节。
  • SVC RC码控参数调节:

    • 用户可根据自己传送的智能检测目标的个数、运动面积、检测前景的重要性的信息作为指导调节码率控制的参数;
    • 若侧重码率节省,则主动调节码控参数,降低目标码率;若侧重保护智能目标的图像质量,则主动调节码控参数,提高目标码率;
    • 理论上,目标个数越多、运动面积越大可相应提高目标码率,若目标个数越少、运动面积越小可相应降低目标码率。
    • 智能编码关于码率的调整,(目前仅在AVBR码控下做过适配及调优),接口的相关参数信息及具体使用方法请参考《MPP 媒体处理软件Vx.y 开发参考》的“视频编码”章节。

智能编码2.0使用说明

智能编码2.0主要是利用编码器内部的相关信息,跟踪检测出前景区域、背景区域及ROI区域,对不同区域进行编码码控参数的控制。

控制方法:

用户通过设定ss_mpi_venc_send_svc_region接口,传送的智能检测框信息,区分出前景区域、背景区域及ROI区域,根据侧重码率节省或侧重保护前景的不同需求,使用ss_mpi_venc_set_svc_param_ex接口,在不同区域设定不同的Qpdelta值。

接口的相关参数信息及具体使用方法请参考《MPP 媒体处理软件Vx.y 开发参考》的“视频编码”章节。

SVC RC码控参数调节:

  • 用户可根据自己传送的智能检测目标的个数、运动面积、检测前景的重要性的信息作为指导调节码率控制的参数;
  • 若侧重码率节省,则主动调节码控参数,降低目标码率;若侧重保护智能目标的图像质量,则主动调节码控参数,提高目标码率;
  • 理论上,目标个数越多、运动面积越大可相应提高目标码率,若目标个数越少、运动面积越小可相应降低目标码率。
  • 智能编码关于码率的调整(目前仅在AVBR码控下做过适配及调优),接口的相关参数信息及具体使用方法请参考《MPP媒体处理软件Vx.y开发参考》的“视频编码”章节。

MD运动检测算法

MD运动检测算法

MD运动检测算法是利用编码器内部的运动搜索结果,区分出场景中不同的运动程度区域,利用Qpdelta和SkipMap,控制不同区域的图像质量。编码器自身已具备MD检测的能力,从而无需额外的计算成本。可以帮助客户实现轻智能编码的功能。

MD运动检测结果示意

红色的区域即为检测的区域(运动程度分为两档结果),从检测的结果看,可以较好检测画面中的运动区域。用户对于检测区域进行参数的调整和控制。如图1所示。

图 1 MD运动检测结果示意图

MD运动检测使用说明

MD运动检测控制机制主要是对不同运动程度的区域的Qpdelta及Skip倾向性进行调整(其中Skip倾向性调整,只能在AVBR码控下使用)。

MD Qpdelta及Skip倾向性的调节:

  • 通过设置参数划定区域:调用 ss_mpi_venc_set_md接口,区分出前景区域、背景区域,是由参数threshold_gain、threshold_offset划定。threshold_gain、threshold_offset为一对参数,共同决定出一个阈值,数值越大,代表该区域的运动程度越大。
  • 设置不同区域的Qpdelta及Skip倾向性:使用ss_mpi_venc_set_md接口,在不同区域设定不同的Qpdelta及Skip倾向性。其中Qpdelta为相对的宏块级QP值,可控制对应区域的图像质量。Skip倾向性调节通常用于背景区域,但倾向性不宜设置过大。
  • 接口的相关参数信息及具体使用方法请参考《MPP 媒体处理软件Vx.y 开发参考》的“视频编码”章节。