数据压缩实验七——H.264实验( 最后一次 撒花完结 ~ )

1 实验要求

1.1 H.264初探索
  • 选择一个.mp4或者.264文件。
  • 在码流分析仪软件中打开该文件,从几个层次进行分析:
    (1)分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)
    (2)以一个GOP为例,分析如下信息:
    • 每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
    • 以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
      以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
      以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
1.2 H.264编解码
  • 将自行选择或老师给的两个264文件进行解码,得到相应的YUV文件
  • 将上述两个视频序列编码为.264文件
  • 固定码率,以不同的GOP长度及形状编码
    GOP=15,2B帧;GOP=12,2B帧,GOP=9,2B帧
    GOP=4,1B帧;GOP=12,无B帧;GOP=1,全I帧
  • 相同的GOP长度及形状,不同的码率
    例:1000kb/s, 800kb/s,400kb/s,…
  • 用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
  • 用播放器观看所生成码流的质量
  • 生成率失真曲线

2 实验原理

2.1 视频压缩的基本框架

在这里插入图片描述
三种主要技术:
变换 —— 去除空间冗余
基于运动补偿的帧间预测 —— 去除时间冗余
熵编码 —— 去除统计冗余

2.2 SPS —— 序列参数集 (Sequence parameter set)

在这里插入图片描述

2.3 PPS —— 图像参数集 (Picture parameter set)

在这里插入图片描述

3 实验内容

3.1 H.264初探索

选择色温过低.mp4,用H264Visa.exe打开
在这里插入图片描述

3.1.1 结合文档对SPS和PPS分析:

1. SPS
在这里插入图片描述

(1)profile_idc
在这里插入图片描述
当前文件profile_idc = 100,查表可知码流档次为High-profile。

(2)level_idc
在这里插入图片描述
当前文件level_idc=31,即码流级别为3.1

(3)seq_parameter_set_id
在这里插入图片描述
当前文件seq_parameter_set_id=0

(4)log2_max_frame_num_minus4
在这里插入图片描述
当前文件log2_max_frame_num_minus4 = 2,
计算MaxFrameNum = 2^(log2_max_frame_num_minus4 + 4)= 64

(5) pic_order_cnt_type
在这里插入图片描述
当前序列pic_order_cnt_type=0,采用POC mode 0。

(6)log2_max_pic_order_cnt_lsb_minus4
在这里插入图片描述
当前文件log2_max_pic_order_cnt_lsb_minus4 = 3,
计算 MaxPicOrderCntLsb
= 2^(log2_max_pic_order_cnt_lsb_minus4+4)=128。

(7)num_ref_frames
在这里插入图片描述
当前文件max_num_ref_frames=16,所以参考帧最大数目为16。

(8)gaps_in_frame_num_value_allowed_flag
在这里插入图片描述
在这里插入图片描述
当前文件gap_in_frame_num_value_allowed_flag=0。

(9) pic_width_in_mbs_minus1
在这里插入图片描述
因此图像的实际宽度为16 ×(pic_width_in_mbs_minus1+1) = 16×(39+1)= 640

(10)pic_height_in_map_units_minus1
在这里插入图片描述
因此图像的实际高度为16 ×(pic_height_in_map_units_minus1+1) = 16×(22+1)= 368

比对视频信息,发现与(9)(10)中计算出的结果一致:
在这里插入图片描述
(11)frame_mbs_only_flag
在这里插入图片描述
在本文件中,frame_mbs_only_flag=1。

2. PPS
在这里插入图片描述
(1) pic_parameter_set_id
在这里插入图片描述
当前文件pic_parameter_set_id=0。

(2) seq_parameter_set_id
在这里插入图片描述
当前文件seq_parameter_set_id=0。

(3) entropy_coding_mode_flag
在这里插入图片描述
当前文件中,entropy_coding_mode_flag=1,采用CABAC方法。

(4) pic_order_present_flag
在这里插入图片描述
当前文件中,pic_order_present_flag=0,即条带头中不会出现与图像顺序有关的语法元素。

