H.264实验

H.264实验

一、H.264简介

1、什么是H.264

H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H.264是ITU-T以H.26x系列为名称命名的视频编解码技术标准之一。该标准最早来自于ITU-T的称之为H.26L的项目的开发。H.26L这个名称虽然不太常见,但是一直被使用着。H.264是ITU-T以H.26x系列为名称命名的标准之一,AVC是ISO/IEC MPEG一方的称呼。
H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明确的说明它两方面的开发者。
H264标准各主要部分有Access Unit delimiter(访问单元分割符),SEI(附加增强信息),primary coded picture(基本图像编码),Redundant Coded Picture(冗余图像编码)。还有Instantaneous Decoding Refresh(IDR,即时解码刷新)、Hypothetical Reference Decoder(HRD,假想参考解码)、Hypothetical Stream Scheduler(HSS,假想码流调度器)。

2、H.264优势

  • 低码率(Low Bit Rate):和MPEG2和MPEG4 ASP等压缩技术相比,在同等图像质量下,采用H.264技术压缩后的数据量只有MPEG2的1/8,MPEG4的1/3。
  • 高质量的图像:H.264能提供连续、流畅的高质量图像(DVD质量)。
  • 容错能力强:H.264提供了解决在不稳定网络环境下容易发生的丢包等错误的必要工具。
  • 网络适应性强:H.264提供了网络抽象层(Network Abstraction Layer),使得H.264的文件能容易地在不同网络上传输(例如互联网,CDMA,GPRS,WCDMA,CDMA2000等)。

H.264最大的优势是具有很高的数据压缩比率,在同等图像质量的条件下,H.264的压缩比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。举个例子,原始文件的大小如果为88GB,采用MPEG-2压缩标准压缩后变成3.5GB,压缩比为25∶1,而采用H.264压缩标准压缩后变为879MB,从88GB到879MB,H.264的压缩比达到惊人的102∶1。低码率(Low Bit Rate)对H.264的高的压缩比起到了重要的作用,和MPEG-2和MPEG-4 ASP等压缩技术相比,H.264压缩技术将大大节省用户的下载时间和数据流量收费。尤其值得一提的是,H.264在具有高压缩比的同时还拥有高质量流畅的图像,正因为如此,经过H.264压缩的视频数据,在网络传输过程中所需要的带宽更少,也更加经济。

3、H.264特点

H264标准的主要特点如下:

  • 更高的编码效率:同H.263等标准的特率效率相比,能够平均节省大于50%的码率。
  • 高质量的视频画面:H.264能够在低码率情况下提供高质量的视频图像,在较低带宽上提供高质量的图像传输是H.264的应用亮点。
  • 提高网络适应能力:H.264可以工作在实时通信应用(如视频会议)低延时模式下,也可以工作在没有延时的视频存储或视频流服务器中。
  • 采用混合编码结构:同H.263相同,H.264也使用采用DCT变换编码加DPCM的差分编码的混合编码结构,还增加了如多模式运动估计、帧内预测、多帧预测、基于内容的变长编码、4x4二维整数变换等新的编码方式,提高了编码效率。
  • H.264的编码选项较少:在H.263中编码时往往需要设置相当多选项,增加了编码的难度,而H.264做到了力求简洁的“回归基本”,降低了编码时复杂度。
  • H.264可以应用在不同场合:H.264可以根据不同的环境使用不同的传输和播放速率,并且提供了丰富的错误处理工具,可以很好的控制或消除丢包和误码。
  • 错误恢复功能:H.264提供了解决网络传输包丢失的问题的工具,适用于在高误码率传输的无线网络中传输视频数据。
  • 较高的复杂度:264性能的改进是以增加复杂性为代价而获得的。据估计,H.264编码的计算复杂度大约相当于H.263的3倍,解码复杂度大约相当于H.263的2倍。

二、解码.264文件,生成YUV文件

这里我们选用老师所给的两个264文件进行试验。
首先需要将两个264文件进行解码,得到相应的YUV文件。
在这里只需要修改配置文件如下即可得到YUV文件。
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、将YUV重新编码为H.264文件

