实验 H.264视频编解码
·
一、实验要求
用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息。分析不同统计特性的视频图像对应的编码模式和运动矢量特点。
具体要求:
- 分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)
- 以一个GOP为例,分析如下信息:
- 每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
- 以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
- 以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
- 以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
二、需了解的参数
- GOP(Group of Picture):序列中的一个图片集,用来辅助随即存取。GOP的第一个图像必须为I帧,这样就能保证一个GOP不需要参考其他图像,可以独立解码。
- SPS序列参数集:一个语法结构,包含应用于零个或多个完整编码视频序列的语法元素,由pic_parameter_set_id确定所引用的图像参数集,由图像参数集中的语法元素seq_parameter_set_id确定所引用的序列参数集。
- PPS图像参数集:一个语法结构,包含应用于零个或多个编码图像的语法元素,由每个条带头重的语法元素pic_parameter_set_id确定。
- QP(quantisation parameter)量化参数:一个变量,解码过程中对变换洗漱幅度进行缩放时使用。
三、实验过程
1.用码流分析软件打开一个视频文件,本实验选择Movie.mp4文件


上图显示出了此视频每一帧的数据量,红色为I帧,蓝色为P帧,绿色为B帧。由柱状图形可以直观看出I帧的数据量高于P帧、B帧,B帧为三种帧型中包含数据量最少的。
由图可知,此视频序列第一个GOP包含250帧图像。
2.分别以I、P、B帧作为分析对象
(1)第一个I帧
宏块类型:

宏块大小:

图像信息:


- 从Picture_Info中可以得知,此图像pic_parameter_set_id与seq_parameter_set_id均为0;
- 编码方式,采用CABAC,基于上下文的自适应二进制算术编码;
- slice_type为I slice。

从H264Visa软件观察:
- 此帧图像的比特数为4322bytes;
- 编码率为1/81;
- 宏块总比特数为34482;
- 宏块比特与图像总比特的比值为0.997
- 宏块平均比特数为37.480;
- 此帧全为帧内编码,MB_type为I_16x16_2_1_0,全为16x16的宏块,QP为25。
(2)第一个P帧
宏块类型:

宏块大小:

图像信息:


- 由图片显示的宏块类型,黄色点表示预测误差为0,即与前一帧相比,此块几乎没有变化。蓝色点表示帧间编码,即此块以前一帧的信息来做预测,以前一帧为预测帧
- 从Picture_Info中可以得知,此图像pic_parameter_set_id与seq_parameter_set_id均为0
- 编码方式,采用CABAC,基于上下文的自适应二进制算术编码
- 所用宏块类型有16x16、16x8,以16x16居多
- 宏块平均比特数为1.596,与上一帧I帧相比,大幅下降
- QP为24
(3)第一个B帧
宏块类型:

宏块大小:

图像信息:


- 此图像pic_parameter_set_id与seq_parameter_set_id均为0
- 编码方式,采用CABAC,基于上下文的自适应二进制算术编码
- 所用宏块类型有16x16、8x16,以16x16居多
- 宏块平均比特数为2.125,与上一帧P帧相比,差别不大
- 图像中黄色点占大多数,说明此帧与上一帧图像的差距不大,预测误差许多都为0
(4)SPS与PPS中包含的信息
SPS
让视频播放,随即读取一帧,查看其Header Info表中的SPS与PPS信息(我随机获取的为第23帧,为P帧)


- 从SPS中可以观察到类@级的信息,类profile_idc->100,高级类;级level_idc->31;profile:level为High:3.1
- seq_parameter_set_id的值在0~31的范围内,包括0和31
- chroma_format_idc 表示色度采样结构,此例中值为1,即采样格式为4:2:0
| chroma_format_idc | 色彩格式 | SubWidthC | SubHeightC |
| 0 | 单色 | - | - |
| 1 | 4:2:0 | 2 | 2 |
| 2 | 4:2:2 | 2 | 1 |
| 3 | 4:4:4 | 1 | 1 |
- bit_depth_luma_minus8 表示亮度队列样值的比特深度以及亮度量化参数范围的偏移,其取值为0~4,包括0、4
- bit_depth_chroma_minus8 表示色度队列样值的比特深度以及色度量化参数范围的取值偏移,其取值范围为0~4,包括0、4
- pic_order_cnt_type 表示解码图像顺序的计数方式,取值范围为0~2
- pic_width_in_mbs_minus1 & pic_height_in_map_units_minus1可以根据这两个数值计算出图像的实际宽度与实际高度,可得出分辨率,计算规则如下

- 此例中pic_width_in_mbs_minus1=39,pic_height_in_map_units_minus1=22.计算得出图像实际宽度为640,实际高度为368,分辨率为640x368
PPS

- pic_parameter_set_id 取值范围为0~255,包括0和255
- entropy_coding_mode_flag 用于选取语法元素熵编码方式
- pic_order_present_flag 为1时,表示与图像顺序数有关的语法元素将出现于条带中;为0时则不出现
- chroma_qp_index_offset 表示为在QPC值的表格中寻找Cb色度分量而应加到参数QPY和QSY上的偏移。其取值范围应在[-12,+12]
(5)以一个GOP为例,以图像帧号为横坐标,每帧所用比特数为纵坐标画出曲线图

以一个GOP为例,以图像帧号为横坐标,每帧所用QP为纵坐标画出曲线图

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)