一. 实验原理
H.264采用了变换编码、基于运动补偿的帧间预测和熵编码的混合框架。且增加了帧内预测,变换采用整数变换,熵编码采用自适应的方法。
H.264编码器的组成内容:
帧内预测I
帧间预测P、B
变换与量化
熵编码
环路滤波
NAL
二. 实验流程
将不同的视频序列编码为.264文件
固定码率,以不同的GOP长度及形状编码
GOP=15,2B帧;GOP=12,2B帧,GOP=9,2B帧
GOP=4,1B帧;GOP=12,无B帧;GOP=1,全I帧相同的GOP长度及形状,不同的码率
例:300kb/s, 200kb/s,100kb/s,…
用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
用播放器观看所生成码流的质量
生成率失真曲线
三. 实验代码
修改代码如下:
InputFile = "stefan_cif.yuv" # Input sequence
/*输入文件名*/
FramesToBeEncoded = 25 # Number of frames to be coded
/*进行编码的帧数*/
SourceWidth = 352 # Source frame width
/*输入文件的宽*/
SourceHeight = 288 # Source frame height
/*输入文件的高*/
OutputWidth = 352 # Output frame width
/*输出文件的宽*/
OutputHeight = 288 # Output frame height
/*输出文件的高*/
ReconFile = "stefan.yuv" # Reconstruction YUV file
/*重建的yuv文件*/
OutputFile = "stefan.264" # Bitstream
/*输出文件名*/
StatsFile = "stats2.dat" # Coding statistics file
/*编码得到的统计文件*/
与GOP有关的代码
IDRPeriod = 15 # Period of IDR pictures (0=only first)
/*GOP长度*/
NumberBFrames = 2 # Number of B coded frames inserted (0=not used)
/*GOP形状*/
与码率相关的代码
Bitrate = 400000 # Bitrate(bps)
四. 实验结果
测试了两个序列,src01.yuv和stefan_cif.yuv文件
二者率失真曲线
src01.yuv的率失真曲线
stefan_cif.yuv的率失真曲线
由于输出码率设置为50k时,实际的psnr与100k的psnr相似,所以100k左右可能接近于最低码率。
但是对于全I帧的情况,psnr没有变化且高于其他情况的psnr,故没有在图中显示。
从图中可知:在相同码率下,比较psnr,低码率情况下,B帧越少,psnr越低,中高码率情况下,B帧越少,psnr越高。
相同GOP长度和形状情况下,码率越大,psnr越大。