浅谈数字视频的编解码技术(上)

2010-03-17 16:02:00 来源:安防知识网 作者:郑寅晖
技术/方案频道文章B

[摘要] 在数字视频监控领域中,视频的编解码技术是其核心,正确理解数字视频的编解码概念有助于更好地设计数字视频监控系统与合理地选择相关产品。然而长久以来,充斥于网络上关于各种编解码技术的描述艰涩难懂,更谈不上很好地理解。本文试图以简单明了的语言与图解,叙述关于视频编解码的若干重要概念,以便初学者能正确理解这些概念,推动数字视频监控领域的工作,甚至为研究具体的编解码标准打下良好的基础。

  在数字视频监控领域中,视频的编解码技术是其核心,正确理解数字视频的编解码概念有助于更好地设计数字视频监控系统与合理地选择相关产品。然而长久以来,充斥于网络上关于各种编解码技术的描述艰涩难懂,更谈不上很好地理解。本文试图以简单明了的语言与图解,叙述关于视频编解码的若干重要概念,以便初学者能正确理解这些概念,推动数字视频监控领域的工作,甚至为研究具体的编解码标准打下良好的基础。

  模拟视频信号的缺憾及其数字化

  原始的视频信号是模拟信号,即信号的幅度、频率或者相位是随着时间做连续变化的。模拟视频信号在一定条件下能保证图像质量的优秀以及完全没有延时性,因而模拟监控仍然在目前占据主流的地位,在某些对画面质量和延时性要求较高的领域甚至是不可替代的。但是,模拟信号的传输和存储都存在巨大的问题,模拟信号中除了有用的信号之外,还会产生伴生的噪声信号以及在各种因素下侵入的干扰信号。模拟视频信号是由一系列不同频率的正弦信号组成的,和所有电磁波一样,模拟视频信号在介质中传递也会损耗,在同一种介质中,频率越高损耗越剧烈。而对于模拟视频信号来说,频带中的高频分量决定了图像的清晰度和色彩饱和度,这也就解释了为什么模拟视频信号经过较长一段同轴电缆的传递后变得色彩丢失图像模糊了。为了避免在传输介质中的损耗,在传输路径上往往会增设一些放大器,但没用的噪声也被增强放大。同时,由于目前电子产品制造工艺水平的局限,模拟信号传输路径上的各种设备都无法做到输入和输出的完全线性对应,这就是说,模拟视频信号每经过一个设备,就不可避免地对原始信号产生变形和破坏,中间的环节越多,最后输出的信号和原始信号相比就失真越厉害。并且,模拟视频的存储也是一大问题,最初,模拟视频被存储在磁带或者磁盘上,经过一段时间的存放,磁带或磁盘上磁性粉末会变质氧化,造成回放录像资料时图像的劣化,而且随着时间的流逝,这种劣化是不可避免和逐渐加重的。

  为解决上述模拟视频存在的问题,有必要将模拟视频数字化。数字化后,原始视频信号变成由0和1构成的数字流,复杂的信号就变成了简单的2个状态的组合,无论是传输还是存储,维持2个状态的准确性显然要容易的多,无论经过多少级传输,无论视频资料保存多久,只要0与1的数字流不变,输出的视频质量就不会变化。

  如何实现模拟视频信号的数字转化呢?众所周知,模拟视频信号的峰值是1V,即一个周期的视频信号,波峰到波谷的幅度是1V。在数模转化中,通常要使用PCM编码(又叫脉冲编码调制——数字通信的编码方式之一。主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化,同时将抽样值按分层单位四舍五入取整量化,同时将抽样值按一组二进制码来表示抽样脉冲的幅值)技术,如果这个信号以10位PCM的数字编码表示,那么将把1V均分为1024(即2的10次方)份,因此模数转换后的信号电压幅度误差为1/1024V,此电压叫做量化电压误差,量化电压误差将随着编码位数的增加而下降。1024份不同的幅值从小到大排列,0V、1/1024V、2/1024V、3/1024V⋯⋯1V分别对应的数字编码为0000000000、0000000001、0000000010⋯⋯1111111111。每个这样的0、1组合对应一个特定的幅值,而这个幅值将对应产生此幅值的时刻。这样,每个不同的0、1组合都和一个周期内的某个特定时刻建立了对应关系,至此,一个周期的模拟视频已经完成了数字化的全过程。这样的过程也称模拟视频的编码(注意不同于后文提到的压缩编码),编码设备只需在上述特定的时刻发送一个0、1组合到接受设备即可,接受设备根据接收到的0、1组合可恢复出此时刻的信号幅值,一系列恢复出的幅值连接起来就形成了一个在时间上近似连续的视频信号。编码位数越高,恢复出的信号在波形上就越接近于原始视频信号,这个逆过程就是视频的解码。这就是模拟视频数字化的基本过程,此过程可用图1表示。

