音视频开发—H264 SPS 和 PPS 参数说明

文章目录

      • 序列参数集 (SPS, Sequence Parameter Set)
        • SPS的主要内容:
      • 图像参数集 (PPS, Picture Parameter Set)
        • PPS的主要内容:
      • Slice Header 结构

在H.264视频编码标准中,SPS和PPS是关键的参数集,它们提供了解码所需的各种配置信息。它们分别存储在单独的NALU中,并用于初始化解码器的参数。

序列参数集 (SPS, Sequence Parameter Set)

SPS包含关于整个视频序列的全局参数,包括视频的分辨率、帧率、颜色空间等信息。SPS NALU的 nal_unit_type 为7。

SPS的主要内容:
  1. profile_idc (8 bits)

    • 指定编码器使用的特性集(Profile),如Baseline、Main、High等。

    如下图所示

    Profile描述了H.264编码器使用的特性集,定义了编码过程中允许使用的技术和工具。不同的Profile适用于不同的应用场景,主要包括以下几种:

    1. Baseline Profile
      • 适用于低延迟和低复杂度的应用,如视频会议、移动视频等。
      • 特点:支持I帧和P帧,不支持B帧;支持逐行扫描,不支持隔行扫描;支持基本的熵编码(CAVLC),不支持高级的CABAC。
    2. Main Profile
      • 适用于广播电视和存储等应用。
      • 特点:支持I帧、P帧和B帧;支持隔行扫描;支持高级的熵编码(CABAC),提供更高的压缩效率。
    3. High Profile
      • 适用于高清电视、蓝光光盘等高质量视频应用。
      • 特点:在Main Profile的基础上增加了8x8整数变换、更多的预测模式和量化矩阵等高级功能,进一步提高压缩效率和视频质量。

    此外,还有其他更专业的Profile,如Extended Profile、High 10 Profile、High 4:2:2 Profile、High 4:4:4 Predictive Profile等,用于特定的专业应用场景。

    在这里插入图片描述

  2. constraint_set_flags (6 bits)

    • 用于指示某些编码限制和特性。
  3. level_idc (8 bits)

    • 指定解码器的性能要求(Level),如1, 1.1, 1.2, …, 5.1等。

    不同的level对应的分辨率,帧率如下图所示

    在这里插入图片描述

  4. seq_parameter_set_id

    • 标识符,用于区分不同的SPS。
  5. log2_max_frame_num_minus4

    • 定义 MaxFrameNum 的值,即最大帧编号。
  6. pic_order_cnt_type

    • 指定帧内图像顺序计数类型。
  7. log2_max_pic_order_cnt_lsb_minus4(当 pic_order_cnt_type 为0时有效):

    • 定义 MaxPicOrderCntLsb 的值。
  8. max_num_ref_frames

    • 最大参考帧数量。
  9. gaps_in_frame_num_value_allowed_flag

    • 指示是否允许帧编号之间有空隙。
  10. frame_mbs_only_flag

    • 指示视频序列是否仅包含帧宏块(不包含场宏块)。
  11. direct_8x8_inference_flag

    • 指示是否可以在直接模式中使用8x8块。
  12. frame_cropping_flag

    • 指示是否存在帧裁剪参数。
  13. vui_parameters_present_flag

    • 指示是否存在VUI(视频可用性信息)参数。
  14. VUI参数(如果 vui_parameters_present_flag 为1):

    • 包含色彩描述、时间尺度、比特率、视频格式等额外信息。

一些补充的参数如下图所示:

在这里插入图片描述

图像参数集 (PPS, Picture Parameter Set)

PPS包含关于每个图像或图像组的具体参数,指导解码器如何处理图像数据。PPS NALU的 nal_unit_type 为8。

PPS的主要内容:
  1. pic_parameter_set_id
    • 标识符,用于区分不同的PPS。
  2. seq_parameter_set_id
    • 关联的SPS的标识符。
  3. entropy_coding_mode_flag
    • 指示是否使用CABAC(上下文自适应二进制算术编码)熵编码模式。
  4. bottom_field_pic_order_in_frame_present_flag
    • 指示是否在帧内包含底部场顺序信息。
  5. num_slice_groups_minus1
    • 指定切片组的数量。
  6. slice_group_map_type(如果 num_slice_groups_minus1 > 0):
    • 指定切片组的映射类型。
  7. num_ref_idx_l0_default_active_minus1 和 num_ref_idx_l1_default_active_minus1
    • 指定参考帧列表的默认数量。
  8. weighted_pred_flag
    • 指示是否使用加权预测。
  9. weighted_bipred_idc
    • 指定双向预测中加权预测的方法。
  10. pic_init_qp_minus26
    • 初始量化参数(QP)相对于基准值26的偏移量。
  11. deblocking_filter_control_present_flag
    • 指示是否存在去块滤波参数。
  12. constrained_intra_pred_flag
    • 指示是否限制帧内预测。
  13. redundant_pic_cnt_present_flag
    • 指示是否存在冗余图像计数。

