数据压缩【实验八】H.264

一、实验目的

(1) 码流分析

选择一个.mp4或者.264文件。
在码流分析仪软件中打开该文件,从几个层次进行分析:
分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)
以一个GOP为例,分析如下信息:
每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。

(2)不同编码方式的定量对比

在这里插入图片描述

二、实验原理

在这里插入图片描述
H.264在视频编码层(VCL)和网络提取层(NAL)之间进行概念分割,以实现在不同的传输环境下的有效传输,便于与当前和将来的编码格式和不同类型的网络进行无缝连接。
在这里插入图片描述

(1)视频编码帧

I帧(帧内编码帧):只使用本阵内的数据进行编码(DCT、量化、熵编码),压缩比较低,约为(2—5):1。此外还有IDR帧,是GOP的第一个I帧(一种特殊的I帧)。IDR帧之后的所有帧都不能参考IDR帧之前帧的内容,而位于普通的I帧之后的P/B帧可以参考其之前的I帧,也就是说,从IDR帧开始,重新算一个新的序列开始编码,因而播放器永远可以从一个IDR帧开始播放,因为在其之后没有对于任何其之前帧的参考。
P帧(前向预测编码帧):以前面最靠近的I帧或P帧作为参考进行前向预测编码。
B帧(双向预测编码帧):以一个前面的参考帧和一个后面的参考帧进行双向预测编码。

(2)码流分析

在这里插入图片描述
从上面可以得到一些关于视频的重要信息,如:

num_ref_frames最大参考帧数目:2
pic_width_in_mbs_minus1用于计算图像宽度(亮度分量以像素为单位):frame_width = 16 × (54 + 1) = 880
pic_height_in_map_units_minus1用于计算图像高度(以 map_unit 为单位):PicHeightInMapUnits = 29 + 1 = 30
frame_mbs_only_flag说明宏块的编码方式:1表示所有宏块都采用帧编码,同时也表示一帧数据按宏块计算的高度,即按照宏块计算的图像实际高度FrameHeightInMbs = ( 2 − 1 ) * 30 = 23,frame_height = 16 × 30 = 480
num_slice_groups_minus1某一帧中slice group的个数:该值为0表示一帧中所有的slice都属于一个slice group
deblocking_filter_control_present_flag表示Slice header中是否存在用于去块滤波器控制的信息:该标志位为1表示slice header中包含去块滤波相应的信息

(3)GOP

GOP(Group of Pictures,图像组)是将一个图像序列中连续的几个图像组成的一个小组,是对编码后的视频码流进行编辑、存取和压缩编码的基本单元,包含不同种类编码的帧。
在这里插入图片描述
增大GOP或提高GOP中P/B帧的占比,可以提高压缩比,降低码率。因此一般而言,在码率一定的条件下,GOP越大,图像质量越好(P/B帧的比重更大);在图像质量一定的条件下,GOP越大,码率越低。
编码比特数统计
在这里插入图片描述此视频的GOP长度为90,结构为IBP。
在这里插入图片描述通过图表可以直观看出I帧编码bit数最高,其次是P帧,B帧最少。
与其编码方式相符。

(4)帧重排

由于B帧是双向预测帧,因此在后向预测时,需要以其后面的P或I帧作为参考,因此需要将原始图像顺序重新排序后送入编码器

通过ESEys播放器逐帧播放可以直观看出帧重排的顺序。

(5)I帧分析

在这里插入图片描述
分析第一个I帧,可以看出此帧内所用宏块全部为Intra类型,即帧内编码。
在这里插入图片描述
图像平坦处,编码所使用bit数较少;在图像陡峭处,使用bit数较高。
统计值:
在这里插入图片描述

(6)P帧分析

在这里插入图片描述
红色区域为帧内编码,绿色区域为P帧间编码。

L0为前向预测
L1为后向预测
Li为双向预测

绿线表示运动矢量。由于镜头基本没有移动,所以大部分宏块类型均为P_skip,即无需重新编码。
统计值:
在这里插入图片描述

(7)B帧分析

在这里插入图片描述

蓝色区域为B帧间编码。

静态镜头,运动矢量不显著。

统计值:

在这里插入图片描述

三、编码实验

(1)不同编码方式的定量对比

下面我们对6种GOP结构的5种比特率的H.264文件进行视频质量客观评价,评价指标采用Y分量的PSNR (dB)。由于编码后H.264文件的实际比特率与目标比特率之间有一定误差,因此我们以实际比特率进行率失真曲线的绘制。

(2)解码

修改deconder.cfg中输入输出文件名,直接通过命令行运行exe程序。
在这里插入图片描述在这里插入图片描述得到解码后的YUV文件。

(3)编码

a.固定码率

InputFile             = "test_rec.yuv"       # Input sequence
FramesToBeEncoded     = 60      # Number of frames to be coded
FrameRate             = 30.0   # Frame Rate per second 
SourceWidth           = 854    # Source frame width
SourceHeight          = 480    # Source frame height
OutputWidth           = 864    # Output frame width
OutputHeight          = 480    # Output frame height
IntraPeriod           = 15   # Period of I-pictures   (0=only first)
NumberBFrames          = 2  # Number of B coded frames 
HierarchicalCoding      =  0  # B hierarchical coding (0= off, 1= 2 layers, 2= 2 full hierarchy, 3 = explicit)
RateControlEnable       = 1     # 0 Disable, 1 Enable
Bitrate                 = 80000 # Bitrate(bps)

Bitrate参数为码率,此处设置为8000kbps。
在这里插入图片描述
依次生成GOP=15, 2B帧; GOP=12,2B帧;GOP=9,2B帧;GOP=4,1B帧;GOP=12,无B帧;GOP=1,全I帧。

b.固定GOP结构

固定GOP长度为12,2B帧。依次生成码率为400kbps,800kbps,1000kbps,1200kbps

四、实验结果

(1)主观视频质量评价

相同码率下,GOP越长,B帧数目越小,图像质量越好。全I帧图像质量较差。
相同GOP结构下,码率越高,图像质量越好。

(2)率失真曲线

采用PSNR作为评价指标
在这里插入图片描述在这里插入图片描述

从图中可以看到,在码率相同的前提下,视频质量由好到差为:GOP12 (0B) > GOP15 (2B) > GOP12 (2B) > GOP9 (2B) > GOP4 (1B) > GOP1 (all-I)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值