最近看了老师分发的一本关于视频编码与标准的书《H.264 and MPEG-4 video compression》,从中对视频编码及其标准有了基本的了解。由于这本书主要是做一些基础的介绍,让我们对视频编码这一领域有一个大概的了解。再加上之前从来也没有这方面的知识储备,因此读了之后,也只是对下面几个基础问题有了了解。现在看到一些名词,大概能知道其含义,出处,有的还知道些原理和应用,但都并不是太深刻。但是我想,作为“入门级”读物,这样的理解层次我还是基本满意的。
1. 这本书讲了什么?
本书名叫《H.264 and MPEG-4 video compression》,因此落脚点在介绍H.264和MPEG4上,所以的内容都围绕着为这两种标准的介绍而展开。前三章,介绍了一些视频编码的基本知识,基本概念与工具。随后的第四章是大致介绍了两种视频标准的概况。而第五六章则分别介绍了MPEG-4和H.264两个标准。后面两张则是介绍了如何设计与优化CODEC,以及相关的应用。
2. 视频编码是什么?
我对视频编码的理解可以用编程语言来类比。首先,就像编程语言都是作为对机器语言或者某种计算机思想的抽象化一样,视频编码的主题思想就是去除视频中的冗余,压缩并以合理的方式再还原,概括点说,就是寻找一种有效压缩方法,而这种方法要损失少、可还原、可计算。无损当然好,有损未必不可以。但是在当今以及可预见的将来,完美的情况是很难实现的。压缩率越高,算法也必然越复杂,开销也越大,损失也就可能越多。因此不断在这些因素之间做出取舍以及权衡。这就好比编程语言的抽象程度越高,开发速度随之上升,运行效率却也随之下降,开销也变大。这时,随着时代的发展,人们依据当时的条件,提出各种解决方案,并运用到各种语言中去。同样的,伴随着不同算法的出现,各个因素的解决程度又在不断变化,随之产生了不同的标准。
3. 视频标准什么?
视频编码也一样有不同的“语言”——即标准,在这些语言中,都定义了很多的特性以及各种各样的工具。就像c是面向过程思想的产物,Java是面向对象思想的结晶,Python则追求简洁、易懂,相似地,这些标准和编程语言一样也是体现了某种思想。H.264追求更高效率的压缩,而以更复杂的算法为代价,这有点类似Java提高开发效率而在实现上依赖于虚拟机。而MPEG-4则是类似C++一样,提供各种各样的机制、提供更多的接口,让用户自己去做出选择。