1、固定码率,不同的GOP长度及形状编码

设定码率都为45000kb/s,为了方便观看,成功截图只以第一个为例

1)GOP=15,2B帧

更改GOP长度

IntraPeriod           = 15   # Period of I-pictures   (0=only first)

更改B帧数量

NumberBFrames           = 2  # Number of B coded frames inserted (0=not used)
RCUpdateMode            = 3     # Rate Control type. Modes supported :
                                # 0 = original JM rate control,
                                # 1 = rate control that is applied to all frames regardless of the slice type,
                                # 2 = original plus intelligent QP selection for I and B slices (including Hierarchical),
                                # 3 = original + hybrid quadratic rate control for I and B slice using bit rate statistics

2)GOP=12,2B帧

更改GOP长度

IntraPeriod           = 12   # Period of I-pictures   (0=only first)

更改B帧数量

NumberBFrames          = 2  # Number of B coded frames inserted (0=not used)

3)GOP=9,2B帧

更改GOP长度

IntraPeriod           = 9   # Period of I-pictures   (0=only first)

更改B帧数量

NumberBFrames          = 2  # Number of B coded frames inserted (0=not used)

4)GOP=4,1B帧

更改GOP长度

IntraPeriod           = 4   # Period of I-pictures   (0=only first)

更改B帧数量

NumberBFrames          = 1  # Number of B coded frames inserted (0=not used)

5)GOP=12,无B帧

更改GOP长度

IntraPeriod           = 12   # Period of I-pictures   (0=only first)

更改B帧数量

NumberBFrames          = 0  # Number of B coded frames inserted (0=not used)

6)GOP=1,全I帧

更改GOP长度

IntraPeriod           = 1   # Period of I-pictures   (0=only first)

更改B帧数量

NumberBFrames          = 0  # Number of B coded frames inserted (0=not used)

2、相同的GOP长度及形状编码,不同的码率

这里固定GOP长度为15帧,2B帧

1)40000kb/s

只需更改下面两个参数即可,为了方便观看,成功截图只以第一个为例,剩下的给出PSNR值

RateControlEnable       = 1     # 0 Disable, 1 Enable
Bitrate                 = 40000 # Bitrate(bps)

在这里插入图片描述

在这里插入图片描述

2)20000kb/s

RateControlEnable       = 1     # 0 Disable, 1 Enable
Bitrate                 = 20000 # Bitrate(bps)

在这里插入图片描述

3)10000kb/s

RateControlEnable       = 1     # 0 Disable, 1 Enable
Bitrate                 = 10000 # Bitrate(bps)

在这里插入图片描述

3)5000kb/s

RateControlEnable       = 1     # 0 Disable, 1 Enable
Bitrate                 = 5000 # Bitrate(bps)

在这里插入图片描述

4)4000kb/s

RateControlEnable       = 1     # 0 Disable, 1 Enable
Bitrate                 = 1000 # Bitrate(bps)

在这里插入图片描述

5)1000kb/s

RateControlEnable       = 1     # 0 Disable, 1 Enable
Bitrate                 = 800 # Bitrate(bps)

在这里插入图片描述

6)600kb/s

RateControlEnable       = 1     # 0 Disable, 1 Enable
Bitrate                 = 600 # Bitrate(bps)

在这里插入图片描述

7)200kb/s

RateControlEnable       = 1     # 0 Disable, 1 Enable
Bitrate                 = 400 # Bitrate(bps)

在这里插入图片描述

三、分析码流的各种编码模式和运动矢量

以1000kbps码率,GOP长度15,GOP形状2B为例:
在这里插入图片描述
由图中可看出,显示顺序为IBBPBBPBBPBBP,但由于进行了帧重排,编解码顺序为与显示顺序不同。
此处以第一组IPBB(编解码)为例:

四、用播放器查看所生成码流的质量

1、1000kbps码率,GOP长度15,GOP形状2B的视频

在这里插入图片描述

2、200kbps码率,GOP长度15,GOP形状2B的视频

在这里插入图片描述

可以看到,相比于1000kps码率的,该图像变得有些模糊。