Slice Header 结构

Slice Header的结构因Slice类型(I-Slice, P-Slice, B-Slice)和某些参数的不同而略有变化。以下是Slice Header中主要字段的详解:

  1. first_mb_in_slice
    • 表示该Slice中第一个宏块的地址(从0开始)。
  2. slice_type
    • 指示Slice的类型(I-Slice, P-Slice, B-Slice等)。
    • 常见值包括:
      • 0:P-Slice
      • 1:B-Slice
      • 2:I-Slice
      • 3:SP-Slice
      • 4:SI-Slice
  3. pic_parameter_set_id
    • 指示用于该Slice的PPS的标识符。
  4. frame_num
    • 表示该Slice所属帧的帧编号。
  5. field_pic_flag(可选)
    • 指示是否为场图像(field picture)。
    • 当场图像存在时,还需要bottom_field_flag
  6. bottom_field_flag(可选)
    • 指示是否为底场(bottom field)。
  7. idr_pic_id(当Slice为IDR片时)
    • 表示IDR片的标识符。
  8. pic_order_cnt_lsb
    • 表示该Slice所属帧的图像顺序计数(LSB部分)。
  9. delta_pic_order_cnt_bottom(当pic_order_cnt_type为0时)
    • 用于计算图像顺序计数的底部增量。
  10. delta_pic_order_cnt[0] 和 delta_pic_order_cnt[1](当pic_order_cnt_type为1时)
    • 用于计算图像顺序计数的增量。
  11. redundant_pic_cnt
    • 表示冗余图像计数。
  12. direct_spatial_mv_pred_flag(当Slice类型为B-Slice时)
    • 指示是否使用直接空间运动矢量预测。
  13. num_ref_idx_active_override_flag
    • 指示是否覆盖PPS中参考索引的默认数量。
  14. num_ref_idx_l0_active_minus1 和 num_ref_idx_l1_active_minus1
    • 指示L0和L1列表中活动参考索引的数量减1。
  15. ref_pic_list_modification_flag_l0 和 ref_pic_list_modification_flag_l1
    • 指示是否修改参考图像列表。
  16. dec_ref_pic_marking
    • 包含参考图像标记信息,用于管理参考图像缓存。
  17. cabac_init_idc
    • 表示CABAC初始化索引。
  18. slice_qp_delta
    • 表示该Slice的量化参数(QP)的增量。
  19. sp_for_switch_flag(当Slice类型为SP-Slice时)
    • 指示是否为切换SP-Slice。
  20. slice_qs_delta(当Slice类型为SP-Slice或SI-Slice时)
    • 表示该Slice的QS(量化步长)的增量。
  21. disable_deblocking_filter_idc
    • 指示是否禁用去块滤波。
  22. slice_alpha_c0_offset_div2 和 slice_beta_offset_div2
    • 表示去块滤波器的α和β参数偏移量。
  23. slice_group_change_cycle
    • 指示切片组更改周期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch创建张量

文章目录 1.torch.from_numpy()2. torch.zeros()3. torch.ones()4. torch.arange()5. torch.linspace()6. torch.logspace()7. torch.eye()8. torch.empty()9. torch.full()10. torch.complex()10. torch.rand()10. torch.randint()11. torch.randn12. torch.normal()13. torch…

[数据集][目标检测]剪刀石头布检测数据集VOC+YOLO格式1973张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1973 标注数量(xml文件个数):1973 标注数量(txt文件个数):1973 标注…

Docker 简介和安装

目录 Docker 是什么 跟普通虚拟机的对比 打包、分发、部署 Docker 部署的优势 Docker 通常用来做什么 重要概念:镜像、容器 安装 镜像加速源 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机,它只虚…

SAP揭秘者- SAP PP模块日常常见运维问题之工单入库失败原因分析及快速处理

文章摘要: 无论您是负责SAP实施项目还是负责SAP运维项目,当用户发现有SAP PP模块的各种异常问题的时都需要作为SAP PP顾问的您快速地理解用户提交的问题,并快速地解决这些问题, 上篇文章跟大家聊了基本单位维护错了怎么修改的解决…

ARC学习(2)基本编程模型认识(二)

