视频编解码器

视频编解码器（Video Codec）是指一个能够对数字视频进行压缩或者解压缩的程序或者设备。通常这种压缩属于有损数据压缩。历史上，视频信号是以模拟形式存储在磁带上的。随着CD的出现并进入市场，音频信号以数字化方式进行存储，视频信号也开始使用数字化格式，一些相关技术也开始随之发展起来。

音频和视频都需要可定制的压缩方法。工程师和数学家们尝试了很多种不同的办法来试图解决这个问题。

一个复杂的平衡关系存在于以下因素之间：视频的质量、用来表示视频所需要的数据量（通常称之为码率）、编码算法和解码算法的复杂度、针对数据丢失和错误的鲁棒性（Robustness）、编辑的方便性、随机访问、编码算法设计的完美性、端到端的延时以及其它一些因素。

## 应用

在日常生活中，视频编解码器的应用非常广泛。例如在DVD（MPEG-2）中，在VCD（MPEG-1）中，在各种卫星和陆上电视广播系统中，在互联网上。在线的视频素材通常是使用很多种不同的编解码器进行压缩的，为了能够正确地浏览这些素材，用户需要下载并安装编解码器包--一种为PC准备的编译好的编解码器组件。

由用户自己来进行视频的压缩已经随着DVD刻录机的出现而越来越风行。由于商店中贩卖的DVD通常容量比较大（双层）而目前双层DVD刻录机还不太普及，所以用户有时候会对DVD的素材进行二次压缩使其能够在一张单面DVD上完整地存储。

## 视频编解码器设计

一个典型的数字视频编解码器的第一步是将从摄像机输入的视频从RGB色度空间转换到YCbCr色度空间，而且通常还伴有色度抽样来生成4:2:0格式的视频（有时候在隔行扫描的情况下会采用4:2:2的抽样方式）。转换到YCbCr色度空间会带来两点好处：

1)这样做部分的解除了色度信号中的相关性，提高了可压缩能力。

2)这样做将亮度信号分离出来，而亮度信号对视觉感觉是最重要的，相对来说色度信号对视觉感觉就不是那么重要，可以抽样到较低的分辨率（4:2:0或者4:2:2）而不影响人观看的感觉。

在真正的编码之前，对空域或者时域抽样可以有效地降低原始视频数据的数据量。

输入的视频图像通常被分割为宏块分别进行编码，宏块的大小通常是16x16的亮度块信息和对应的色度块信息。然后使用分块的运动补偿从已编码的帧对当前帧的数据进行预测。之后，使用块变换或者子带分解来减少空域的统计相关性。最常见的变换是8x8的离散余弦变换（DCT fordiscrete cosine transform）。变换的输出系数接下来被量化，量化后的系数进行熵编码并成为输出码流的一部分。实际上在使用DCT变换的时候，量化后的二维的系数通常使用Zig-zag扫描将系数表示为一维的，再通过对连续0系数的个数和非0系数的大小（Level）进行编码得到一个符号，通常也有特殊的符号来表示后面剩余的所有系数全部等于0。这时候的熵编码通常使用变长编码。

解码基本上执行和编码的过程完全相反的过程。其中不能被完全恢复原来信息的步骤是量化。这时候，要尽可能接近的恢复原来的信息。这个过程被称为反量化，尽管量化本身已经注定是个不可逆过程。

视频编解码器的设计通常是标准化的，也就是说，有发布的文档来准确的规范如何进行。实际上，为了使编码的码流具有互操作性（即由A编码器编成的码流可以由B解码器解码，反之亦然），仅仅对解码器的解码过程进行规范就足够了。通常编码的过程并不完全被一个标准所定义，用户有设计自己编码器的自由，只要用户设计的编码器编码产生的码流是符合解码规范的就可以了。因此，由不同的编码器对同样的视频源按照同样的标准进行编码，再解码后输出图像的质量往往可能相差很多。

## 常用的视频编解码器

