H.264 / MPEG-4 AVC & 宏块数

一、IPCM宏块简介

在H.264中,一个宏块包括16*16个像素,I宏块有三种形式:

    1. 16个I4x4编码方式组成的宏块(为了方便,简称I4x4方式的宏块);
    1. I16x16宏块;
    1. IPCM宏块(特殊)

分块越细,就越准确,所以I4x4编码方式适合编码那些纹理比较复杂的宏块,而I16x16编码方式就更加笼统,适合编码那些比较平滑的区域。

最特别的是IPCM宏块,这种宏块的脾气很古怪:不预测,没残差,不变换,无量化等操作,而是直接传像素值,直接将最原始的yuv数据写入到码流中,可见IPCM的信息不会有任何损失,是完全无损的. 如果将视频的所有宏块都编码成IPCM宏块,那么H.264就是一个无损编码,当然,在现实中,很少有人这么做。

视频应用五类举例:

  • 1、news(新闻):变化和运动的区域比较小(比如人脸,一般占视频画面的15%),背景是静止的。

  • 2、soccer(足球):包含大面积统一方向的运动。镜头通常会在一个统一颜色的背景下(绿色)跟踪一个快速运动的物体(足球)。

  • 3、cartoon(卡通):主题在运动,背景是绝对静止的。

  • 4、panorama(全景画):包含大面积统一方向的运动,运动方向是一致的。

  • 5、rest(其他):除以上几种之外的视频都属于这一类。通常包含大量杂乱的运动,或者有很多镜头切换。

二、级别详表

H.264 / MPEG-4 AVC & 宏块数_第1张图片
具有最大特性值的级别

High Profile的最大比特率是Base / Extended / Main Profile的1.25倍,Hi10P是3倍,Hi422P / Hi444PP是4倍。
亮度采样的数量是宏块数量的16×16 = 256倍(并且每秒亮度采样的数量是每秒宏块数量的256倍)

针对表格的一些讲解说明:

Level:级别。

Max macroblocks:最大宏块数。注:宏块尺寸是16x16的。

per second:每秒(的最大宏块数)。可用于约束帧率。

per frame:每帧(的最大宏块数)。可用于约束分辨率。

Max video bit rate (kbit/s):最大视频码率。不同档次(Profile)下会有区别。

BP:Baseline Profile,基线档次。

XP:Extended Profile,进阶档次。

MP:Main Profile,主要档次。

HiP:High Profile,高级档次。

Hi10P:High 10 Profile,高级10位档次。

Hi422P:High 4:2:2 Profile,高级4:2:2档次。

Hi444PP:High 4:4:4 Predictive Profile,高级4:4:4(实验性?)档次。

Examples for high resolution @ frame rate (max stored frames):范例:高分辨率@帧率(最大存储帧数)。

三、分辨率和帧率的计算

解码图片缓冲

H.264 / AVC编码器使用先前编码的图片来预测其他图片中样本的值。这使编码器能够有效地决定对给定图像进行编码的最佳方式。在解码器处,这样的图片被存储在虚拟解码图片缓冲器(DPB)中。DPB的最大容量,以帧(或场对)为单位,如上表右列中的括号所示,可以计算如下:

capacity = min(floor(MaxDpbMbs /(PicWidthInMbs * FrameHeightInMbs)),16)

注1:floor(x)是向向下取整。

其中MaxDpbMbs是下表中作为级数的函数提供的常数值,并且PicWidthInMbs和FrameHeightInMbs是编码视频数据的图片宽度和帧高度,以宏块为单位表示(四舍五入为整数值并考虑裁剪和宏块配对时适用)。

这里以宏块数1616,480P(800480)作为例子举例:

水平宏块数(PicWidthInMbs )= ceil(视频宽度 / 16) = ceil(480 / 16) = 30

垂直宏块数(FrameHeightInMbs)= ceil(视频高度 / 16) = ceil( 800 / 16 ) = 50

注:ceil(x)为向上取整函数

每帧宏块数 = 水平宏块数 * 垂直宏块数 = 50 * 30 = 1500

查上面的级别详表,可知支持 每帧宏块数1500 的最低级别是2.2。

级别2.2所允许的 每秒最大宏块数(Max macroblocks per second) 是 20250。20250 / 1500 = 13.5。即最高支持每秒13.5帧。

你可能感兴趣的:(H.264 / MPEG-4 AVC & 宏块数)