(5) num_slice_groups_minus1
在这里插入图片描述
当前文件中,num_slice_groups_minus1=0。

(6) num_ref_idx_l0_default_active_minus1 & num_ref_idx_l0_default_active_minus1
在这里插入图片描述
当前文件中,
num_ref_idx_l0_default_active_minus1=15
num_ref_idx_l0_default_active_minus1=0

(7) weighted_pred_flag
在这里插入图片描述
当前文件中,weighted_pred_flag=1。

(8) weighted_bipred_idc
在这里插入图片描述
当前文件中,weighted_bipred_idc=2。

(9) pic_init_qp_minus26 & pic_init_qs_minus26
在这里插入图片描述
当前文件中,pic_init_qp_minus26 和 pic_init_qs_minus26均为0。


(10)chroma_qp_index_offset
在这里插入图片描述
当前文件中,chroma_qp_index_offset=-2。

(11)deblocking_filter_control_present_flag
在这里插入图片描述
当前文件中,deblocking_filter_control_present_flag=1。


(12) constrained_intra_pred_flag
在这里插入图片描述
当前文件中,constrained_intra_pred_flag =0。

(13) redundant_pic_cnt_present_flag
在这里插入图片描述
当前文件中,redundant_pic_cnt_present_flag=0。

(14) transform_8x8_mode_flag
在这里插入图片描述
当前文件中,transform_8x8_mode_flag =1。

(15) pic_scaling_matrix_present_flag
在这里插入图片描述
当前文件中,pic_scaling_matrix_present_flag=0。

3.1.2 以一个GOP为例进行分析

在这里插入图片描述
第一个GOP长度为250帧。
将数据导出,用Excel绘制每帧所用比特数的图表:
在这里插入图片描述
以第一个I帧为例:
在这里插入图片描述
在这里插入图片描述
该帧完全使用帧内编码。每个宏块所用的平均编码比特数为37.480,QP(量化参数)值为27.328。

以第一个P帧为例:
在这里插入图片描述
注意该帧第四个显示:
在这里插入图片描述
可以看到,该帧使用了帧内编码和帧间编码。

以第一个B帧为例:
在这里插入图片描述
注意该帧第二个显示
在这里插入图片描述
该帧完全使用帧间编码。黄色为B_skip宏块,占737/920=80.11%。

3.2 H.264编解码

1. 将.264文件进行解码得到相应的YUV文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 将.yuv文件编码回.264文件
改变参数,此处以码率1000kbps,GOP长度15,2B帧为例,修改encoder.cfg的参数:
(为了省时,只编30帧)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行后:
在这里插入图片描述
在这里插入图片描述
其他参数改变方式同理,最终得到下面表格:
在这里插入图片描述
在这里插入图片描述
3. 用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
以1000kbps码率,GOP长度15,GOP形状2B为例:
在这里插入图片描述

由图中可看出,显示顺序为IBBPBBPBBPBBP,但由于进行了帧重排,编解码顺序为与显示顺序不同。
此处以第一组IPBB(编解码)为例:
I帧:
在这里插入图片描述
可以看出,全为帧内编码。

P帧:
在这里插入图片描述
P帧中,红色橙色为帧内编码,且编码模式不同。蓝色为帧间编码,黄色为skip。由于该视频运动幅度不大,且背景没有变化,所以skip较多。

两个B帧:
在这里插入图片描述
在这里插入图片描述
B帧中,黄色代表skip,蓝色代表帧间编码。这两帧没有用到帧内编码(红色橙色)。


4 . 用播放器观看所生成码流的质量
此处举两个例子。(红色线为运动矢量)
(1)以1000kbps码率,GOP长度15,GOP形状2B为例:
在这里插入图片描述

在这里插入图片描述
可以看到,视频质量较高,较清晰。

(2)以400kbps码率,GOP长度15,GOP形状2B为例:
在这里插入图片描述
在这里插入图片描述
可以看到,图像变得有些模糊。

5 . 生成率失真曲线
在这里插入图片描述
可以看到,随码率下降,PSNR降低,视频质量降低。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值