天天看点

视频编码视频编码基本原理变换编码熵编码运动估计和运动补偿混合编码分辨率、帧率和码率主流视频编码器常见视频格式

视频编码

  • 视频编码基本原理
  • 变换编码
  • 熵编码
  • 运动估计和运动补偿
  • 混合编码
  • 分辨率、帧率和码率
  • 主流视频编码器
  • 常见视频格式
    • H.264
      • H.264 主要特点

视频编码基本原理

视频信号的冗余信息

  • 以记录数字视频的 YUV 分量格式为例,YUV 分别代表亮度与两个色差信号。例如对于现有的 PAL 制电视系统,其亮度信号采样频率为 13.5MHz;色度信号的频带通常为亮度信号的一半或更少,为 6.75MHz 或 3.375MHz。以 4:2:2 的采样频率为例,Y 信号采用 13.5MHz,色度信号 U 和 V 采用 6.75MHz 采样,采样信号以 8bit 量化,则可以计算出数字视频的码率为:

      13.5 x 8 + 6.75 x 8 + 6.75 x 8 = 216 Mbit/s

  • 如此大的数据量如果直接进行存储或传输将会遇到很大困难,因此必须采用压缩技术以减少码率。数字化后的视频信号能进行压缩主要依据两个基本条件:
    1. 数据冗余

      例如如空间冗余、时间冗余、结构冗余、信息熵冗余等,即图像的各像素之间存在着很强的相关性。消除这些冗余并不会导致信息损失,属于无损压缩。例如如空间冗余、时间冗余、结构冗余、信息熵冗余等,即图像的各像素之间存在着很强的相关性。消除这些冗余并不会导致信息损失,属于无损压缩。

    2. 视觉冗余

      人眼的一些特性比如亮度辨别阈值,视觉阈值,对亮度和色度的敏感度不同,使得在编码的时候引入适量的误差,也不会被察觉出来。可以利用人眼的视觉特性,以一定的客观失真换取数据压缩。这种压缩属于有损压缩。

  • 数字视频信号的压缩正是基于上述两种条件,使得视频数据量得以极大的压缩,有利于传输和存储。一般的数字视频压缩编码方法都是混合编码,即将变换编码,运动估计和运动补偿,以及熵编码三种方式相结合来进行压缩编码。通常使用变换编码来消去除图像的帧内冗余,用运动估计和运动补偿来去除图像的帧间冗余,用熵编码来进一步提高压缩的效率。

变换编码

变换编码的作用是将空间域描述的图像信号变换到频率域,然后对变换后的系数进行编码处理。一般来说,图像在空间上具有较强的相关性,变换到频率域可以实现去相关和能量集中。常用的正交变换有离散傅里叶变换,离散余弦变换等等。数字视频压缩过程中应用广泛的是离散余弦变换。

离散余弦变换简称为 DCT 变换。它可以将 LxL 的图像块从空间域变换为频率域。在基于 DCT 的图像压缩编码过程中,首先需要将图像分成互不重叠的图像块。假设一帧图像的大小为 1280x720,首先将其以网格状的形式分成 160x90 个尺寸为 8x8 的彼此没有重叠的图像块,接下来才能对每个图像块进行 DCT 变换。

经过分块以后,每个 8x8 点的图像块被送入 DCT 编码器,将 8x8 的图像块从空间域变换为频率域。下边左图给出一个实际 8x8 的图像块例子,图中的数字代表了每个像素的亮度值。从图上可以看出,在这个图像块中各个像素亮度值比较均匀,特别是相邻像素亮度值变化不是很大,说明图像信号具有很强的相关性。

下边右图是经过 DCT 变换后的结果。从图中可以看出经过 DCT 变换后,左上角的低频系数集中了大量能量,而右下角的高频系数上的能量很小。

视频编码视频编码基本原理变换编码熵编码运动估计和运动补偿混合编码分辨率、帧率和码率主流视频编码器常见视频格式

信号经过 DCT 变换后需要进行量化。由于人的眼睛对图像的低频特性比如物体的总体亮度之类的信息很敏感,而对图像中的高频细节信息不敏感,因此在传送过程中可以少传或不传送高频信息,只传送低频部分。量化过程通过对低频区的系数进行细量化,高频区的系数进行粗量化,去除了人眼不敏感的高频信息,从而降低信息传送量。因此,量化是一个有损压缩的过程,而且是视频压缩编码中质量损伤的主要原因。量化的过程可以用下面的公式表示:

视频编码视频编码基本原理变换编码熵编码运动估计和运动补偿混合编码分辨率、帧率和码率主流视频编码器常见视频格式

其中 FQ(u,v)表示经过量化后的 DCT 系数;F(u,v)表示量化前的 DCT 系数;Q(u,v)表示量化加权矩阵;q 表示量化步长;round 表示归整,即将输出的值取为与之最接近的整数值。合理选择量化系数,对变换后的图像块进行量化后的结果如下图所示,可见 DCT 系数经过量化之后大部分经变为 0,而只有很少一部分系数为非零值,此时只需将这些非零值进行压缩编码即可。

视频编码视频编码基本原理变换编码熵编码运动估计和运动补偿混合编码分辨率、帧率和码率主流视频编码器常见视频格式

熵编码

熵编码是因编码后的平均码长接近信源熵值而得名。熵编码多用可变字长编码(VLC,Variable Length Coding)实现。其基本原理是对信源中出现概率大的符号赋予短码,对于出现概率小的符号赋予长码,从而在统计上获得较短的平均码长。可变字长编码通常有霍夫曼编码、算术编码、游程编码等。其中游程编码是一种十分简单的压缩方法,它的压缩效率不高,但编码、解码速度快,仍被得到广泛的应用,特别在变换编码之后使用游程编码,有很好的效果。

首先要在量化器输出直流系数后对紧跟其后的交流系数进行 Z 型扫描(如下图箭头线所示)。Z 型扫描将二维的量化系数转换为一维的序列,并在此基础上进行游程编码。最后再对游程编码后的数据进行另一种变长编码,例如霍夫曼编码。通过这种变长编码,进一步提高编码的效率。

视频编码视频编码基本原理变换编码熵编码运动估计和运动补偿混合编码分辨率、帧率和码率主流视频编码器常见视频格式

运动估计和运动补偿

运动估计(Motion Estimation)和运动补偿(Motion Compensation)是消除图像序列时间方向相关性的有效手段。上文介绍的 DCT 变换、量化、熵编码的方法是在一帧图像的基础上进行,通过这些方法可以消除图像内部各像素间在空间上的相关性。实际上图像信号除了空间上的相关性之外,还有时间上的相关性。例如对于像新闻联播这种背景静止,画面主体运动较小的数字视频,每一幅画面之间的区别很小,画面之间的相关性很大。对于这种情况我们没有必要对每一帧图像单独进行编码,而是可以只对相邻视频帧中变化的部分进行编码,从而进一步减小数据量,这方面的工作是由运动估计和运动补偿来实现的。

运动估计技术一般将当前的输入图像分割成若干彼此不相重叠的小图像子块,例如一帧图像的大小为 1280x720,首先将其以网格状的形式分成 40x45 个尺寸为 16x16 的彼此没有重叠的图像块,然后在前一图像或者后一个图像某个搜索窗口的范围内为每一个图像块寻找一个与之最为相似的图像块。这个搜寻的过程叫做运动估计。通过计算最相似的图像块与该图像块之间的位置信息,可以得到一个运动矢量。这样在编码过程中就可以将当前图像中的块与参考图像运动矢量所指向的最相似的图像块相减,得到一个残差图像块,由于残差图像块中的每个像素值很小,所以在压缩编码中可以获得更高的压缩比。这个相减过程叫运动补偿。

由于编码过程中需要使用参考图像来进行运动估计和运动补偿,因此参考图像的选择显得很重要。一般情况下编码器的将输入的每一帧图像根据其参考图像的不同分成3种不同的类型:I(Intra)帧、B(Bidirection prediction)帧、P(Prediction)帧,如图所示。

视频编码视频编码基本原理变换编码熵编码运动估计和运动补偿混合编码分辨率、帧率和码率主流视频编码器常见视频格式

