广东地区建网站的公司,公司网站后台上怎么上传图片呢,南苑网站建设,兰州装修公司排名榜1 引言
视频技术发展到现在已经有100多年的历史#xff0c;虽然比照相技术历史时间短#xff0c;但在过去很长一段时间之内都是最重要的媒体。由于互联网在新世纪的崛起#xff0c;使得传统的媒体技术有了更好的发展平台#xff0c;应运而生了新的多媒体技术。而多媒体技术…1 引言
视频技术发展到现在已经有100多年的历史虽然比照相技术历史时间短但在过去很长一段时间之内都是最重要的媒体。由于互联网在新世纪的崛起使得传统的媒体技术有了更好的发展平台应运而生了新的多媒体技术。而多媒体技术不仅涵盖了传统媒体的表达又增加了交互互动功能成为了目前最主要的信息工具。
在多媒体技术中最先获得发展的是图片信息技术由于信息来源更加广泛生成速度高生产效率高加上应用门槛较低因此一度是互联网上最有吸引力的内容。然而随着技术的不断进步视频技术的制作加工门槛逐渐降低信息资源的不断增长同时由于视频信息内容更加丰富完整的先天优势在近年来已经逐渐成为主流。 2 颜色表示
人眼能看到东西是因为光线进入了眼睛打在视网膜上而视网膜上的神经和大脑相连。 2.1 黑白
当我们提到一张图片是“黑白”的时候或者说“黑白电视”的时候实际上并不代表它只有黑色和白色两种颜色一个很容易理解的事情是从白变成黑如果这个过程是连续的那么过程中会出现我们管它叫“灰色”的颜色。我们很容易定义“黑”没有光线进入眼睛的时候那就是黑但是相对的“白”就会更复杂一些。举个简单的例子比如我们手上有一个能发出白光的灯泡当对灯泡通电的时候它就会发出白色的光。但是大家都知道“灯泡”这种东西根据耗电量的不同有亮一些的和暗一些的各种不同的规格。如果当我们看到第一个灯泡发出的光说它是白色那当第二个更亮的灯泡亮起来的时候我们还会说第二个灯泡发出的光是更亮的白色。于是在“白色”这个颜色上面多了个“亮”这样的属性。在显示器上我们通常会将它能够显示的最大亮度叫做“白色”能显示的最低亮度叫做“黑色”。
从黑色到白色的变化过程可以简单看作是一条线段一端是“黑”、另一端是当前设备能发出的最大亮度的“白”。那么可以把黑的那一个点记为0白的那一个点记为1大于0而小于1的部分就成为了“灰”。可以用一个数字来表示只有黑白的颜色。 2.2 RGB
光线会刺激人眼内的锥状细胞这些细胞通过视神经和大脑相连。不同的细胞对不同波长的光有不同的敏感度。这些对不同波长的光敏感的细胞主要分为三种一种对波长在560nm左右的光敏感、一种对530nm左右的光敏感而另一种对420nm左右的光敏感。这些波长分别对应红色、绿色、蓝色三种颜色的光。平时说的人类的眼睛只能识别这三种颜色的光就来源于此。自然界的光是由许多不同波长的光组合而成但只要能还原其中红绿蓝也就是Red、Green、Blue简称RGB的部分对人眼看起来是没有区别的。所以在针对人类的应用中可以只记录红绿蓝三种分量的数据。
基于这种理论就可以把上面那个“黑白”的记法进行扩展从一条线段变成三条线段分别记录红色光的强度、绿色光的强度和蓝色光的强度。如此用一个数字可以用来表示黑白的颜色而用三个数字就可以表示出彩色了。注意虽然这里说是三条线段但并不代表三条线段的顶端所代表的的光的强度是相同的因为在定义中当红、绿、蓝“等量”比如都是1.0混合的时候产出的颜色为白色。这里的等量并不是指三种频率的光的强度相等而是强度的比例为某种固定的比例。
尽管如此”红色、绿色、蓝色“这样的描述仍然不够准确。事实上看同一个频道的节目不同的电视机显示出来的颜色虽然大致一样但又略有偏差的事情或许大家都遇到过有的电视鲜艳一些有的土一些还有的偏红、偏蓝。为了规范统一国际电信联盟无线电通信部门ITU-R利用国际照明协会的XYZ色彩表示方式来定义了R、G、B分别是什么颜色以及等量混合的时候的白色是什么颜色。在不同的标准里R、G、B事实上可以表示不同的颜色开发中常遇到的标准可以搜索白皮书里的具体参数定义。例如 BT.601、BT.709 中对 RGB 的定义和 sRGB 标准相同。 2.3 YUV
人眼对于亮度和颜色的感受是由不同的细胞完成对亮度的感受比较敏感而对色度的感觉比较迟钝所以在需要节省存储空间的时候可以为亮度保存更准确的数据为色度保存更不准确的数据。YUV的数据表示形式很适合这种场景。
YUV保存的彩色数据可以看作给黑白图像上色。其中Y通道保存的就是这张黑白图像而U和V就是给黑白图像上色。因为人眼对亮度敏感所以Y部分的数据可以保存得精度比较高而U和V就可以保存得相对模糊。
在RGB中不论是R还是G还是B其中一个通道亮度比较高这个颜色看起来就会比较亮。所以计算亮度的时候R和G和B都有参与。RGB和YUV之间互相转换的公式如下
Y Kr * R Kg * G Kb * BU (B - Y) / (1 - Kb)V (R - Y) / (1 - Kr)
其中R、G、B的范围是 0 ~ 1Y的范围是 0 ~ 1UV的范围是 -1 ~ 1。Kr Kb Kg 是三个常系数根据选用标准的不同而不同可以在对应标准的白皮书中找到例如 BT.601、BT.709、BT.2020。用错标准的时候从YUV转成RGB并显示会导致偏色。为了检查偏色通常会使用 ARIBColorBars、PM5544 等测试卡来进行检查。其中PM5544可能大家会比较熟悉。 根据公式可知这是一个三元一次方程组把方程2、3中的Y使用方程1代入就可以得到从RGB计算YUV的方法给出YUV解方程组可以得到RGB。它们之间就是这么互相转换的。
在实际开发过程中YUV的取值范围有两种不同的标准。例如用8bit来表示YUV数据的时候一种标准是使用完整的0~255范围而另一种是使用Y的16~235、UV的16~240范围。前者被叫做Full Range或者PC Range。后者被叫做Partial Range或者TV Range。后者反而比较常见。 2.4 光电转换
光电转换是通过光伏效应把光能量转换为电能的过程。例如在数码相机中光线通过镜头打在感光元件上感光元件产生电能输送给芯片进行进一步的处理和保存。当要显示图像的时候芯片会将存储的数据加载进来然后将电信号通过显示屏等元件转换为光信号给人观看。
在液晶屏幕普及之前人们普遍使用的电视机和电脑显示器都是俗称“大屁股”的阴极射线管屏幕。这种设备的原理是通过电子轰击屏幕上的荧光涂层使之发出不同亮度不同颜色的光来显示画面这个叫做电光转换。但在这个过程中人们发现将电压提升一倍之后画面的亮度并没有简单地提升一倍它们之间存在一种非线性的函数关系。通常屏幕的亮度和输入电压的关系是亮度约为输入电压的2.2到2.4次方称之为电光转换函数。
因为存在这种转换函数关系光信号通过摄像机转换为电信号的时候也要做一次转换来抵消电光转换函数称之为光电转换函数。光电转换函数接近于电光转换函数的逆函数。
对于光电转换和电光转换搜索关键字 OETF 和 EOTF 可以找到相关的资料。标准动态范围SDR视频来说对应白皮书标准BT.1886对于高动态范围HDR的视频来说光电转换是需要特别关注的一个过程与SDR差别较大对应白皮书BT.2100。 选用适当的光电和电光转换函数可以提升数据保存的效率因为人眼对光强度的敏感也不是线性的当光线比较暗的时候很小的强度不同人眼可以感觉到但是当光很强的时候同样小强度的变化人眼就感觉不到了。所以可以设计这样一种光电转换曲线它在光弱的时候电信号的变动大一些当光比较强的时候同样程度的变化体现在电信号的变化上更小。 2.5 采样精度
也叫做“深度”depth。保存所谓“光的强度”的时候有个“保存精度”的问题。我们都知道计算机内数据的保存和处理都是二进制数字。那么用几个二进制数据保存这些数据就是“精度”。平时会说的 8bit 10bit 就是属于这个范畴。8bit 指的是用8个二进制数来表示采集到的光的强度那么它就能够保存 2的8次方 一共 256 种不同的情况如果使用的是 10bit 来保存那么这里是 1024。假设这里保存的是黑白形式的数据那么在 8bit 下0代表黑色255代表白色如果在 10bit 下那么0代表黑色1023代表白色。如果保存的是彩色形式的数据那么就是三个数字。 3 视频画面
将许许多多不同颜色的点铺满一个面就形成了一张画面。 3.1 分辨率
说到分辨率很多人会认为这就是画面有多大。但是其实这不太准确因为一张画面有多大实际上是取决于你显示器有多大或者显示图片的窗口开了多大。就像家里买电视看电视节目以前小时候家里电视是14寸的那么电视节目显示出来就是14寸、买21寸的那么电视节目显示出来就是21寸。电视节目并不会因为你买的是14寸的电视就显示不完整也不会因为你买的是21寸的电视它就只在电视屏幕上的一小块地方显示。
那么有没有什么办法可以更直观地对分辨率有概念假想一下现在有个电视屏幕上面显示的内容是黑白相间的条纹就像斑马那样。这个条纹越来越密越来越密到最后变成一条条的细线再细下去就看不清了。那么我有这样一个画面画面上的内容就是黑白相间的条纹这个条纹越来越密越来越密到最后黑色和白色的条纹糊在了一起这种情况下就再也没有办法数清楚到底有多少根黑色线、多少根白色线了。这个极限状态就是它的分辨率。
在电脑上因为有像素的概念所以可以直接用像素来表示分辨率。黑白相间的条纹最多能显示多少个就取决于有多少个像素。因为在多媒体领域像素的形状并不总是正方形的所以同样分辨率的一张画面可以是不同比例的。 3.2 宽高比
宽高比指的是画面的宽度和高度的比例。虽然大多数情况下这与横向的分辨率和纵向的分辨率的比例是相同的但并不总是相同的。一个例子在DVD时代碟片上保存的画面都是720x480分辨率的但是画面的高宽比却有43和169两种。这就是像素形状不是方形的情况。通常描述高宽比的时候会用到“采样比例Sample Aspect Ratio”、“像素比例Pixel Aspect Ratio”、“显示比例Display Aspect Ratio”这样的概念这些比例都是宽和高的比。所以 横向分辨率÷纵向分辨率×采样比例显示比例。 4 画面的存储方式 4.1 RGB
最常见的RGB数据是每个采样或者说像素使用三个8bit整数分别表示红、 绿、蓝通道的信号强度这样每一个像素就是3个字节。整张画面上的像素按照从左到右的顺序保存一行的所有像素保存完一行保存下一行。因为每个像素是24bit所以也会写成RGB24的。同理也有保存的顺序是反过来的BGR24区别只在于先存放蓝色通道的数据。根据需要有的时候会多一个辅助通道Alpha根据Alpha通道存放的位置不同于是也有 ARGB32、RGBA32、BGRA32、ABGR32 之类之类。 例如一个4x4的画面保存下来的数据大概长这样
RGB RGB RGB RGB
RGB RGB RGB RGB
RGB RGB RGB RGB
RGB RGB RGB RGB
实际开发中经常会遇到的另一个点是每一行数据的后面还会带一些其他数据比如用来让每一行数据的字节数都是某个整数的整倍之类。在保存这种数据的数据结构里除了高和宽就还会有一个叫 stride 的属性用来表示每一行到底几个字节。在读写指定位置的像素数据的时候如果不按照这个 stride 来定位所在的行就会出现读写的数据偏了的情况。 4.2 YUV420P
有的地方写的是I420是同一种东西。作为另一种典型的格式YUV的保存方式常见的与RGB是不同的。常见的YUV数据保存方式是先存所有像素的Y通道数据然后存U通道再存V通道。然后Y和U和V还不一定就是存在连续的内存空间里而是可能为三个不同的内存块。不在内存中表示或者需要存盘、通过管道传输之类的时候就是Y后面跟着U、U后面跟着V这样的存储方式。 上述4x4的画面保存下来的数据就是
YYYY
YYYY
YYYY
YYYY
UUUU
UUUU
UUUU
UUUU
VVVV
VVVV
VVVV
VVVV
但是前面说到人眼对亮度敏感对色度更没那么敏感所以YUV420P8在保存数据的时候U和V的分辨率会小于Y的分辨率高和宽都是一半。例如这个4x4的画面如果YUV三个通道拆开来看那么只有Y通道是完整的4x4数据U和V都是2x2数据。所以实际上保存的数据是
YYYY
YYYY
YYYY
YYYY
UU
UU
VV
VV
而YV12则是把其中的U和V位置互换了一下。
通过这种方式缩减就从一个像素占用24bit3个字节变成了一个像素平均占用12bit1.5个字节数据量一下子减少了一半。但是因为人眼对色度不敏感所以其实不太能看出来。
此外也有YUV420P10YUV420P12YUV420P16等保存方式把原本8bit保存的数据扩展到了10bit、12bit或者16bit使其具有更高的精度。但是不管是10bit、12bit还是16bit保存的时候都是占用2个字节。10bit会用低10位前面补012bit会有低12位前面补016bit占用完整的2个字节。
和RGB的数据一样YUV数据在实际开发中也会遇到 stride 的问题也要按照同样的方法操作否则也是一样读偏了或者写偏了。 4.3 NV12
NV12和NV21是更换了数据保存方式的YUV420P8。它保存的Y通道的分辨率也是全量的保存的UV通道的分辨率是横向和纵向分别为Y通道的一半。但是它只有两个通道、而不像YUV420P有三个通道。U和V数据是在第二个通道里交错存放的。还是以上面的4x4画面为例保存的数据是
YYYY
YYYY
YYYY
YYYY
UVUV
UVUV
如果是NV21那么是
YYYY
YYYY
YYYY
YYYY
VUVU
VUVU 5 视频
一系列连续的图片按照一定的速度进行顺序播放人眼看起来就像是画面中的东西在动这就形成了视频。 5.1 帧率
简单的理解帧就是为视频或者动画中的每一张画面而视频和动画特效就是由无数张画面组合而成每一张画面都是一帧。帧率的单位是FPSframe per second即每秒多少帧。
5.2 色阶
色阶的意思就是颜色从无到最大时中间的过渡梯级有多少。假如说亮度的黑白信号色阶为2时那么它就只有两种颜色全白和全黑。同样的RGB三基色中每种颜色都有色阶。8bit数据能够存储256个色阶那么RGB三基色就可以实现1677万种颜色也就是24位色。
注计算机颜色体系中有32位色实际上是24位色之外增加了一个8位的Alpha透明层所以也叫RGBA。
那能不能使用更高的色阶呢大于256级色阶好不好当然好了不过一般的显示器不支持。但是的确是有高色阶的显示器目前色阶最高的显示器可以支持10bit颜色信息也就是1024级色阶。当然价格是不可想象的
一般民用的低端显示器采用的TN型液晶面板都是6bit的也就是RGB每种颜色只有64级一共可以显示颜色只有26万种。当然你可以选择32位色模式只不过它的1677万种颜色是通过插值换算出来的并不是真正的1677万种颜色。真正支持1677万种颜色的显示器其实也不是很便宜的。 5.2 视频编码压缩
视频编码最重要的目的也是为了进行数据压缩以此来降低数据传输和存储成本。除了前面说的用YUV表示、并把UV的分辨率降低之外还有很多其他的手段。
从上面的画面存储方式可知尽管使用了YUV420P方式存储画面但平均一个像素也会占用12bit。那么一张1280x720分辨率的画面就会占用1280x720x1211059200bit而在一秒钟有30帧的场景下一秒钟的画面就占了11059200x30331776000bit换算过来约40MB。这是一个很大的数平时看的24分钟一集的动画片就要55.6GB。这对于存储和传输都会造成很大的压力。所以需要采用编码压缩技术来减少数据量。
视频压缩有别于平时说的文件压缩。文件压缩大多会采用类似7z、ZIP等格式对应LZMA、Inflate算法。这些算法都是“无损压缩”算法解压后得到的数据和压缩前的数据是完全一致的。视频压缩虽然也有无损压缩但更多时候使用的是有损压缩即解压后得到的数据和压缩前的数据不完全一样但是画面的内容从人眼来看是差不多的。
先从简单一些的图片压缩开始。大家都用过JPG格式也见过JPG压缩压过头了图片上出现方块、颜色溢出这里有损压缩靠的是离散余弦变换。假设我现在有一张 8x8 的黑白图片那么这个图片就一共64个像素。我们把这64个像素的亮度灰度记作y1 y2 y3 ... y64。
用64个方程表示如下
k1_1*x1 k2_1*x2 k3_1*x3 ... k64_1*x64 y1k1_2*x1 k2_2*x2 k3_2*x3 ... k64_2*x64 y2k1_3*x1 k2_3*x2 k3_3*x3 ... k64_3*x64 y3....k1_64*x1 k2_64*x2 k3_64*x3 ... k64_64*x64 y64
如果k的值全部已知得到64个未知数64个方程可以把里面的x1 x2 x3 ... x64解出来。如果现在有两个人A和B他们事先都定好k的值随后A把算出来的这些x告诉BB套入上面的公式就能算出y。
因为上面的式子实在太多了为了简化就用向量来表示所以上面那一串就可以等价地写成
(k1_1, k1_2, k1_3, ... k1_64)*x1 (k2_1, k2_2, k2_3, ... k2_64)*x2 ... (k64_1, k64_2, k64_3, ... k64_64)*x64 (y1, y2, y3, ... y64)
太长了不方便看所以写成下面形式
k1*x1 k2x2 k3*x3 ... k64*x64 y
从64个y的值变成64个x的值有什么好处呢为了说明这个问题我们先来定义这些 k 的值。
下图是一个有64个小格子的图每个格子一共有8x8一共64个像素。因为这些k都是64维的向量所以用k1代表第一个格子里的内容按照右图顺序类推一直到k64代表最后一个格子的内容。然后k1_1代表第一个格子里的第一个像素k1_2代表第一个格子里的第二个像素以此类推。亮暗代表不同的值全白为1、全黑为0。 假设y的64个值用8x8的图形表示是这样的
套入上述方程组可以求出x1 x2 ... x64。然后这64个x的值传给了另一个人。这个人收到这64个x的值之后要套入上面的方程把y的值算出来。如果把算的过程表示出来的话
k1*x1k1*x1 k2*x2k1*x1 k2*x2 k3*x3...k1*x1 k2*x2 k3*x3 ... k64*x64 可以看到随着计算一步一步进行计算结果在视觉上会越来越接近原画面。那么如果我不传64个值只传63个虽然画质损失了但是收到的人能看出来是字母A那不就少了传输一个数值的需要了吗不过实际操作中不是这样实际操作中越后面的系数对应的未知数会保存精度越低的值对压缩的需求越大保存的精度越低这就是有损压缩的基本原理。
在有损压缩完了之后还会过一遍无损压缩。JPG使用的无损压缩方式是最小生成树。本来我一个文件比如是1000个字节每个字节8个比特就是8000比特。那如果我现在发现我这文件里全写的都是大写字母A和大写字母B没别的东西那我直接用0来代表A、1来代表B每个字节变成了1个bit文件就从8000bit变成了1000bit变成原来的1/8了。这个算法的原理是在文件中越经常出现的文字用越少比特数来表示、越不经常出现的文字用越长的比特数来表示原本固定的一个字节8个bit就变成了1个字节不一定多少个bit两边都约定好到底每个字节怎么表示需要保存的内容就变少了。并不是所有编码都用的最小生成树其他格式的编码也会有其他的无损压缩算法。
JPG里用的技术相对较少现在用的视频编码里还要很多技术。比如其中有一个技术就是如果一个画面里有很多长得一样的东西它会记录类似“把哪个块复制到哪里哪里”这类的信息于是这些块里面的数据就只要记录一次就够了。这种情况叫做“空间上的冗余“。
视频由许许多多这样的图片组成因为除了场景切换之类的情况外视频这一帧的内容对比上一帧有一部分是没有变化的又有一部分是画面上的物体在移动。那么如果下一张画面里通过记录“哪里的东西现在运动到了哪里”来保存和前一帧对比后有不同的数据那么数据量可以大大减少。
比如《魔法少女小圆》的片头动画在这个场景中中间的人物是不动的但是左下角的云在飘。将编码器记录的运动数据可视化之后可以看到这些数据确实是“左下角的云在朝着左下角运动”。 视频编码与压缩是数字化视频非常重要的技术以至于它直接影响到视频在各个领域的应用。如果没有视频编码技术的不断提高我们今天也不可能在方方面面享受到视频的便利性。
首先视频编码是一项非常复杂的工程远超过对音频和图像压缩的难度。其次视频编码是一个多级压缩的过程而非单一压缩方案。当然如果不是有着这么复杂的一项工程视频文件远比我们想象的要大的多。我们来举一个例子
按照CCIR 601的视频信号采集标准一个标准PAL制式电视信号转换成数字信号按照常见的非专业级采样标准4:2:0你想支持更高的也不行啊民用级的设备做不到更高的采样率则每秒钟产生的视频内容所生成的数字文件为21MB。那么1分钟的视频文件有多大呢1260MB那么大。
那如果按照RGB色彩表达方式720×576分辨率每个采样点3个基色每个基色是8bit数据每秒25帧画面。得出来的结果是720×576×3×8×25237.3Mbit29.67MByte。那么1分钟的视频就是1780MB……这还仅仅是标清如果是高清1080P的话那就是69.5TB
从上面的例子可以看出即便是不压缩视频采用YUV颜色来存储信息比起使用RGB颜色来存储信息容量还是要小一些的。所以也可以说YUV颜色方式算是视频编码的最初一级压缩方法。
画面压缩
如果每一帧的视频画面按照RGB颜色保存的话文件会非常大。例如PAL制视频画面所产生的文件有1.2MB。
如果将每帧的视频画面压缩那么可能大大减小视频的文件大小。而我们所知的最常见图像压缩算法就是jpeg。JPEG 是Joint Photographic Experts Group联合图像专家小组的缩写是第一个国际图像压缩标准。
首先JPEG压缩是对图像的YUV色彩分量进行分别编码所用的编码主要算法是DCTDCT for Discrete Cosine Transform离散余弦变换)。它是与傅里叶变换相关的一种变换它类似于离散傅里叶变换(DFT for Discrete Fourier Transform),但是只使用实数。DCT是一种非常高压缩率低失真的压缩算法可以将图像压缩至1/5到1/10大小而且画质基本没有太大变化。
那么利用JPEG压缩算法原本每帧图像大小为1.2MB现在就变成了180KB左右减小了很多。而每秒钟的视频大小就变成了4.4MB1分钟的视频就是263MB。顿时小了很多。使用这种算法的视频编码方式叫做Motion JPEG也叫MJPEG。注意视频压缩里面也有个比较知名的方法叫做MPEG但不等同于MJPEG两者截然不同。
运动压缩
虽然通过JPEG算法可以将视频变小了好几倍但是还是比较大。对于传输来说和存储来说门槛还是太高了只能适合像广播电视行业这种专业机构使用。
那么还有什么办法可以把视频文件压缩的更小呢那就是帧间压缩方法。
说到帧间压缩那必须提到一个组织。MPEGMoving Picture Experts Group动态图像专家组是ISOInternational Standardization Organization国际标准化组织与IECInternational Electrotechnical Commission国际电工委员会于1988年成立的专门针对运动图像和语音压缩制定国际标准的组织。当然这个组织有很多有代表性的压缩算法都是以MPEG-X命名的。所以大家也就习惯的把MPEG称作压缩方法。
首先运动压缩采用的是帧间压缩法。而什么是帧间压缩法呢
由于视频是由很多帧的画面集合组成而鉴于运动的特性在很短的间隔时间内运动幅度很小。另外就是运动的画面中存在很多并没有运动的画面信息。甚至有时候拍摄的画面有很多帧图像之间几乎没有变化。这样重复的记录这些没有变化的图像信息简直是太浪费了。
帧间压缩就是尽可能的剔除那些相邻画面中没有变化的内容信息。举个例子比如画面是一个人骑自行车背景不变而骑自行车的人从画面一端跑到另外一端。那么这个时候就可以把没有遮盖到的背景部分只保存一份就行了。剩下的只是记录人骑自行车的整个动态画面就OK。
当时原理上比较简单实现起来就比较困难了。帧间压缩的时候首先要用到关键帧和非关键帧的概念。关键帧就是指你要保存画面上所有数据的那一帧图像并且以这个图像作为参考。关键帧后面每一帧都会比照关键帧和此前一帧的画面记录画面改变的地方去掉重复的信息。
早期的压缩算法就是采取这种策略比如MPEG-1。它的应用产品大家可能更熟悉——VCD。
这里顺便提一下MP3MP3的全名叫做MPEG-1 layer3。也就是说MP3压缩格式是MPEG-1压缩标准里面的一个子集。跟MP4是完全不同的概念。
VCD虽然在一张光盘里650MB容量可以放得下差不多一部电影的长度已经是压缩率很惊人了。当然这也是牺牲画面为前提的
VCD的分辨率很低只有352×288对应PAL制比标准的电视画面的清晰度小很多。VCD在运动不太明显的情况下画质还可以接受如果是运动很快的画面中就会出现很多惨不忍睹的马赛克。
有了VCD产品国人们是皆大欢喜。这里可以顺带讲一下VCD机是中国人发明的那家公司叫万燕。但是呢VCD技术是飞利浦、SONY、松下、JVC等公司联合制定的标准而生产VCD芯片的公司是美国的C-CUBE公司。怎么说呢技术虽然是老外们发明的不过他们并不看重这项技术所以就没形成产品。反倒是国人把它发扬光大了。
与此同时欧美国家其实对VCD是不太感冒的。因为他们还在VHS时代感兴趣的同学可以搜索一下VHS以及SONY的betacam与JVC的VHS制式标准大战而且VCD第一不便宜第二画质也不高第三还不能录像只能播放。
其实有了VCD产品之后对世界还是很震惊的。大家都觉得把一部电影放在一张小小的碟片里面真的很方便。但是VCD画质真的不好有没有什么新的技术可以做到更小的容量更高的清晰度呢那就是后来推出的MPEG-2。
MPEG-2这个标准是最早风靡全球的压缩技术标准制定的时间是1994年VCD标准是1993年。虽然已经过去20多年了却仍然是当今最重要的视频压缩格式之一。除了还有大量的DVD产品以外更重要的是目前广播电视领域的数字电视DVB-T标准仍然使用的是MPEG-2压缩标准在中国。
MPEG-2相对于MPEG-1有什么提升呢
1. 画面有了很大的提升且更加灵活了。MPEG-1几乎所有的应用都集中在VCD上分辨率很小且不能改变。MPEG-2可以适合中等清晰度D1标准、PAL制或者NTSC等制式电视标准到高清晰度视频内容的展示。也就是说即便是720P、1080P等这样的高分辨率视频MPEG-2仍然适用。
2. 增加了GOP模式使用IBP帧结构。原来的帧间压缩方式在大动态场景下马赛克很严重。到了MPEG-2之后就有了很大的提升因为使用了参考帧B帧使用了向前预测帧方式而且压缩率是可变的。总的来说就是大动态时候不会有马赛克了。
3. 增加了很多额外的信息功能更加强大。比如支持更强的交互与命令控制大家有没有想起来VCD 2.0时候画面有菜单可以选DVD比这个强大支持传输流形式TSTransportStream就是可以用于直播也不怕文件损坏就全完多音轨而且多声道……
但是MPEG-2也有不足的主要就是它是面向工业化视频信息生产发行领域的也就是说只适合电视台、DVD发行商、卫星通信等领域不适合民用。因为码流真的很大比MPEG-1要大。虽然一张光盘就可以装的下一整部电影那是因为光盘的容量从650MB提升到了4.3GB甚至7.2GB。 6 模拟时代的视频技术
最早的视频技术来源于电影电影技术则来源于照相技术。由于现代互联网视频信息技术原理则来源于电视技术所以这里只做电视技术的介绍。
世界上第一台电视诞生于1925年是由英国人约翰贝德发明。同时也是世界上第一套电视拍摄、信号发射和接收系统。而电视技术的原理大概可以理解为信号采集、信号传输、图像还原三个阶段。
摄像信号的采集通过感光器件获取到光线的强度早期的电视是黑白的所以只取亮度信号。然后每隔3040毫秒将所采集到光线的强度信息发送到接收端。而对于信号的还原也是同步的每隔3040毫秒将信号扫描到荧光屏上进行展示。
那么对于信号的还原由于荧光屏电视采用的是射线枪将射线打到荧光图层来激发荧光显示那么射线枪绘制整幅图像就需要一段时间。射线枪从屏幕顶端开始一行一行的发出射线一直到屏幕底端。然后继续从顶部开始一行一行的发射来显示下一幅图像。但是射线枪扫描速度没有那么快所以每次图像显示要么只扫单数行要么只扫双数行。然后两幅图像叠加就是完整的一帧画面。所以电视在早期都是隔行扫描。
5.1 信号是怎么产生的
跟相机感光原理一样感光器件是对光敏感的设备对于进光的强弱可以产生不同的电压。然后再将这些信号转换成不同的电流发射到接收端。电视机的扫描枪以不同的电流强度发射到荧光屏上时荧光粉接收到的射线越强就会越亮越弱就会越暗。这样就产生了黑白信号。
5.2 帧和场的概念
前面说到由于摄像采集信号属于连续拍摄图像比如每隔40毫秒截取一张图像也就是说每秒会产生25副图像。而每个图像就是一帧画面所以每秒25副图像就可以描述为帧率为25FPSframes per second。而由于过去电视荧光屏扫描是隔行扫描每两次扫描才产生一副图像而每次扫描就叫做1场。也就是说每2场扫描生成1帧画面。所以帧率25FPS时隔行扫描就是50场每秒。
模拟时代在全世界电视信号标准并不是统一的电视场的标准有很多叫做电视信号制式标准。黑白电视的时期制式标准非常多有A、B、C、D、E、G、H、I、K、K1、L、M、N等共计13种我国采用的是D和K制。到了彩色电视时代制式简化成了三种NTSC、PAL、SECAM其中NTSC又分为NTSC4.43和NTSC3.58。我国彩色电视采用的是PAL制式中的D制调幅模式所以也叫PAL-D制式。有兴趣的可以百度百科“电视制式”来详细了解。
另外你可能会发现场的频率其实是和交流电的频率一致的。比如我国的电网交流电的频率是50Hz而电视制式PAL-D是50场每秒也是50Hz。这之间是否有关联呢可以告诉你的是的确有关联不过建议大家自己去研究。如果确实不懂的同学可以我。
5.3 彩色信号是怎么产生的
其实有了基础的黑白摄像技术之后人们就一直想实现彩色摄像。早在1861年英国物理学家麦克斯韦就论证了所有彩色都可以使用红、蓝、绿三种基色来叠加生成。但是感光器件只是对光线敏感但是对颜色却无法识别。为了实现对颜色的识别人们用分光镜加滤光片的方式将光线分解成为三种基色的纯色模式。然后分别对三个基色的纯色亮度进行采集然后再把信号叠加实现了对彩色信号的采集能力。
5.4 色彩信号如何表达
因为原来黑白电视的时候基本上只需要一路信号就可以还原图像同步信号后面讲。但是有了彩色之后一路信号能否表达一副完整的彩色图像以及如何表达呢
彩色电视出现之后为了兼容早期的黑白电视信号也就是黑白电视机可以接收彩色信号但是只显示黑白科学家引入了YUV色彩表示法。
YUV信号有多种叫法可以称作色差信号YR-YB-Y也可以称作分量信号YCbCr或者Component、YPbPr。它是由一个亮度信号Y Luminance或Luma和两个色度信号U和V组成Chrominance或Chroma。黑白电视只使用亮度信号Y彩色电视可以额外使用两个色度信号来实现彩色效果。但是YUV信号是怎么来的呢
首先是因为考虑到黑白电视兼容所以基础信号仍然采用亮度信号。而颜色表达本身是通过RGB三基色的叠加来实现的为了能够将YUV信号可以还原成三基色RGB色彩值数学家利用了色差算法即选取一路Cr信号和一路Cb信号。Cr信号是指RGB的红色信号部分与RGB亮度值之间的差异Cb信号是指RGB的蓝色信号与RGB亮度值之间的差异。所以YUV信号有时候也表达为YR-Y和B-Y所以也叫色差信号。
5.5 为什么YUV色彩延续至今
如果大家平时经常拿手机拍摄视频你可以把拍摄的视频文件传输到电脑上然后用MediaInfo软件打开你会发现很多关于视频的参数信息。而这些参数信息里面你一定会发现手机拍摄的视频色彩也是使用YUV信号模式。为什么不用RGB来表达现在早都没有黑白电视了啊
其实不必考虑兼容性的原因因为你无论是什么信号模式拍摄的视频只要是数字化的信息文件形式都可以与播放设备的信号模式无关。因为播放设备在播放视频文件时需要解码再进行渲染。这时候不管什么信号模式还是色彩空间都能转化成设备兼容的方式。
至于为什么YUV信号模式一直会持续至今最主要的原因不是因为兼容性考虑而是YUV信号有个巨大的优势就是节省带宽。这在数字媒体领域是很重要的。
人眼的视觉特点是人眼对于亮度信号最为敏感对色度信号敏感度要弱一些。所以可以适当减少色度信号的容量也不会被人眼观察到差异。就好比音频里面的MP3压缩格式是将耳朵不敏感的频率信号容量降低或去除掉以大大降低文件的大小但是人耳却基本听不到差异。
至于YUV信号是如何做到降低信息容量的可以看下面的引文
YUV主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。其中YCbCr 4:1:1 比较常用其含义为每个点保存一个 8bit 的亮度值(也就是Y值)每 2x2 个点保存一个 Cr 和Cb 值,图像在肉眼中的感觉不会起太大的变化。所以 原来用 RGB(RGB 都是 8bit unsigned) 模型 1个点需要 8x324 bits如下图第一个图全采样后YUV仍各占8bit。按4:1:1采样后而现在平均仅需要 8(8/4)(8/4)12bits4个点8*4Y8(U)8(V)48bits, 平均每个点占12bits。这样就把图像的数据压缩了一半。 6 数字化时代的视频技术
视频技术发展到了数字化时代其实原理上并没有太多变化。但是数字化的视频技术虽然基础原理没有改变但是各方面的性能和功能有了很大的提升。这些就重点讲一下数字化之后的视频技术有了哪些突破
6.1 彩色摄像的演进
前面讲到实现彩色摄像其实是把光线分解成为三个基色分别取亮度值但是这种结构比较复杂成本也高。因为实现彩色摄像需要有一个分光用的棱镜然后采集光线必须要用到三片感光器件CCD或CMOS。这种结构带来第二个不好的地方就是结构会比较庞大不利于小型化微型化。
后来呢德国人拜耳发明了一种滤镜是一种马赛克滤镜。将含三基色的马赛克滤镜覆盖在感光器件上面这样就可以实现用一片感光器件来采集三种颜色同时也取消了分光棱镜这种结构。这样下来不仅成本降低了结构也简化了。
有了这种技术之后摄像设备就可以越做越小现在集成在手机上的摄像头整体厚度只有23毫米尺寸只有13毫米。当然在专业领域高端的摄像机仍然采用分光棱镜加3CCD的技术原因不是他们不愿意改而是3CCD的色彩丰度更好。而且专业摄像机CCD技术也从IT型发展到了FIT型感兴趣的同学可以查看一下SONY公司关于FIT型CCD专业摄像机的介绍来了解。总而言之就是民用领域和专业领域发展方向不一样所以路线也不同。
6.2 场概念消失
在模拟电视时代受限于显像管技术原因采用的是隔行扫描技术来还原图像显示。但是现在都是平板电视了液晶电视、等离子电视、激光电视电视的成像方式不再是一条线一条线的扫描而是一次性全画面呈现。所以现在的视频拍摄一般都没有场的概念当然为了向前兼容在视频文件信息中你会看到扫描模式的参数。利用手机拍摄的视频文件其扫描模式的参数都是Progressive就是逐行扫描的意思。
6.3 采样率和采样精度
大家都知道模拟和数字的最大差别就是信息存储和传递方式一个是模拟量一个是数字量化的。那么数字化对于连续过程的量化就必须用到采样过程也可以理解为片段化。例如音频数字化就是把音频在每个很小的时间间隔上获取音频的信息然后进行数字量化最后把所有连续采样的数字量化数据组合来形成最终的信息。视频也是这样按照一定的时间间隔把获取到的图像进行数字量化然后连续的数字量化的集合就是一段完整的视频文件。
但是视频的采样率并非是大家理解的那样每秒钟产生25帧的图像采样率就是25Hz。实际上ITUInternational Telecommunications Union国际电信联盟在CCIR 601标准中对于视频的采样标准有了明确的界定
采样频率为了保证信号的同步采样频率必须是电视信号行频的倍数。CCIR为NTSC、PAL和SECAM制式制定的共同的电视图像采样标准 fs13.5MHz 这个采样频率正好是PAL、SECAM制行频的864倍NTSC制行频的858倍可以保证采样时采样时钟与行同步信号同步。对于422的采样格式亮度信号用fs频率采样两个色差信号分别用 fs/26.75MHz的频率采样。由此可推出色度分量的最小采样率是3.375MHz。 分辨率根据采样频率可算出对于PAL和SECAM制式每一扫描行采样864个样本点 对于NTSC制则是858个样本点。由于电视信号中每一行都包括一定的同步信号和回扫信号故有效的图像信号样本点并没有那么多CCIR 601规定对所有的制式其每一行的有效样本点数为720点。由于不同的制式其每帧的有效行数不同PAL和SECAM制为576行NTSC制为484行CCIR 定义720×484为高清晰度电视HDTVHigh Definition TV的基本标准。实际计算机显示数字视频时通常采用下表的参数 电视制式分辨率帧率NTSC640*48030PAL、SECAM768*57625 数据量CCIR 601规定每个样本点都按8位数字化也即有256个等级。 但实际上亮度信号占220级色度信号占225级其它位作同步、编码等控制用。如果按f s 的采样率、422的格式采样则数字视频的数据量为 13.5(MHz)×8(bit)2×6.75(MHz)×8(bit) 27Mbyte / s同样可以算出如果按444的方式采样数字视频的数据量为每秒40兆字节按每秒27兆字节的数据率计算一段10秒钟的数字视频要占用270兆字节的存储空间。按此数据率一张680兆字节容量的光盘只能记录约25秒的数字视频数据信息而且即使当前高倍速的光驱其数据传输率也远远达不到每秒27兆字节的传输要求视频数据将无法实时回放。这种未压缩的数字视频数据量对于当前的计算机和网络来说无论是存储或传输都是不现实的因此在多媒体中应用数字视频的关键问题是数字视频的压缩技术。 由上述引文可知YUV的采样率和采样精度是数字视频从模拟向数字化过渡中兼容性的解决方案。延续了模拟视频以行为单位扫描的机制模拟视频没有分辨率概念只有行的概念。由于这套标准是面向数字电视广播系统制定的统一标准一般只在广播电视领域中才会看到而在其他的数字化视频体系中基本没有体现。比如你在视频文件信息中找不到关于采样率的参数。
6.4 视频分辨率
视频分辨率也是数字化视频时代的主要特征由于模拟视频采用线扫描机制也就是按行显示图像而每一行的视频线中并没有进行数字量化所以模拟视频都是以多少行来界定的。比如PAL制式采用576行NTSC制式采用480行。
到了数字化时代为了量化视频的具体信息就必须对每行的信息进行采样并量化就形成了分辨率的概念。如果采用PAL制式的视频每行量化的图像点为768个那么分辨率就是768×576。也就是说把PAL制的视频图像可以分解为768×576个像素点组成。
虽然简单的看视频分辨率的概念挺简单的但实际上并没有那么简单。原因就是数字化视频的应用领域非常的多从最早的广播电视应用到监控安防到互联网应用后来又到了高清数字电视以及移动互联网等等。而因为涉及的行业很多每个行业都会制定自己的标准所以就形成了对视频图像分辨率的定义有了很多标准。我们就拿最常见的广播电视、监控安防为例
大家在计算机领域也都有接触过分辨率的概念比如VGA640×480、SVGA800×600、XGA1024×768、SXGA1280×1024、SXGA1400×1050、UXGA1600×1200、WXGA1280×800、WXGA1280×854/1440×900、WSXGA1600×1024、WSXGA1680×1050、WUXGA1920×1200等等。现在最高的标准是WQUXGA3840×2400。这个标准最早是由IBM制定的模拟信号的电脑显示标准后来被各厂家继续沿用和升级。再后来被VESA标准化组织统一制定。
但是为什么分辨率就不能是简单的数字非要在前面弄一堆字母呢
原因在于制定一个输出的分辨率并不是简单的设置有多少个像素点而是还要考虑到实现这个像素点成像的方法。包括色阶多少、带宽多大、扫描方式怎样如果深入的讲还有电路形式、增益控制、时序方式、寻址方式等等。如果没有详细制定这些图像是如何生成的那么各个厂家之间的产品可能很难兼容也就不会见到今天如此发达的计算机市场了。
同样的道理制定标准化的分辨率和实现方式有助于行业的统一和兼容。
监控安防领域有什么分辨率标准呢下面请看
图像格式分辨率色度取样个数色度取样行数Sub-QCIF128*966448QCIF176*1448872CIF352*288176144Half D1704*288352144D14CIF704*57635228816CIF1408*1152704576
这里解释一下CIF是 Common Intermediate Format 的缩写即通用影像传输视频会议video conference中常使用的影像传输格式是ITU H.261协议中的一部分。大家可能发现了每个分辨率的色度取样个数和行数都是对应分辨率的一半。没错因为这个标准因为考虑到摄像头的性能和传输的性能影响采取的是间隔像素采样和隔行扫描机制而间隔像素采样通过插值进行补齐。
不过这些参数貌似现在很难见到了为什么呢很简单因为监控安防现在都是高清化了都是D2、D3这种级别的对应分辨率是720P和1080P这一类。
那么在广播电视领域对于分辨率的定义又是怎样呢
前面已经提到了关于PAL制和NTSC制式的视频分辨率标准另外还有一个SECAM制式SECAM的分辨率为720×576。那么你会发现SECAM制式和PAL制的行数是一样的只有每行的分辨率不同。这是由于SECAM调制载波方式不同造成的。
在标清电视时代对于分辨率方面理解与现在其实有所不同。比如SECAM制式每帧图像是625行但是分辨率是720×576也就是只有576行。是因为视频信号传输过程中分帧正程和帧逆程而帧逆程就是回扫反向回去。在视频信号正常显示时需要消除行帧逆程扫描对画面的干扰所以就变成了576行。
到了高清时代数字电视推出了HDTV标准它对于显示分辨率的定义为1280×720逐行扫描也就是俗称的720P1920×1080隔行扫描也就是俗称的1080i1920×1080逐行扫描也就是所谓的1080P。
当然高清数字电视已经逐渐普及了目前正在面向4K高清过渡也就是所谓的UHDTVUltra High Definition Television超高清数字电视。UHDTV草案定义了两个分辨率标准及4K3840×2160和8K7680×4320支持50Hz、60Hz、和59.94Hz三种帧率只采用逐行扫描。UHDTV采用正交采样像素纵横比PAR为1:1显示纵横比DAR为16:9。
关于像素纵横比和显示纵横比的概念相对比较简单这里就不做解释了。如果不清楚的可以搜索一下当然同样也可以我。
6.5 信号同步
信号同步是在广播电视领域中非常重要的技术如果信号没有同步导致行扫描时没有在指定的位置显示图像则整个显示画面都会出现问题此时的电视画面一定是没法看的。
要想图像内容在正确的位置显示就必须提供同步信号来进行约束。而不管是模拟电视时代还是在数字电视时代不管是电视机还是显示器都需要信号同步。
同步信号一般有两种分别为场同步VSYNC和行同步HSYNC。
专业设备中的专用视频同步接口
虽然有很多设备如电视机的复合信号输入Composite、HDMI输入显示器的DisplayPort输入专业设备的SDI和HD SDI输入都没有专门的视频场同步和行同步信号接口但并不是说这些信号不需要同步。而是这些信号接口把场同步和行同步信号已经调制到了信号中。
也就是说我们平时见到的视频信号接口中并非只有纯粹的视频信息还包含了很多的信息比如同步信号、时钟信号TCTimeCode、CEC控制信号、HDCP版权保护信息、SerialClock设备与分辨率识别信息等。
7 互联网视频应用的到来
早期的宽带速度只有12Mbps56K modem和ISDN时代根本就没视频什么事想要在线播放DVD影片是不可能的至少510MbpsVCD也不行而且技术上不支持。MPEG组织的科学家就开始研究能够适合在网络上播放的视频压缩方法也就是后面推出的MPEG-4压缩格式。
MPEG-4很明显的特征就是适合在网络上播放灵活度更高功能更加强大
压缩比更高更灵活。MPEG-1压缩比为2030倍MPEG-2压缩比为1020倍MPEG-4压缩比从几十到一百多倍不等对于画面内容可以使用不同的压缩比率可以对非重要对象使用高压缩比对重要对象使用低压缩比。这样可以在保证主要画质情况下压缩比更高不同对象可以使用不同编码算法进一步提升压缩效率音视频搭配更灵活交互性更强尤其适合互联网这种模式。
MPEG-4后来产生了很多衍生压缩算法比较著名的就是Xvid和Dvix了。其实MPEG-4的知名度不如Xvid和Dvix因为在那个时期MPEG-4为了适应互联网较低的带宽速度大部分应用都是一些低分辨率低码流的视频。而Xvid和Dvix虽然源自MPEG-4体系但是面向视频文件存档进行了优化可以比DVD小34倍的大小存储与DVD画质非常接近的视频内容。受到了用户的极大喜爱以至于在那个时期已经成为盗版影片的必选格式。
7.1 RealMedia曾经的王者
曾经互联网视频最大的赢家是Real Network也是它最早实现了基于互联网的流媒体视频在线观看。想当年还在56K Modem窄带时期Real Network公司就已经提供了视频在线观看功能。笔者曾经在那个还在PSTN上进行拨号的时代体验过通过realplayer观看NBA的直播。如果以现在的标准来衡量那个时期的产品那就是延时巨大经常要loading几分钟、画质惨不忍睹分辨率超低马赛克严重、经常性的卡顿。
但是随着宽带的逐渐普及RealMedia的巨大优势得以施展。在那个时期RealMedia是当之无愧的王者。
首先RealMedia压缩标准并非是MPEG-4衍生的版本而是一个私有的压缩标准。这个标准由Real Network公司创立且独有。RealMedia拥有极大的压缩比远超MPEG家族。比如说一部标准DVD格式的电影大约4.3GB容量如果采用Dvix压缩的话大概能压缩到700MB而使用RM格式压缩连700MB的一半都不到。即便是到了后期的RMVB压缩格式也基本不会超500MB。
第二Real Network公司在当时提供了世界上最完善的流媒体系统方案只不过是收费的。那个时候的竞争对手只有微软的Windows Media Encoder免费但是功能不完善。而RealMedia Encoder提供了VOD模式和LIVE模式完整的流媒体解决方案虽然比较贵印象中大概1万多美金。
对于商业化应用的企业而言要想做直播和点播业务自然RealMedia Encoder服务会更加靠谱。虽然是收费的但是系统稳定、可靠性强、又有服务支持Windows Media Encoder只能在MSDN社区寻求帮助没有技术支持。所以说那个时期Real公司已经处于垄断地位了。
不过在那个时期Real公司面临最大的问题是盗版。因为RealMedia的播放器虽然是免费的但是编码器、解码器、流媒体服务器等等都是收费的。随着real格式日渐盛行盗版就变得非常猖獗。当然Real公司没有微软那么财大气粗所以自然要到处封杀。这只能说是在21世纪初期的互联网现状如果要是放到现在像Real这种公司风投还不挤破大门公司的估值少说也得几百亿美金吧。
可惜的是由于封闭而且收费加上到处封杀给了竞争对手很多机会。然后就有了Flash流媒体的崛起。
RealMedia能强大到什么程度呢在21世纪初一直到2010年之前的差不多十年间real格式一度成为了互联网视频格式的几乎唯一选择。那时候几乎所有盗版的电影和视频文件全都是基于RM和RMVB格式的。21世纪以前呢那是avi的天下呵呵。
RealMedia的视频压缩主要分为两个阶段第一阶段就是RM格式第二阶段是RMVB。由于RM格式虽然压缩率出奇的高但带来的问题就是画质很差马赛克严重。随着宽带逐渐普及人们对画质的要求逐渐提高加上竞争对手的压力Dvix和XvidRM升级到了RMVB。多出来“VB”这两个字幕其实指的就是“Variable Bitrate”动态码率或者叫可变码率。关于码率的解释我们在文章最后来做。
RM升级到RMVB之后一直被诟病的画质问题得到了提升同时也可以支持较高的清晰度最大到720P。但是RMVB推出的时间已经晚于竞争对手加上商业化的原因以及更新速度越来越慢。最终消失在互联网的视野中。
7.2 Flash Video的崛起
不同于RealMedia的全行业流行Flash Video以下简称FLV主要应用在流媒体领域提供VOD点播和LIVE直播服务。与Dvix和Xvid一起成为了第二阶段的黄金组合。
FLV的压缩编码也不是源自MPEG-4而是另外一个强大的标准H.26x体系最早出现在1997年的MacWorld Expo大会上。说来很有意思FLV天生就和苹果是一对到最后却被苹果抛弃……
首先FLV并非是一种压缩编码格式而是封包格式比如AVI、MKV、MP4、MOV这些文件都是一种封包格式。关于封包格式的问题由于涉及技术过深在这里暂不作详解。感兴趣的用户可以自己了解掌握我也行哦。FLV采用的视频压缩编码其实有蛮多的开始是Sorenson Video和Sorenson Video Pro以及Sonrenson Spark后来加入了Sorenson MPEG 1/2/4再后来就是目前最流行的H.264。
其实早期Sonrenson的很多压缩编码格式源自QuickTime压缩编码也是基于H.263的压缩编码应用。所以我们就不单独介绍这种编码的特点了。
至于FLV在市场上的表现其实大部分人都可能比较了解。毕竟国内的视频大站比如优酷土豆、酷6、PPS、PPTV等早期全都是用的FLV国外的大站如youtube也是最早的FLV用户。只是随着苹果公司倡导的全面去flash化运动所有视频大站不得不开始往HTML5转型。
7.3 Windows Media Video
WMV一直是一种不温不火的压缩编码格式出道很早但应用很少。早在RealMedia时期微软就已经推出了WMV压缩格式。并可以配合Windows Media Encoder实现流媒体应用也可以单独编码以文件形式存储。可以说路数跟Real公司一样只不过是免费的。
其实Windows Media Encoder以下简称WME一直都没有什么起色属于那种历史悠久但无人知晓的品种。早期在跟RealMedia竞争中处于下风但至少有不少用户知道。后来有了FLV之后基本就看不到WME的身影了。
至于WMV的压缩格式最开始也是一种私有格式。只不过到了WMV 9.0的时候微软向SMPTE学会提交的标准化方案并入到了VC-1标准体系中。也就是其他家也可以共享这种编码技术。
在早期的WMV标准里面比如WMV 7.0是基于MPEG-4 part2实现的编码算法。最早期的版本没有资料但是可以看得出WMV主流的版本主要是基于MPEG-4编码的。
7.4 H.26x家族
除了知名度很高的MPEG组织隶属于ISO国际标准化组织下面的部门还有一个在视频编码压缩领域有突出贡献的组织那就是VCEGVideo Coding Experts Group视频编码专家组。VCEG属于另外一个非常厉害的组织ITU国际电信联盟下属的部门可能大部分人都不知道这个名字但你一定知道他们提供的标准——H.264。
VCEG组织主要编撰的是H.26x标准体系主要有H.261H.263H.264。
H.261主要是面向视频会议领域的也主要应用在监控安防领域。前面曾讲到的都是低分辨率低码流视频。
H.263 算是H.261的加强版本主要是支持更高的分辨率16CIF采用了更高级的运动补偿算法。后期又升级到了H.263和H.263使得算法性能和分辨率等都有了明显的提升。
除了知名度很高的H.264以外还有一个H.262标准只不过应用非常少就不讲了。
7.5 H.264、MPEG-4 part10 AVC
目前大家最熟悉的压缩编码格式莫过于H.264了其实它还有另外一个名称MPEG-4 part10 AVCAdvanced Video Coding。原因是这个标准不是一家制定的而是两家世界上最权威的编码专家组织一同来完成的。那就是ITU下面的VCEG组织和ISO下面的MPEG组织。大家有兴趣的话可以搜索一下ITU就知道它在世界标准体系里面的重要性了。目前全世界的通信网络标准比如2G的GSM、3G的WCDMA、TD-SCDMA、CDMA2000以及4G的FDD-LTE和TDD-LTE都是ITU来发布的。
H.264/MPEG-4 AVC是融合了两家权威组织的知识结晶是目前世界上最优秀的编码算法。它的特点非常多我只列举一下大家能感知到的一些特点。更多的内容大家可以自行查阅资料。
编码压缩率较高也很灵活。同等画质下压缩率为MPEG-2的2倍MPEG-4的1.52倍。而且可以用很高的码率MPEG-2接近和很低的码率MPEG-2的1/8来实现更快的传输需要和更高的画质需要。动态效果更出色基本上彻底消除了马赛克现象。比如像《变形金刚》电影里面的大动态场景你仍然可以非常清晰的看清画面。压缩效率更高比如静态画面可以实现超高的压缩比。这是因为H.264/MPEG-4 AVC最大程度的去除冗余数据使得编码效率提升。错误修复能力可以在网络QOS较差的环境下更高效率的传输。适合各种行业应用不管是视频会议、安防监控这类的高压缩使用还是互联网流媒体的动态网络环境使用以及广播电视这类高画质标准使用。所以你看到的结果就是几乎所有行业都在使用这个标准国内的有线电视仍然是MPEG-2主要是由于有线电视的带宽很高且目前还比较充裕加上技术升级成本很高。比如小到CIF尺寸的视频大到4K标准的电影文件你会发现他们基本都是基于H.264/MPEG-4 AVC压缩的。行业应用广泛还得益于H.264/MPEG-4 AVC这种编码格式的产品线健全。
大家可能都知道的一个道理当压缩率越高的时候同等画质下编码就越复杂计算量越高。所以对于H.264的编码和解码其计算量比过去的MPEG-2、MPEG-4等都高了很多。所以也就会出现较早期的电脑在软解码CPU解码H.264视频的时候容易出现卡顿。就是因为对计算性能要求较高。
但是好在有大量的专用编码解码芯片以及专门对H.264编解码优化过的GPU手机GPU和电脑显卡GPU使得流畅性和速度得到了保障。所以你会发现某些高画质的视频可能在电脑上播放会很卡但是在一些机顶盒上播放会非常流畅。
7.6 H.265
其实在H.264还没流行起来H.265标准就已经建立了。主要特点是压缩效率进一步提升对UHDTV的支持更好的信噪比等等。
目前已经有一部分手机、监控安防设备、视频会议设备开始使用H.265编码格式。预计以后会更多并且逐渐普及。
7.7 QuickTime家族
说起QuickTime大家一定会想起苹果公司。没错quicktime就是苹果公司推出的一整套编码、解码、播放和流媒体解决方案。quicktime的压缩格式早期是私有的由于早期MAC系列电脑那时候没有iphone普及率很低所以使用quicktime这种格式的非常少包括他们的流媒体应用。
只是到了后期随着iphone的大量用户quicktime才被大家所知。但这个时候苹果早就将quicktime标准加入到了MPEG-4标准体系中以及后来H.264出现。结果大家都清楚了苹果目前也在用H.264压缩标准。
其实除了上面讲到的主流非主流的视频压缩编码格式以外还有很多大家不了解的。因为应用非常少且现在几乎都是被H.264统一了市场。
8 码流的详解
简单的说码流就是视频每秒大概产生多大的视频文件一般以bpsbit per second每秒产生比特数为单位。其中b代表bit比特跟B容易混淆。其实B代表Byte意为“字节”。1Byte字节8bit比特。一般存储文件时通常用B表示传输文件时为了表达速度时一般用b表示。
码流常用于视频传输时标记视频属性的这是因为流媒体尤其是直播体系中文件的大小没有太多意义。因为观众可能是随时进来观看的那么一直等到他观看结束后才能获取到视频文件的大小。还有一点就是TS流文件不需要从开始读取它本身就没有文件头尾的概念可以从任何一个片段开始读取。所以这时候文件大小的意义也不大。
那么为了准确评估视频需要用到码流这个参数。因为码流代表你每秒需要传输的数据量需要与你的网络进行匹配。假如你的网络带宽是2Mbps这代表理想状态下。那么如果你播放码率为1.5Mbps约等于1500Kbps的流媒体视频就很可能会卡顿。主要原因是网络QOSQuality of Service服务质量的问题它无法保证数据一直都能以最高速度传输毕竟网络环境很复杂。
在早期的时候压缩编码标准都采用的是恒定码流编码形式CBR模式即每秒钟产生的视频文件大小是完全一样的。例如MPEG-1的码流就是1.5Mbps那么60分钟的视频产生的文件就是675MB正好一张VCD光盘的容量。
等到了MPEG-4时代由于网络环境的复杂性如果采用恒定码流的策略在网络速度突然变差的时候视频就容易卡顿。另外就是视频画面里面如果有存在大动态场景的时候原先的码流可能会引起画质变差需要临时降低一下压缩率。所以根据这两种情况的应用在流媒体直播编码和视频压缩编码时根据实际情况可以采取不同的码流。所以就产生了可变码流编码形式VBR模式。
在进行VBR编码时为了充分提高压缩编码率可以采用2次压缩法也就是2pass。但是2次压缩法会大大降低压缩的速度虽然视频码流更低画质更好但编码时间也大大拉长。