H.264视频编码中的SPS和PPS参数详解
创作时间:
作者:
@小白创作中心
H.264视频编码中的SPS和PPS参数详解
引用
CSDN
1.
https://blog.csdn.net/weixin_46999174/article/details/139379481
在H.264视频编码标准中,SPS(Sequence Parameter Set)和PPS(Picture Parameter Set)是两个非常重要的参数集,它们包含了视频序列和图像的全局参数信息,对于视频的编码和解码至关重要。本文将详细解析SPS和PPS的主要参数及其含义,帮助读者更好地理解H.264视频编码技术。
序列参数集 (SPS, Sequence Parameter Set)
SPS包含关于整个视频序列的全局参数,包括视频的分辨率、帧率、颜色空间等信息。SPS NALU的nal_unit_type为7。
SPS的主要内容:
- profile_idc (8 bits):
- 指定编码器使用的特性集(Profile),如Baseline、Main、High等。
- Profile描述了H.264编码器使用的特性集,定义了编码过程中允许使用的技术和工具。不同的Profile适用于不同的应用场景,主要包括以下几种:
- Baseline Profile:
- 适用于低延迟和低复杂度的应用,如视频会议、移动视频等。
- 特点:支持I帧和P帧,不支持B帧;支持逐行扫描,不支持隔行扫描;支持基本的熵编码(CAVLC),不支持高级的CABAC。
- Main Profile:
- 适用于广播电视和存储等应用。
- 特点:支持I帧、P帧和B帧;支持隔行扫描;支持高级的熵编码(CABAC),提供更高的压缩效率。
- High Profile:
- 适用于高清电视、蓝光光盘等高质量视频应用。
- 特点:在Main Profile的基础上增加了8x8整数变换、更多的预测模式和量化矩阵等高级功能,进一步提高压缩效率和视频质量。
- 此外,还有其他更专业的Profile,如Extended Profile、High 10 Profile、High 4:2:2 Profile、High 4:4:4 Predictive Profile等,用于特定的专业应用场景。
- constraint_set_flags (6 bits):
- 用于指示某些编码限制和特性。
- level_idc (8 bits):
- 指定解码器的性能要求(Level),如1, 1.1, 1.2, …, 5.1等。
- 不同的level对应的分辨率,帧率如下图所示:
- seq_parameter_set_id:
- 标识符,用于区分不同的SPS。
- log2_max_frame_num_minus4:
- 定义MaxFrameNum的值,即最大帧编号。
- pic_order_cnt_type:
- 指定帧内图像顺序计数类型。
- log2_max_pic_order_cnt_lsb_minus4(当pic_order_cnt_type为0时有效):
- 定义MaxPicOrderCntLsb的值。
- max_num_ref_frames:
- 最大参考帧数量。
- gaps_in_frame_num_value_allowed_flag:
- 指示是否允许帧编号之间有空隙。
- frame_mbs_only_flag:
- 指示视频序列是否仅包含帧宏块(不包含场宏块)。
- direct_8x8_inference_flag:
- 指示是否可以在直接模式中使用8x8块。
- frame_cropping_flag:
- 指示是否存在帧裁剪参数。
- vui_parameters_present_flag:
- 指示是否存在VUI(视频可用性信息)参数。
- VUI参数(如果vui_parameters_present_flag为1):
- 包含色彩描述、时间尺度、比特率、视频格式等额外信息。
一些补充的参数如下图所示:
图像参数集 (PPS, Picture Parameter Set)
PPS包含关于每个图像或图像组的具体参数,指导解码器如何处理图像数据。PPS NALU的nal_unit_type为8。
PPS的主要内容:
- pic_parameter_set_id:
- 标识符,用于区分不同的PPS。
- seq_parameter_set_id:
- 关联的SPS的标识符。
- entropy_coding_mode_flag:
- 指示是否使用CABAC(上下文自适应二进制算术编码)熵编码模式。
- bottom_field_pic_order_in_frame_present_flag:
- 指示是否在帧内包含底部场顺序信息。
- num_slice_groups_minus1:
- 指定切片组的数量。
- slice_group_map_type(如果num_slice_groups_minus1 > 0):
- 指定切片组的映射类型。
- num_ref_idx_l0_default_active_minus1 和 num_ref_idx_l1_default_active_minus1:
- 指定参考帧列表的默认数量。
- weighted_pred_flag:
- 指示是否使用加权预测。
- weighted_bipred_idc:
- 指定双向预测中加权预测的方法。
- pic_init_qp_minus26:
- 初始量化参数(QP)相对于基准值26的偏移量。
- deblocking_filter_control_present_flag:
- 指示是否存在去块滤波参数。
- constrained_intra_pred_flag:
- 指示是否限制帧内预测。
- redundant_pic_cnt_present_flag:
- 指示是否存在冗余图像计数。
Slice Header 结构
Slice Header的结构因Slice类型(I-Slice, P-Slice, B-Slice)和某些参数的不同而略有变化。以下是Slice Header中主要字段的详解:
- first_mb_in_slice
- 表示该Slice中第一个宏块的地址(从0开始)。
- slice_type
- 指示Slice的类型(I-Slice, P-Slice, B-Slice等)。
- 常见值包括:
- 0:P-Slice
- 1:B-Slice
- 2:I-Slice
- 3:SP-Slice
- 4:SI-Slice
- pic_parameter_set_id
- 指示用于该Slice的PPS的标识符。
- frame_num
- 表示该Slice所属帧的帧编号。
- field_pic_flag(可选)
- 指示是否为场图像(field picture)。
- 当场图像存在时,还需要bottom_field_flag。
- bottom_field_flag(可选)
- 指示是否为底场(bottom field)。
- idr_pic_id(当Slice为IDR片时)
- 表示IDR片的标识符。
- pic_order_cnt_lsb
- 表示该Slice所属帧的图像顺序计数(LSB部分)。
- delta_pic_order_cnt_bottom(当pic_order_cnt_type为0时)
- 用于计算图像顺序计数的底部增量。
- delta_pic_order_cnt[0] 和 delta_pic_order_cnt[1](当pic_order_cnt_type为1时)
- 用于计算图像顺序计数的增量。
- redundant_pic_cnt
- 表示冗余图像计数。
- direct_spatial_mv_pred_flag(当Slice类型为B-Slice时)
- 指示是否使用直接空间运动矢量预测。
- num_ref_idx_active_override_flag
- 指示是否覆盖PPS中参考索引的默认数量。
- num_ref_idx_l0_active_minus1 和 num_ref_idx_l1_active_minus1
- 指示L0和L1列表中活动参考索引的数量减1。
- ref_pic_list_modification_flag_l0 和 ref_pic_list_modification_flag_l1
- 指示是否修改参考图像列表。
- dec_ref_pic_marking
- 包含参考图像标记信息,用于管理参考图像缓存。
- cabac_init_idc
- 表示CABAC初始化索引。
- slice_qp_delta
- 表示该Slice的量化参数(QP)的增量。
- sp_for_switch_flag(当Slice类型为SP-Slice时)
- 指示是否为切换SP-Slice。
- slice_qs_delta(当Slice类型为SP-Slice或SI-Slice时)
- 表示该Slice的QS(量化步长)的增量。
- disable_deblocking_filter_idc
- 指示是否禁用去块滤波。
- slice_alpha_c0_offset_div2 和 slice_beta_offset_div2
- 表示去块滤波器的α和β参数偏移量。
- slice_group_change_cycle
- 指示切片组更改周期。
热门推荐
冬天必吃3种豆 饱腹热量低!吃这种更降胆固醇/抗衰老
形如犀牛,国家二级保护动物细角尤犀金龟现身云南
英雄联盟 各位置角色选择与玩法解析
史上最长双11带来平台“全数增长”战报:“品牌成交额”取代总体GMV
短笛咖啡是什么意思?为什么Piccolo Latte在国内这么冷门?
成为保安员的必备条件及考试指南
迄今最完整超新星爆发过程揭示,有助研究恒星生命最终阶段秘密
「忍過去就好!」 醫師釐清女性更年期迷思
睡眠少,胃口大?揭秘睡眠时长与热量摄入的秘密
“五一”假期莽山游玩攻略来啦!
云中谁寄锦书来?——李清照《一剪梅》赏析
医学科普| 中医如何帮助干燥综合征病友“润”燥“解”燥?
疼!脚后跟总是开裂?真相不一定是皮肤缺水,当心与这些疾病有关
煎饼果子也能减肥?这些食材搭配很关键
航插接口在航空航天领域的应用有哪些?
“工具化”的菲律宾
外呼系统在快递企业客户投诉处理中的应用
人们目击不明飞行物的事件
提高恢复视力的科学方法
烤面包时记住这3点,面包柔软拉丝,15分钟快速出膜,不干不硬
胆石症患者十大饮食原则
英语后缀记忆指南:分类详解与记忆技巧
头发稀疏怎么办?教你5招恢复发量的关键方法!
“博博会”期间,一定要去看的10座博物馆!
玩偶姐姐揭秘:从校园到镜头背后,她是如何掀起社交媒体的热潮?
《辐射4》中哪个据点有泳池?攻略详解
探讨游戏叙事:交互玩法如何打造独特游戏体验
奇门排命局八字算命:揭秘古老命理学的奥秘与应用
2024年中国体育类大学排名及重庆高考录取分数线(2025届考生参考)
面包机不工作的原因及解决方法(为什么面包机无法正常运作)