I 帧只使用本帧内的数据进行编码,在编码过程中它不需要进行运动估计和运动补偿。显然,由于 I 帧没有消除时间方向的相关性,所以压缩比相对不高。P 帧在编码过程中使用一个前面的 I 帧或 P 帧作为参考图像进行运动补偿,实际上是对当前图像与参考图像的差值进行编码。B 帧的编码方式与 P 帧相似,唯一不同的地方是在编码过程中它要使用一个前面的 I 帧或 P 帧和一个后面的 I 帧或 P 帧进行预测。由此可见,每一个 P 帧的编码需要利用一帧图像作为参考图像,而 B 帧则需要两帧图像作为参考。相比之下,B 帧比 P 帧拥有更高的压缩比。

混合编码

上面介绍了视频压缩编码过程中的几个重要的方法。在实际应用中这几个方法不是分离的,通常将它们结合起来使用以达到最好的压缩效果。下图给出了混合编码(即变换编码 + 运动估计和运动补偿 + 熵编码)的模型。该模型普遍应用于 MPEG1,MPEG2,H.264 等标准中。

视频编码视频编码基本原理变换编码熵编码运动估计和运动补偿混合编码分辨率、帧率和码率主流视频编码器常见视频格式

从图中我们可以看到,当前输入的图像首先要经过分块,分块得到的图像块要与经过运动补偿的预测图像相减得到差值图像 X,然后对该差值图像块进行 DCT 变换和量化,量化输出的数据有两个不同的去处:一个是送给熵编码器进行编码,编码后的码流输出到一个缓存器中保存,等待传送出去。另一个应用是进行反量化和反变化后的到信号 X’,该信号将与运动补偿输出的图像块相加得到新的预测图像信号,并将新的预测图像块送至帧存储器。

分辨率、帧率和码率

视频是由连续的图像构成的。每一张图像,我们称为一帧(frame)。图像则是由像素(pixel)构成的。一张图像有多少像素,称为这个图像的 分辨率。比如说 1920×1080 的图像,说明它是由横纵 1920×1080 个像素点构成。视频的分辨率就是每一帧图像的分辨率。

一个视频,每一秒由多少图像构成,称为这个视频的 帧率(frame-rate)。常见的帧率有

  • 24000 / 1001 = 23.976
  • 30000 / 1001 = 29.970
  • 60000 / 1001 = 59.940
  • 等等

这个数字是一秒钟内闪过的图像的数量。比如 23.976,就是 1001 秒内,有 24000 张图像。视频的帧率是可以是恒定的(CFR, Const Frame-Rate),也可以是变化的(VFR, Variable Frame-Rate)

码率 的定义是视频文件体积除以时间。单位一般是 Kbps(Kbit/s)或者 Mbps(Mbit/s)。注意1B(Byte)= 8b(bit)。所以一个 24 分钟,900 MB 的视频:

  • 体积:900 MB = 900 MByte = 7200 Mbit
  • 时间:24 min = 1440 s
  • 码率:7200 / 1440 = 5000 Kbps = 5 Mbps

当视频文件的时长基本相同的时候,码率和体积基本上是等价的,都是用来描述视频大小的参数。长度分辨率都相同的文件,体积不同,实际上就是码率不同。码率也可以解读为单位时间内,用来记录视频的数据总量。视频的码率越高,意味着用来记录视频的数据量越多,潜在的解读就是视频可以拥有更好的质量。

主流视频编码器

Codec Creator / Maintainer First public release date License Patented compression formats
x264 x264 team 2003 GNU GPL MPEG-4 AVC / H.264
x265 x265 team 2013 GNU GPL HEVC / H.265
Xvid Xvid team 2001 GNU GPL MPEG-4 ASP
FFmpeg (libavcodec) FFmpeg team 2000 GNU LGPL MPEG-1, MPEG-2, MPEG-4 ASP, H.261, H.263, VC-3, WMV7, WMV8, MJPEG, MS-MPEG-4v3, DV, Sorenson codec etc.
DivX DivX, Inc. 2001 Proprietary MPEG-4 ASP, H.264
libvpx (VP9) Google 2013 BSD-style Patented, but freely licensed
Windows Media Encoder Microsoft 1999 Proprietary VC-1
RealVideo RealNetworks 1997 Proprietary H.263, RealVideo

常见视频格式