五、生成率失真曲线

由生成的码流数据可以得到以下表格
在这里插入图片描述

并由上表可以画出下图
在这里插入图片描述

六、分析H.264文件

1、SPS和PPS信息

用H264Visa.exe进行分析

1)sps——序列参数集 (Sequence parameter set)

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

a)profile_idc

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

b)level_idc

在这里插入图片描述
在这里插入图片描述

c)seq_parameter_set_id

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

d)log2_max_frame_num_minus4

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

e)pic_order_cnt_type

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

f)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。
在这里插入图片描述

g)num_ref_frames

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

h)gaps_in_frame_num_value_allowed_flag

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

i) pic_width_in_mbs_minus1

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

j)pic_height_in_map_units_minus1

因此图像的实际高度为16 ×(pic_height_in_map_units_minus1+1) = 16×(22+1)= 368
在这里插入图片描述
比对视频信息,发现与结果一致:
在这里插入图片描述

k)frame_mbs_only_flag

在本文件中,frame_mbs_only_flag=1。
在这里插入图片描述
在这里插入图片描述

2)PPS

在这里插入图片描述

a)pic_parameter_set_id

当前文件pic_parameter_set_id=0。
在这里插入图片描述

b)seq_parameter_set_id

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

c) entropy_coding_mode_flag

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

d)pic_order_present_flag

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

e)num_slice_groups_minus1

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

f) num_ref_idx_l0_default_active_minus1

当前文件中,num_ref_idx_l0_default_active_minus1=15
在这里插入图片描述

g)num_ref_idx_l1_default_active_minus1

当前文件中,num_ref_idx_l0_default_active_minus1=0
在这里插入图片描述

h) weighted_pred_flag

在这里插入图片描述

当前文件中,weighted_pred_flag=1。

i)weighted_bipred_idc

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

j)pic_init_qp_minus26

当前文件中,pic_init_qp_minus26=0
在这里插入图片描述

k)pic_init_qs_minus26

当前文件中,pic_init_qs_minus26=0
在这里插入图片描述

l)chroma_qp_index_offset

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

m)deblocking_filter_control_present_flag

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

n) constrained_intra_pred_flag

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

o) redundant_pic_cnt_present_flag

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

p) transform_8x8_mode_flag

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

q)pic_scaling_matrix_present_flag

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

2、以一个GOP为例分析

1)每个图像帧的类型及所用的编码比特数、QP值

在这里插入图片描述
由上图可知此文件为IPPPPP格式,只有I帧与P帧,第一个为I帧剩下全为P帧
在这里插入图片描述
由上图可知I帧的编码比特数为269928bits、QP值为26
在这里插入图片描述
第一个P帧比特数为5024bits、QP值为26,剩下的帧也可以这样查看,在这里不再展示。

2)图像帧号为横坐标、每帧所用比特数为纵坐标的曲线图

统计每个帧所用的bit数,可以得到下表
在这里插入图片描述

并由上表可以画出下图
在这里插入图片描述

3)图像帧号为横坐标、每帧所用QP为纵坐标的曲线图

统计每个帧所用的QP值,可以得到下表
在这里插入图片描述

并由上表可以画出下图
在这里插入图片描述

4)第一个I帧

在这里插入图片描述
其中I帧,完全使用帧内编码,编码类型全部为16*16,并且其中分配bit数可看下图,块中格数少的分配bit数少,块中小格多的分配bit数多
在这里插入图片描述

5)第一个P帧

在这里插入图片描述
可以看到运动矢量如下:绿色的点为运动矢量因为该例子几乎没有运动所以为点
在这里插入图片描述

如下图所示,使用了帧内编码和帧间编码,绿色的格子为skip有1554个,红色的格子为帧内编码有57个,其中有44与1616格式,看红色格子中小格子数量。
在这里插入图片描述

6)B帧

因为所提供的视频没有B帧,因此这里采用别的视频对B帧讲解
在这里插入图片描述
该帧完全使用帧间编码。黄色为B_skip宏块,占737/920=80.11%。

其余部分上课也与老师较完全的讨论过,这里不在做截图展示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值