返回 登录
0

网易视频云:视频压缩编码浅谈

在这个全民直播时代,用户对视觉信息表达越来越重视,也越来越强调提高视频主观质量的需求,今天,我们就带着这些用户问题,讨论下视频压缩编码这项技术
  1. 视频为什么要压缩?
  视频即连续的图像,数字化后的图像或视频信息是海量的,举一个具体的例子,摄像头拍摄的一幅静态图像空间像素点(画面大小,也即分辨率) 640*480 个,每个像素点由RGB三元素组成,每个元素由8bit二进制位表达,则一副数字图像的大小为:
   640*480*3*8 = 7372800 bits
  视频是由很多幅图像组成,人眼感知视频播放流畅一般为24fps(frame persecond,简称fps),根据视觉暂留原理,要达到最基本的视频播放效果大约也需要10fps的速度,我们这里以24fps代表一般情况,电影胶卷都是以这个帧率在拍摄,也就是视频的1秒由24幅静态图像组成,则一秒产生的视频信号量为:

  640*480*3*8*24 = ?172 mbps,
  原始视频的大小由此可见,一秒耗尽172m,如果我们是在4g下直播,不到6秒就消耗1g流量,那直播不超过几分钟,流量包就爆啦,
  2. 视频为什么能压缩?
  压缩编码的前提是信息存在冗余,去掉冗余的信息,达到压缩的目的。那么视频信息有冗余么?当然有,视频信息作为普通的计算机信息数据一种,首先就存在着统计冗余,譬如我们发送一个视频文件给对方,我们会先尝试将其像其它普通文本文件一样用zip或rar压缩一下,减小一下空间和传输带宽消耗。其次,视频作为图像,存在空间冗余,一副数字化的图像各个像素点的值是缓慢变化的,像素值与其周围几个像素点的值具有很大的相关性,譬如一副图像的背景是一大片的红色,这很多一样的像素值就是空间上的冗余。再次,视频作为运动着的图像,存在时间冗余,即用视频采集设备拍摄的一幅幅图像之间是缓慢变化的,连续两个或多个图像之间是存在相关性的。最后,视频作为人眼视觉感知,存在视觉冗余,人眼对视频的激烈变化的部分往往不敏感,就如人耳对20-20000分贝以外的声音不明感一样,正是这种人眼视觉冗余,提供了我们视频有损压缩的前提条件。
  3. 视频如何压缩?
  压缩方法从大的方面分为 有损压缩,无损压缩,譬如我们用zip给任意文件打包压缩,压缩包能够通过解zip恢复成原来的文件,毫发无伤,所有数据信息没有任何丢失,这种压缩方式就是无损压缩,无损压缩有其卓越的优点:保真性,在一些卫星传图,医学X光图像视频等领域显得尤为重要,然后,它也有缺点,那就是压缩率不高,大概在 2 到5倍率 之间。
  另一种是 有损压缩,譬如压缩图像或者视频时,会根据人眼视觉感知特性,对那些人眼不敏感的数据不传输,牺牲一部分不重要的信息,来提高压缩率,当然压缩包经过解压也无法恢复那部分数据了,信息就丢失了,压缩解压后的图和原始的图是有差异的,这也就解释了 “主播看到自己的预览视频这么美,这么清晰,为什么观众看到的却有点模糊呢?”?
  视频信息的压缩混合了有损以及无损压缩编码方法,一般我们直播应用中的视频压缩都是采用有损压缩方式,来提高压缩率,降低存储以及传输带宽,一般标准视频编码的压缩率能达到几十倍甚至几百倍
  4. 视频压缩编码的主流技术H264编码介绍
  从 上世纪八十年代的推出第一代视频编码标准H120开始到现在的下一代视频编码H265,视频编码技术的发展一直吸引着工业界以及学术界的共同关注。其中国际组织:联合视频组(JVT)不遗余力的致力于视频编码标准的发展,不断提高视频压缩效率。
  从目前市场运用上看,无论是互联网应用,还是硬件芯片集成,最主流的视频编码技术依然是H264,下面结合压缩理论简单介绍下H264所采用的编码技术
  1) 去除数据统计冗余:H264采用两种熵编码方式: CAVLC ( 基于上下文的可变字长编码)和CABAC(基于上下文的二进制算数编码),CAVLC实现相对简单,编码效率高,但压缩率要比CABAC低15%左右,CABAC复杂度高,可以分场景采用不同的熵编码,让视频压缩后的平均码长接近信源熵值。

  2) 去除时间shang冗余:H264 采用帧间预测编码,当前像素块的编码参考之前已经编码重建帧的相应像素块,当前图像与前面的参考图像很相似(譬如视频画面相对静止)这时候帧间预测残差会很小,码率很低,相反,画面改变越大越快,帧间预测残差值就越大,压缩需要的bit数九越多,这也就解释了,当设定的最大允许码率一定的情况下“为什么主播的手机晃动起来,画面就有点模糊,不动就好清晰好清晰呢”。
  3) 去除空间冗余:H264采用帧内预测编码方式,当前像素编码参考之前已经编码重建的像素值进行,如果像素变化缓慢,那么预测残差将会很小,甚至为0,码率大大降低,这也就是为什么 我们传输黑色视频(手机摄像头被遮住),或者其他纯色视频,码率很低,设置的最大码率根本用不掉的原因。除此以外,H264采用变换编码的方式,将残差从空间域利用DCT(离散余弦变换)变换到频率域,结合差异量化编码方式,更进一步的去除空间冗余
  4) 去除人眼视觉冗余:H264编码器的输入图像或视频的色彩空间采样格式一般为YUV420,不同于RGB采样,YUV420利用人眼视觉对像素亮度分量更敏感,而色度分量没那么敏感,进一步将图像或视频的色度分量做2:1的采样,4个亮度分量,2个色度分量,另外,H264 采用量化编码的有损编码方式,也正是利用了人眼视觉对高频细节部分不敏感的理论基础,将残差系数低频部分采用更细的量化参数,而高频部分则粗化量化,一般的视频压缩失真也正是这个阶段产生。
  当我们对视频压缩技术有个大概的了解之后,我们就可以回答:“如何提高观众端的视频清晰度呢?”,当给定的编码器压缩率达到极限时,我们唯一能做的就是提高视频编码码率了。

评论