Name File extension(s) Container format Video coding format(s) Audio coding format(s) Notes
WebM .webm Matroska VP8, VP9 Vorbis, Opus Royalty-free format created for HTML5 video.
Matroska .mkv Matroska any any
Flash Video (FLV) .flv FLV VP6, Sorenson Spark, Screen video, H.264 MP3,ADPCM, Nellymoser, Speex, AAC
AVI .avi AVI any any Uses RIFF
Windows Media Video .wmv ASF WMV, WMV-Screen, WMV-Image WMA, Sipro ACELP.net
RealMedia Variable Bitrate (RMVB) .rmvb RealMedia RealVideo RealAudio Made for RealPlayer
Advanced Systems Format (ASF) .asf ASF any any
MPEG-4 Part 14 (MP4) .mp4, .m4p, .m4v MPEG-4 Part 12 H.264, MPEG-4 Part 2, MPEG-2, MPEG-1 AAC, MP3, others

H.264

H.264 是由 ITU-T 的 VCEG(视频编码专家组)和 ISO / IEC 的 MPEG(活动图像编码专家组)联合组建的联合视频组(JVT:joint video team)提出的一个新的数字视频编码标准,它既是 ITU-T 的H.264,又是 ISO/IEC 的 MPEG-4 的第十部分。而国内业界通常所说的 MPEG-4 是 MPEG-4 的第二部分。即:

  H.264 = MPEG-4(第十部分,也叫 ISO / IEC 14496-10)= MPEG-4 AVC

因此,不论是 MPEG-4 AVC、MPEG-4 Part 10,还是 ISO / IEC 14496-10,都是指 H.264。H.264 也是 MPEG-4 的一部分。

H.264 标准从 1998 年 1 月份开始草案征集,到 2003 年 7 月,整套 H.264 (ISO / IEC 14496-10)规范定稿。2005 年 1 月,MPEG 组织正式发布了 H.264 验证报告,从各个方面论证了H.264 的可用性以及各种工具集的效果,从标准的角度,印证 H.264 的成熟性。

H.264 在压缩编码效率、视频内容自适性处理能力方面及网络层面,特别是对 IP 网络及移动网络的自适应处理能力、抗干扰能力与健壮性等方面,相比 H.263 / MPEG-4 均有大幅度提高。H.264 的应用相当广泛,包括固定或移动的可视电话、实时视频会议、视频监控、流媒体、多媒体视频、IPTV、手机电视等,这也是业内普遍看好它的重要原因。

H.264 主要特点

  • 更高的编码效率:同 H.263 等标准的特率效率相比,能够平均节省大于 50% 的码率。
  • 高质量的视频画面:H.264 能够在低码率情况下提供高质量的视频图像,在较低带宽上提供高质量的图像传输是 H.264 的应用亮点。和 MPEG2 和 MPEG4 ASP 等压缩技术相比,在同等图像质量下,采用 H.264 技术压缩后的数据量只有 MPEG2 的 1/8,MPEG4 的 1/3。
  • 提高网络适应能力:H.264 可以工作在实时通信应用(如视频会议)低延时模式下,也可以工作在没有延时的视频存储或视频流服务器中。
  • 采用混合编码结构:同 H.263 相同,H.264 也使用采用 DCT 变换编码加 DPCM 的差分编码的混合编码结构,还增加了如多模式运动估计、帧内预测、多帧预测、基于内容的变长编码、4x4 二维整数变换等新的编码方式,提高了编码效率。
  • H.264 的编码选项较少:在 H.263 中编码时往往需要设置相当多选项,增加了编码的难度,而 H.264 做到了力求简洁的“回归基本”,降低了编码时复杂度。
  • H.264 可以应用在不同场合:H.264 可以根据不同的环境使用不同的传输和播放速率,并且提供了丰富的错误处理工具,可以很好的控制或消除丢包和误码。
  • 错误恢复功能:H.264 提供了解决网络传输包丢失的问题的工具,适用于在高误码率传输的无线网络中传输视频数据。
  • 较高的复杂度:H.264 性能的改进是以增加复杂性为代价而获得的。据估计,H.264 编码的计算复杂度大约相当于 H.263 的 3 倍,解码复杂度大约相当于 H.263 的 2 倍。
视频编码视频编码基本原理变换编码熵编码运动估计和运动补偿混合编码分辨率、帧率和码率主流视频编码器常见视频格式

– EOF –

本文前半部分引用自雷神的博客:https://blog.csdn.net/leixiaohua1020/article/details/28114081