数据压缩实验六——H.264编码实验
实验原理
实验流程
将不同的视频序列编码为.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,…
用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
用播放器观看所生成码流的质量
生成率失真曲线
调试过程
需改动的参数:
encoder.cfg
LINE194: HierarchicalCoding = 0 关闭B帧Hierarchy编码模式
LINE13/16/30/31/33/34/57/58/59: 一些基本输入输出参数
LINE73: IDRPeriod IDR(Instantaneous Decoding Refresh)帧间隔,标志着GOP的开始,所以IDRPeriod也是GOP长度。这里需要和LINE72的IntraPeriod区分,IntraPeriod是I帧间隔,而一个GOP内可以有多个I帧,但只有一个IDR帧。参考http://blog.sina.com.cn/s/blog_520811730101jlsa.html#cmt_2512661
180NumberBFrames: B帧数,指的是I帧/P帧之间的B帧数。如GOP=12,B=2时帧结构为:IBBPBBPBBPBB
LINE444/445: 调整可变输出码率
编码帧数FramesToBeEncoded的选择:要想对比不同GOP类型和不同码率下编码后的失真程度和一些参数,每次的编码帧数应相同。如果在GOP为4时只编码4帧,则无法压到比较小的输出码率,比如要求输出100kbps,在这种情况下只能输出229kbps。
实验结果
不同输出码率下每一帧编码结果及参数(GOP15B2)
设置码率(kbps) | 实际码率(kbps) | 结果 |
---|---|---|
50 | 119.81 | |
100 | 119.81 | |
200 | 192.62 | |
300 | 290.03 | |
400 | 395.44 | |
500 | 489.10 | |
600 | 591.46 |
对比发现每组前4帧的比特数都相等,随后每帧的比特数都根据设置的输出码率,有不同程度的增加。分析这是由H.264某些自适应机制决定的(?)
率失真曲线
由于输出码率设置为50k时,实际输出码率和设置为100k时的实际码率相等,猜测可能100k时已经达到码率最低底线,所以输出码率仅以100k作为起始。当输出全I帧时,实际输出码率固定在6000k,所以没有画全I帧的图像。
在相同码率下,没有B帧时的视频客观质量(Y-PSNR)最高。GOP越短,低码率的视频客观质量越高。码率和视频客观质量呈非线性关系,低码率段100-250的斜率大于高码率段250-400,在低码率段提升码率,视频客观质量提升更显著。
用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
帧类型 | 帧 |
---|---|
I帧 | |
P帧 | |
B帧 | |
B帧 |
以上几幅图片分别是用码流分析软件H264Visa,对生成的.264文件进行查看的结果。图像中的标记的是每个块的运动矢量,一个块的大小不定,从16x16~4X4。I帧为帧内编码没有运动矢量,P帧为前向预测编码,运动矢量为绿色,B帧为双向预测编码,运动矢量有红绿两种颜色。
参考:http://www.cnblogs.com/xkfz007/archive/2012/07/27/2612038.html
码流分析软件H264Visa可以查看.264文件的数据和编码信息,比如:帧信息、宏块信息、像素信息。可以查看帧序号、图片尺寸、编码方式、块类型、YUV通道等等信息。
用播放器观看所生成码流的质量
GOP长度/类型 \ 设置输出码率(kbps) | 100 | 200 | 300 | 400 |
---|---|---|---|---|
15 / 2B帧 | ||||
12 / 2B帧 | ||||
9 / 2B帧 | ||||
4 / 1B帧 | ||||
12 / 0B帧 | ||||
1 / 全I帧 |
主观上看,长GOP、无B帧的视频质量不好。比较推荐GOP长12,2B帧的方案。
另:GOP长4,1B帧码率最低只能到300k,全I帧码率为6000k,所以这两个方案在此表中没有参考价值(设置的输出码率和实际的输出码率不一致)