很多视频编解码器可以很容易的在个人计算机和消费电子产品上实现，这使得在这些设备上有可能同时实现多种视频编解码器，这避免了由于兼容性的原因使得某种占优势的编解码器影响其它编解码器的发展和推广。最后我们可以说，并没有那种编解码器可以替代其它所有的编解码器。下面是一些常用的视频编解码器，按照它们成为国际标准的时间排序：

### H.261

H.261主要在老的视频会议和视频电话产品中使用。H.261是由ITU-T开发的，第一个使用的数字视频压缩标准。实质上说，之后的所有的标准视频编解码器都是基于它设计的。它使用了常见的YCbCr颜色空间，4:2:0的色度抽样格式，8位的抽样精度，16x16的宏块，分块的运动补偿，按8x8分块进行的离散余弦变换，量化，对量化系数的Zig-zag扫描，run-level符号影射以及霍夫曼编码。H.261只支持逐行扫描的视频输入。

### H.263

H.263主要用在视频会议、视频电话和网络视频上。在对逐行扫描的视频源进行压缩的方面，H.263比它之前的视频编码标准在性能上有了较大的提升。尤其是在低码率端，它可以在保证一定质量的前提下大大的节约码率。

### MPEG-1第二部分

MPEG-1第二部分主要使用在VCD上，有些在线视频也使用这种格式。该编解码器的质量大致上和原有的VHS录像带相当，但是值得注意的是VCD属于数字视频技术，它不会像VHS录像带一样随着播放的次数和时间而逐渐损失质量。如果输入视频源的质量足够好，编码的码率足够高，VCD可以给出从各方面看都比VHS要高的质量。但是为了达到这样的目标，通常VCD需要比VHS标准要高的码率。实际上，如果考虑到让所有的VCD播放机都可以播放，高于1150kbps的视频码率或者高于352x288的视频分辨率都不能使用。大体来说，这个限制通常仅仅对一些单体的VCD播放机（包括一些DVD播放机）有效。MPEG-1第三部分还包括了目前常见的*.mp3音频编解码器。如果考虑通用性的话，MPEG-1的视频/音频编解码器可以说是通用性最高的编解码器，几乎世界上所有的计算机都可以播放MPEG-1格式的文件。几乎所有的DVD机也支持VCD的播放。从技术上来讲，比起H.261标准，MPEG-1增加了对半像素运动补偿和双向运动预测帧。和H.261一样，MPEG-1只支持逐行扫描的视频输入。

### MPEG-2第二部分

MPEG-2第二部分等同于H.262，使用在DVD、SVCD和大多数数字视频广播系统和有线分布系统（cable distribution systems）中。当使用在标准DVD上时，它支持很高的图像质量和宽屏；当使用在SVCD时，它的质量不如DVD但是比VCD高出许多。但是不幸的是，SVCD最多能在一张CD光盘上容纳40分钟的内容，而VCD可以容纳一个小时，也就是说SVCD具有比VCD更高的平均码率。MPEG-2也将被使用在新一代DVD标准HD-DVD和Blu-ray（蓝光光盘）上。从技术上来讲，比起MPEG-1，MPEG-2最大的改进在于增加了对隔行扫描视频的支持。MPEG-2可以说是一个相当老的视频编码标准，但是它已经具有很大的普及度和市场接受度。

### MPEG-4第二部分

MPEG-4第二部分标准可以使用在网络传输、广播和媒体存储上。比起MPEG-2和第一版的H.263，它的压缩性能有所提高。和之前的视频编码标准的主要不同点在于，“物件导向”（Object-oriented）的编码方法和一些其它并非用于提高通常视频编码压缩率的技术。当然它也引入了一些提高压缩能力的技术，包括一些H.263的技术和1/4像素的运动补偿。和MPEG-2一样，它同时支持逐行扫描和隔行扫描。

### MPEG-4第十部分

