在前面的文章档次、层、级别中已经介绍过级别(level),H.265共定义了13个级别,1 2 2.1 3 3.1 4 4.1 5 5.1 5.2 6 6.1 6.2。那么如何选择level呢?
官方参考序列的配置文件已经为我们写好了level等参数,如果我们要使用自己的序列那么如何设置level呢?
级别(Level)是用来约束 分辨率、帧率 和 码率 的。如下图所示:
Max Luma Picture Size(samples)表示每帧亮度分量的像素数。
Max Luma Sample Rate(samples/s)表示每秒的亮度像素数。
如何通过分辨率和帧率推断level?
每个level下,图像的宽和高都要小于等于,避免图像形状过于极端引起解码问题。
例如480P(832x480)视频,每帧亮度分量的像素数=832x480=399360,由上表可知其level必须在3以上,如果帧率为60,每秒的亮度像素数=832x480x60=23961600,所有其level为3.1或以上。
例如720P(1280x720)视频,每帧亮度分量的像素数=1280x720=921600,由上表可知其level必须在3.1以上。当level为4时,其帧率至少为66846720/921600=72.5。可以看到,下面的配置文件满足这个要求。
#======== File I/O ===============
InputFile : ../../origCfP/Johnny_1280x720_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4
最大存储帧数、DPB
最大存储帧数与DPB有关——DPB:decoded picture buffer,解码图片缓存区。在做视频解码时,需要将最近的若干幅参考帧缓存起来,这个缓冲区就叫做DPB。所以最大存储帧数也是最大参考帧数(ref)。
当DPB中的图像达到了该level下最大尺寸,则DPB只能存放6帧图像。如果DPB中的图像小于该level下最大尺寸,则DPB至多能存放16帧图像(取决于图像尺寸)。
level还限制了每帧图像水平和垂直方向最大tile数量,以及每秒最大tile数。
感兴趣的请关注微信公众号Video Coding