[nextpage]

  数字视频的压缩

  模拟视频信号数字化后就具备了在网络上传输以及存储的基本条件,然而,一路模拟视频数字化后的数据量非常大(大概有120M左右),这样的数据量在现有条件下无论是网络传输或者是硬盘存储都显得不现实,所以有必要对数字视频流进行编码压缩,即所谓的压缩的算法,而压缩算法也是数字视频领域内重要的概念。

  通常可以采用有损或者无损压缩的方式来进行图像或者视频的压缩。在无损压缩中,所有的像素都会被保留到解压的同一图像中,其原理类似于WINWAR压缩应用软件。但是无损压缩的缺点在于压缩率十分有限,压缩过的视频数量仍然很大,不适合应用于网络视频解决方案。

  有损视频压缩技术用于减少和删除多余的视频数据,以便更高效地在网络上传输以及节省保存硬盘的容量。从理论上来说,模拟视频经过PCM数字化转换后,就已经对源视频信号产生了损耗,但是只要PCM编码位数高到一定程度,就可以认为视频质量经过数字化转化后仍然是优秀的(可参见数字光端机)。仅仅经过上述过程后生成的数字视频数据量仍然非常大,必须对这些视频流进行某种规则下的压缩,而这些规则必须能在保证视频质量或者尽量维持视频质量的前提下,大量删除那些对视频质量影响不大且人类无法看见的数据,这些数据的删除基本不会影响视频的观感。理论上说,数字视频经过压缩一定会损失一些细节,但是却能大大减小数字视频的信息量,便于网络传输以及节省存储容量,所以这样的牺牲是值得的;以下仅讨论有损压缩技术。

  目前最常用的视频压缩标准分别是M-JEPG、MPEG-4和H.264,其中H.264是最有前途的视频压缩标准,显然H.264将成为市场的主流。

  由于视频可以看做连续的图片,所以在介绍视频压缩算法之前,有必要先介绍一下图片的压缩。图片的压缩算法只处理单幅的图片,最广为人知的图片压缩方式就是JEPG,通常人们看到的图片大都是JEPG文件格式的。JPEG的压缩级别是可以由用户指定的,比如,如果想把绘制好的VISIO图片保存为JPEG文件格式,就会被要求写入压缩比率,压缩比率将会决定生成JEPG图片的文件大小,但是无论如何,生成的JEPG图片的数据量都会小于VISIO图片的数据量。再如,用Windows自带的画图软件画一幅图片,把它保存为JPEG文件格式后,可以明显看到,同一幅图片,JPEG文件的数据量远小于BMP文件的数据量。在把不同文件格式的图片选择保存为JPEG格式时,其实就执行了静态图片压缩算法,只是过程极短,难以察觉。同理,在电脑上看JPEG图片时,电脑其实也执行了相应的解码算法。

  MJPEG-4就是M(MOTION移动)的JPEG算法,网络摄像机或者编码器和数码照相机类似,捕捉压缩单幅的图片输出,如果要看到连续的效果,那么每秒中输出的图片数量不能低于15幅,当帧率达到30时,看到的就是流畅的视频了。由于输出的每幅图片都是JPEG的图片,所以它们都拥有同样的画面质量,最终形成的视频质量取决于数字摄像机或者编码器的内设置的压缩比率。

  以图2为例,对于M-JPEG算法来说,这个视频片段由3幅静态画面构成,每幅图片单独采集,单独进行压缩然后打包传输,每幅图片相对独立,和彼此没有关系。压缩编码芯片将对每幅画面中所有对象进行压缩计算,生成压缩文件,这种方式也叫帧内压缩。[nextpage]

  MPEG-4和H.264是较好的视频压缩算法,均采用帧间压缩的办法进一步压缩视频的数据量。帧间压缩方案基于以下原理:图像采集设备同样先会生成一定帧率的原始帧,然后对比两帧监控前端采集到的图像,第一帧图像将作为参考帧,第二帧图像将和第一帧图像做对比,只有那些变化了的部分才被压缩传输,换句话说,真正压缩传输的那一后续帧只包含变化的部分。解压时将基于参考帧和差异部分来构建一系列视频。显然,一个视频片段中,只需要完全压缩一帧或者个别帧画面,而别的帧只压缩相对于基础帧变化的部分,这样做明显地降低了视频的信息量,如图3所示。

  图3中,房子的图像在一系列画面中不变,那么只在第一帧图像中对房子进行编码压缩,后续视频中不再处理房子的画面,而只压缩发生变化的画面,即跑动的人,显然,视频的数据量会下降很多。这种办法基于差分算法。在这种算法中,相邻的帧存在彼此依存的关系,后续帧的压缩编码要基于基础帧,故这种压缩方法又叫帧间压缩。

  此外,基于“块”的运动补偿技术可以进一步压缩视频数据。这种压缩方法由上述方法演变而来,其原理是:一幅画面由不同的对象构成,可以把图中不同的对象定义为不同的对象“块”。视频序列中大量的 “块”都可以在前面的帧中找到,不同的是,这些变化的对象“块”可能会出现在不同的位置。于是,可以通过在参考帧上查找匹配块的方式逐块地构建新的图像帧,而在此过程中,只需对基础帧中的各个图像块编码压缩,在后续视频中,仅计算相关对象块的移动矢量(带方向的数值)即可,通俗地讲,就是计算每一个块往某个方向移动的距离。新生成的后续帧内将只包含各个块的运动矢量值而不含块本身,而所有的对象块的编码都可以在基础帧内找到。毫无疑问,这样会极大地压缩视频数据量,这种方法叫做运动补偿技术,如图4所示。

  在帧间压缩的视频编码方式里,将把图像序列中不同的帧分为3种类型,分别是I帧、B帧和P帧。

  I帧叫帧内编码帧,这是一种自带全部信息的独立帧,在帧间压缩编码算法中充当基础帧的角色。后续画面将和基础帧进行对比以找出发生变化的部分进行压缩编码。由于I帧本身独立,包含所有视频信息,所以解码时不需要其他图像的参考即可独立解码。I帧的缺点在于,由于包含所有视频信息,故压缩率不可能太大,压缩后的数据量不会很小,这点类似于前述的M-JPEG方式。

  P帧也叫帧间预测编码帧,P帧的构建需要参考前面的I帧或者P帧的内容。P帧内仅仅包含相对于前帧变化的部分压缩编码。正因如此,P帧对前面的I帧或者P帧有着复杂的依赖性,对传输中的错误非常敏感。P帧只需要参考前面的I或P帧。[nextpage]

  B帧即双向预测编码帧,B帧的构建需要和其前面和后面的帧同时进行对比才能完成。换句话说,B帧完全是压缩算法有根据地“猜”出来的。由于压缩编码芯片多了这部分工作,故采用B帧后将会产生较大的延时。通俗地讲,B帧类似数码相机中的电子变倍,我们都知道,电子变焦的原理是利用插值算法,实际画面并没有变大,只是CPU计算出相邻像素的中间值然后插在相邻像素之间,形成画面被放大的感觉。B帧的原理也是如此,他会对相邻的前帧和后帧进行比对处理,找到两者画面的中间状态,然后生成一幅新的图像,这幅图像完全是芯片根据前后两帧画面计算出来的,芯片认为两幅画面之间应该是什么样子,于是按既定算法生成一个B帧。理论上任两幅连续画面之间都存在一个或多个过渡的画面,B帧就是利用这个原理生成的。当然,可以根据需要添加若干个B帧。显然,B帧能使画面更加平滑流畅但将对压缩编码芯片的计算能力提出更高的要求。B帧需要同时参考其前后的帧才能构建完成,这点和P帧有所不同(如图5)。

  当视频解码器逐帧对视频流进行解码重构视频时,必须从I帧进行解码,如果使用了P帧和B帧,则要和相关的参考帧一起进行解码。

  可以想象,如果很长一段视频只有一个I帧,而后续帧统统是基于I帧参考计算出的B或者P帧的话,再精确再高级的算法也没法保证图像质量一直优秀,因为实际图像很快就会发生较大的变化,可能整个画面完全变化。所以需要不断地插入新的I帧供后续P帧参考,I帧的插入频率是可以通过视频编码设备设置的,但是频繁地插入I帧,无疑将增大视频的数据量。此外,采用B帧将会加大视频的延时性。

  目前,主流实用化的视频压缩算法都是以上述原理为基础实现的,当然,实际的算法要复杂得多,但基本原理如此。

  对于MPEG-4和H.264的详细算法定义,可以去网上查询,这里只对上述几种压缩算法做一对比。显然,M-JEPG可以最大限度地保证视频质量,但是由于压缩率低,压缩后的视频数据量仍然很大,在目前的视频监控领域基本不采用。真正实际使用的压缩算法是MPEG-4和H.264,而H.264在保证同样视频质量的条件下,占用带宽要小于MPEG-4,远小于M-JPEG。目前业内已经达成共识,H.264算法将成为未来一段时间内视频压缩算法的主流技术。

  图6可清楚地比较出同样视频质量的条件下,不同算法的占用带宽情况。

  在图6中,H.264算法采用基准类别,即视频序列中不出现B帧,用于减少延时。而MPEG-4则以使用运动补偿算法和不使用这种算法的做了一个对比,可见,使用运动补偿算法的占用带宽要少于不使用这种算法的。无论如何,H.264在实现同样视频质量的前提下,将分别比MPEG-4和M-JEPG节省50﹪和80﹪的数据量,正因如此,H.264算法才成为行业的首选。

  凡事总有两面性,H.264的先进性能是以算法的复杂程度为代价的,此算法的实现将对编码设备芯片以及解码工作站的性能提出更高的要求。

  【相关阅读】浅谈数字视频的编解码技术(下)

0 0
[责任编辑:邵国秀]

《安防知识网》一个服务号 二个订阅号 微信服务全面升级

转载声明:凡文章来源标明“安防知识网”的文章版权均为本站所有,请不要一声不吭地来拿走,转载请注明出处,违者本网保留追究相关法律责任的权利;所有未标明来源为“安防知识网”的转载文章均不代表本网立场及观点,“安防知识网”不对这些第三方内容或链接做出任何保证或承担任何责任。

您可能需要

专栏推荐

阅读推荐

修改
修改
H3C IP智能监控系统应用于“平安玉溪” 2010-03-17 15:54  来源:投影时代 
LCD监视器结构原理及应用分析 2010-03-18 11:54  来源:安防知识网

温馨提示: 您已经完成兴趣标签设置,建议登录后保存。

请输入密码