MPEG-4第十部分技术上和ITU-T H.264是相同的标准，有时候也被叫做“AVC”）。是ITU-T VCEG和ISO/IEC MPEG合作，在2003年制定完成的视频编码标准，并且在已经得到了越来越多的应用。该标准引入了一系列新的能够大大提高压缩性能的技术，并能够同时在高码率端和低码率端大大超越以前的诸标准。已经使用和将要使用H.264技术的产品包括例如索尼公司的PSP，Nero公司的Nero Digital产品套装，苹果公司的Mac OS X v10.4，以及新一代DVD标准HD-DVD和蓝光光盘（Blu-ray）。

### MPEG-H第二部分

MPEG-H第二部分又称为高效率视频编码（High Efficiency Video Coding, HEVC），是ITU-T VCEG和ISO/IEC MPEG再度合作，在2013年制定完成的视频编码标准，被视为是取代H.264的新一代视讯编码标准。

### AVS

AVS是中国制定的音视频压缩编码标准，故准确来说，其不仅仅包括视频编码标准。它最主要的目的是通过采用与H.264不同的专利授权方式，来避免付出大笔的专利授权费用。在技术上可以回避一些非必要专利，也可以在几乎不影响编码压缩效率的基础上，提高编解码速度。

### DivX,XviD和3ivx

DivX，XviD和3ivx视频编解码器基本上使用的都是MPEG-4第二部分的技术，以后缀*.avi, *.mp4, *.ogm或者*.mkv结尾的文件有一部分是使用这些视频编解码器的。

### WMV

WMV（Windows Media Video）是微软公司的视频编解码器家族，包括WMV 7、WMV 8、WMV 9、WPV 10。这一族的编解码器可以应用在从拨号上网的窄带视频到高清晰度电视（HDTV）的宽带视频。使用Windows Media Video用户还可以将视频文件刻录到CD、DVD或者其它一些设备上。它也适用于用作媒体服务器。WMV可以被看作是MPEG-4的一个增强版本。最新的WMV的版本是正在SMPTE制定中的VC-1标准。WMV-9（VC-1，开发代号为“Corona”）刚推出的时候称为VC-9，之后才被电影电视工程师协会（SMPTE）改称为VC-1（VC指Video Codec）。技术上，VC-1也与H.264有诸多相似之处。

### AV1

AOMedia Video 1（简称AV1）是一个开放、免专利的影片编码格式，专为通过网路进行串流传输而设计。它由开放媒体联盟（AOMedia）开发，该联盟由半导体企业、随选视讯供应商和网页浏览器开发商于2015年成立。互联网工程任务组（IETF）也将这项工作标准化为网络影片编解码器（NetVC）。

### 其他视频编码器

RealVideo是由RealNetworks公司开发的视频编解码器。

Sorenson 3是由苹果公司的软件QuickTime使用的一种编解码器。很多因特网上的QuickTime格式的视频都是这种编解码器压缩的。

Cinepak同样是由苹果公司的软件QuickTime使用的一种很老的编解码器，好处是即使很老的计算机（如486）也都支援并且能顺利播放。

Indeo Video是由Intel所研发的编解码器。

上面提到的编解码器都有各自的优点和缺点，经常可以看到有对这些编解码器进行比较的文章，这时候最重要的同时考虑编码的码率和清晰度（常说的律失真特性，健壮性）。

## 编解码器和视频文件的问题

一个常见问题，如果一个用户想要观看特定的编解码器编码的视频流，如果该特定的编码方式不存在或者没有正确的被安装在用户的电脑上，视频将会无法被播放（或不会达到最好效果）。

MPlayer和VLC media player媒体播放器在一个独立的便携式的库中包含了许多流行的编解码器，可用于多种操作系统，包括Windows，Linux和Mac OSX。这同样也解决了Windows中一些编码冲突的问题。

## 扩展阅读

- Wyner-Ziv Coding of Video描述了另一个视频压缩算法实现接近Slepian-Wolf绑定（有链接到源代码）。
- Video codecs standards PDF文件和一些编解码标准的描述
- History of main codecs 数字视频压缩演化