实验要求
1.将两个264文件进行解码得到相应的YUV文件;
2.将上述两个视频序列编码为.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,…
3.用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息;
分析不同统计特性的视频图像对应的编码模式和运动矢量的特点
4.用播放器观看所生成码流的质量;
5.生成率失真曲线
编码原理
1.H.264主要特点
压缩效率高:在图像质量不变的条件下,码率只有MPEG-2的1/2;
容错能力强:H.264码流具有较强抗误码特性,可适应丢包率高、干扰严重的信道;
网络适应性好;
计算复杂度高,比MPEG-2复杂2~3倍。
2.H.264编码器框图
3.H.264/AVC与其它编码标准的差异
1)帧内预测
在空间域进行帧内预测,提高镇内编码的精确度;
2)运动估计与运动补偿
不同尺寸的块和形状,高分辨率的子像素运动估计和选择多个参考帧;
3)DCT变换
使用整数的DCT变换;
4)去块效应
为消除块效应,增加了自适应消块滤波器;
5)熵编码技术
通用变长编码(UVLC),基于上下文的自适应变长码编码(CAVLC),基于上下文的自适应二进制算术编码(CABAC)。
实验步骤
1.将两个264文件进行解码得到相应的YUV文件
在decoder_test.c文件中修改输入和输出文件名:
InputFile = "highway_qcif.264" # H.264/AVC coded bitstream
OutputFile = "highway_qcif_dec.yuv" # Output file, YUV/RGB
输出结果:
2.将YUV文件编码为.264文件
2.1不同GOP类型的参数设置:
在encoder.cfg文件中修改参数(GOP=15,2B帧):
...
##########################################################################################
# Files
##########################################################################################
InputFile = "highway_qcif_dec.yuv" # Input sequence
InputHeaderLength = 0 # If the inputfile has a header, state it's length in byte here
StartFrame = 0 # Start frame for encoding. (0-N)
FramesToBeEncoded = 30 # Number of frames to be coded
...
SourceWidth = 176 # Source frame width
SourceHeight = 144 # Source frame height
SourceResize = 0 # Resize source size for output
OutputWidth = 176 # Output frame width
OutputHeight = 144 # Output frame height
...
ReconFile = "highway_qcif_rec.yuv" # Reconstruction YUV file
OutputFile = "highway_qcif.264" # Bitstream
##########################################################################################
# Encoder Control
##########################################################################################
...
IntraPeriod = 15 # Period of I-pictures (0=only first)
...
##########################################################################################
# B Slices
##########################################################################################
NumberBFrames = 2 # Number of B coded frames inserted (0=not
disable, N <= NumberReferenceFrames)
...
HierarchicalCoding = 0 # B hierarchical coding (0= off, 1= 2 layers, 2= 2 full hierarchy, 3 = explicit)
...
输出结果:
同理可得(GOP=4,1B帧):
2.2相同GOP长度及类型,不同的码率(GOP=15,2B帧,修改码率)
########################################################################################
#Rate control
########################################################################################
RateControlEnable = 1 # 0 Disable, 1 Enable
Bitrate = 1000000 # Bitrate(bps)
...
输出结果:
3.用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
GOP=15,2B
第一帧一定是帧内编码(I帧)
Slice Type:I Slice
第二第三帧为帧间预测帧(B帧)
Slice Type:B Slice
第四帧为前向预测帧(P帧)
Slice Type:P Slice
4.用播放器观看所生成码流的质量
【GOP=15,2B帧,1000kbps】
该帧实际码率为615.26kbps,其Y-PSNR为53.422dB。
【GOP=4,1B帧,1000000bps】
该帧实际码率为659.76kbps,其Y-PSNR为59.393dB。
5.生成率失真曲线