H264文件分析2
一、实验要求
- 将自行选择或老师给的两个264文件进行解码,得到相应的YUV文件。
- 将两个视频序列编码为.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,… - 用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息。
- 用播放器观看所生成码流的质量
- 生成率失真曲线
二、实验原理
1、h264编码
编码原理框图如下:
2、h264解码
解码原理框图如下:
三、实验步骤
0、文件准备
本次实验用到两个MP4文件,分别在线转为.264文件。
1、264文件解码
1.1 解码lan.264
文件
- 修改bin目录下的
decoder.cfg
文件:
InputFile = "lan.264" # H.264/AVC coded bitstream
OutputFile = "lan_dec.yuv" # Output file, YUV/RGB
- 运行命令
ldecod.exe -d decoder.cfg
进行解码
生成yuv文件:
1.2 解码demo.264
文件
- 修改bin目录下的
decoder.cfg
文件:
InputFile = "movie.264" # H.264/AVC coded bitstream
OutputFile = "movie_dec.yuv" # Output file, YUV/RGB
- 运行命令
ldecod.exe -d decoder.cfg
进行解码
生成yuv文件:
2、264文件编码
2.1 固定码率,以不同的GOP长度及形状编码
以刚刚解码生成的lan_dec.yuv
文件为例,取GOP=15,2B帧。
- 修改bin目录下的
encoder.cfg
文件(此处陈列需修改的内容):
# Files
##########################################################################################
InputFile = "lan_dec.yuv" # Input sequence
FramesToBeEncoded = 60 # Number of frames to be coded
SourceWidth = 320 # Source frame width
SourceHeight = 180 # Source frame height
OutputWidth = 320 # Output frame width
OutputHeight = 180 # Output frame height
##########################################################################################
# Encoder Control
##########################################################################################
IntraPeriod = 15 # Period of I-pictures (0=only first)
##########################################################################################
# B Slices
##########################################################################################
NumberBFrames = 2 # Number of B coded frames inserted (0=not used)
HierarchicalCoding = 0 # B hierarchical coding (0= off, 1= 2 layers, 2= 2 full hierarchy, 3 = explicit)
########################################################################################
#Rate control
########################################################################################
RateControlEnable = 0 # 0 Disable, 1 Enable
Bitrate = 45020 # Bitrate(bps)
RCUpdateMode = 2 # 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
#
- 运行命令
lencod.exe -d encoder.cfg
进行编码
- 方法同上,继续编码生成符合以下格式的.264文件,此处不再展示。
GOP=12,2B帧;GOP=9,2B帧;GOP=4,1B帧;GOP=12,无B帧;GOP=1,全I帧。
2.2 相同GOP长度及形状,不同码率编码
以lan_dec.yuv
文件为例,取GOP=15,2B帧,码率1000000bps。
- 修改bin目录下的
encoder.cfg
文件(在2.1的基础上仅改变码率):
OutputFile = "1000kb.264" # Bitstream
RateControlEnable = 1 # 0 Disable, 1 Enable
Bitrate = 1000000 # Bitrate(bps)
-
运行命令
lencod.exe -d encoder.cfg
进行编码
-
方法同上,继续以800kb/s,600kb/s,400kb/s,200kb/s,100kb/s的码率编码。
800kb/s:
600kb/s:
400kb/s:
200kb/s:
100kb/s:
3、分析码流
使用ESEyE软件打开生成的GOP=15,2B帧的test.264
文件,分析一组IPBB。
- I帧
- P帧
- B帧
- B帧
由以上可知:
- I帧全部都是帧内预测;
- P帧存在帧间预测和帧内预测,包括部分不编码的P_skip;
- B帧存在帧间预测和大量不编码的B_skip。
4、视频质量主观评价
对比只有码率不同的第一帧图片。
码率 | 图片 |
---|---|
1000kbps | |
800kbps | |
600kbps | |
400kbps | |
200kbps | |
100kbps | |
码率改变很大时,视频主观质量相差不大。
5、率失真曲线
以Y分量的PSNR值为y轴,对应码率为x轴作图。
可以初步得出结论:其他参数一致时,码率越高,视频质量越好。但当码率提高到一定程度时,提升效果变得不明显。
四、实验结论
视频编码效果无论从数据上看好坏与否,都要与人眼相匹配。从本次实验可以知道,一味的提升码率并不能持续的提高视频质量,人眼也较难看出质量的提升,同时,这也会造成编码成本的提升。