笔者继续来学习一下arc的编程模型的寄存器信息。 1、core寄存器深入 参数寄存器:r0-r7,8个参数,暂存器:r10-r15保存寄存器:r16-r25 调用函数需要保存的寄存器指针寄存器:gp(全局指针&#xff09…

functional函数对象库学习

类模板 std::function 是一种通用多态函数包装器。std::function 的实例能存储、复制及调用任何可复制构造 (CopyConstructible) 的可调用 (Callable) 目标——函数(通过其指针)、lambda 表达式、bind 表达式或其他函数对象,以及成员函数指针…

FPGA基于DE2-115开发板驱动HC_SR04超声波测距模块|集成蜂鸣器,led和vga提示功能

文章目录 前言一、实验原理二、Verilog文件2.1 时钟分频2.2 超声波测距2.3 超声波驱动 三、实现过程3.1 模块说明3.2 引脚分配 三、演示视频总结参考 前言 环境 硬件 DE2-115 HC-SR04超声波传感器 软件 Quartus 18.1 目标结果 使用DE2-115开发板驱动HC-SR04模块&#xff0…

Windows 下 PostgreSQL 图形化界面安装、配置详解

相信大家对PostgreSQL都不陌生吧,自从MySQL被Oracle所控制后,PostgreSQL就成为了国内去O的首选数据库了,并且PostgreSQL目前不受任何商业公司控制,所以国内很多厂商都是基于PostgreSQL做二次开发来实现数据库自主可控的目标(国内很…

简单模拟实现shell(Linux)

目录​​​​​​​ 前言 展示效果 实现代码 前言 该代码模拟了shell的实现,也就是解析类似于“ls -a -l"的命令,当我们启动我们自己写的shell的可执行程序时,我们输入"ls"的命令,也可以展示出在shell中输入&…

学习笔记——网络参考模型——TCP/IP模型(物理层)

一、TCP/IP模型-物理层 1、数据传输(交换)的形式 (1)电路交换 特点:通信双方独占通信链路。 优点:数据传输时延小,适用于实时通信;数据按序发送,不存在失序问题;适合模拟信号和数字信号传输。 缺点&am…

【前缀和】42. 接雨水

本文涉及知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入&am…

IDEA+MyBatisX根据mapper方法自动添加注解和生成xml方法结构

前提:确保IDEA已安装并启用了MyBatisX插件 在service层写dao或mapper的方法结构,反向生成dao层方法声明,如下: void updateStock(Long skuId, Long wareId, Integer skuNum); 由于该方法传递多个参数,为了让MyBatis识…

心链6----开发主页以及后端数据插入(多线程并发)定时任务

心链 — 伙伴匹配系统 开发主页 信息搜索页修改 主页开发&#xff08;直接list用户&#xff09; 在后端controller层编写接口去实现显示推荐页面的功能 /*** 推荐页面* param request* return*/GetMapping("/recommend")public BaseResponse<List<User>&…

Go-知识并发控制WaitGroup

Go-知识并发控制WaitGroup 1. 认识 WaitGroup2. 基本原理2.1 信号量2.2 数据结构2.3 Add2.4 Wait2.5 Done 3. 小例子3.1 主协程等待子协程执行完成3.2 子协程等待主协程信号3.3 GetFirst 4. 总结 gitio: https://a18792721831.github.io/ 1. 认识 WaitGroup WaitGroup 是Go 应…

公网IP地址如何查询?

公网IP地址是指在互联网中可以被全球范围内的设备访问的IP地址。在网络通信中&#xff0c;公网IP地址扮演着重要的角色&#xff0c;它可以标识设备在互联网中的位置。查询公网IP地址是一种常见的网络管理需求&#xff0c;因为它能够提供网络设备的准确位置信息&#xff0c;方便…

AI 绘画爆火背后:扩散模型原理及实现

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

Java进阶学习笔记34——Arrays类

Arrays&#xff1a; 用来操作数组的工具类。 解释说明&#xff1a; 只要知道代码这么写就可以了。 package cn.ensource.d5_arrays;import java.util.Arrays; import java.util.function.IntToDoubleFunction;public class ArraysTest1 {public static void main(String[] arg…

LTspice仿真中设置电阻随时间变化的方法

背景&#xff1a; 笔者找了很多资料都没有看到如何设置电阻、电容等参数随时间变化。但在实际模拟中&#xff0c;总会遇到需要模拟这些量的变化。故撰写此文&#xff0c;供大家参考。 除了模拟随时间变化外&#xff0c;同样的思路也可以模拟随其他变量变化 效果展示 设置电…

32【Aseprite 作图】石头——拆解

1 石头先画轮廓&#xff0c;还是2 4 1 1 2 2 2&#xff0c;这样画一个圆的轮廓 或者2 1 1 3 5 1 1 1 1 2 4 &#xff0c; 2 最暗一层的黑色&#xff0c;做阴影部分&#xff0c;就是7 4 3 2 做最深的部分 各个地方画一些浅色的&#xff0c;做高光部分&#xff0c;上面的高光偏圆…

015、列表_应用场景

1.消息队列 如图所示,Redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性。 2.文章列表 每个用户有属于自己的文章列表,现…