谈谈视频编码

视频编码是一个很重要但是又很“默默无闻”的技术。说它很重要,是因为从过去的VCDVideo Compact Disc)、DVDDigital Video Disk)、到后来的RMVBReal Networks公司开发的多媒体文件格式)、流媒体点播、数字电视直播,再到现在的WebRTCWeb Real-Time Communications)、短视频、手机直播、VRVirtual Reality),一直都存在着视频编码的需求。自从计算机上出现了图像显示,图像视频编码技术开始起步,对高质量、低延迟、低码率的需求一直都在不断发展。说视频编码很“默默无闻”,是因为这项技术似乎一直不为大众所知。当人们谈起信息技术,一般都会谈到网站架构、数据库、ERPEnterprise Resource Planning,企业资源规划),网页设计、游戏、前端、后端等,很少有人会想到视频编码。

视频编码的重要性不必多言。但随着带宽和存储量的不断增加,有人认为视频编码越来越无用,至少不需要再继续发展。事实上,时代在发展,互联网上视频内容的占比越来越大,每天都产生大量的视频,对视频编码的需求也在不断扩展。一方面,源视频格式在不断发展。从场编码到帧编码,视频分辨率(以像素为单位)从最开始的352×288(Common Intermediate FormatCIF)不断增加到640×480(Video Graphics ArrayVGA)、1080×720(720P)、1920×1280(1280P)、3840×2560(4K)、7680×4320(8K),视频的帧率从24fpsframe per second)、30fps、到60fps、120fps,像素深度从8位、10位增长到12位。对色度分量的要求从420、422扩展到444。另一方面,实时的视频通信需求也在增长。以前大家坐在会议室里,面对大屏幕和专用的摄像头开视频会议。现在人们随时随地用手机作视频交流,主播用手机在户外给自己的粉丝做视频直播,甚至小孩子用手表给家长打视频电话。视频内容和使用场景的不断扩大发展,都对视频标准提出了更新的要求。

刚才提到了早期视频编码中的一个概念:场编码。那么,什么是场编码呢?早期的显示技术把现在的一帧(frame)图像分成两场(field),即奇数场和偶数场,如图11所示。

11 帧与场关系示意图

这两场在时间上并不是同时的,而是有时间间隔的。由于早期的采集带宽有限,无法做到1秒采集30帧。把帧改成场后,在同样的带宽下,可以提高帧率,让图像更流畅,同时也能保证肉眼看上去感觉不到闪烁。但是,这样做就给视频编码带来了麻烦。因为两场不是同一时间的,而且还是隔行的,操作起来很麻烦。MPEG2(Moving Picture Experts Group)里面就有很多针对场的特殊编码操作,甚至H264中还有场的痕迹。随着视频采集技术的提高,现在已经看不到场采集的视频源了,在新的视频标准里面,已经没有针对场视频源的特殊操作了。

视频编码的需求不断增加,对视频编码的能力提出了更高的要求,带宽和运算能力的提高,也为视频编码算法带来更多的发展空间。视频编码算法已经从简单的基于块的预测编码发展到现在的可变分块,包含各种复杂编码工具和图像处理工具的算法。但是有一点还没有改变,那就是视频编码的整体架构和最初保持一致,这个沿用至今的视频编码整体架构如图12所示。

12 视频编码整体架构

视频编码是一种压缩技术,跟大家经常用的zip压缩格式一样,压缩的原理都是去掉冗余信息。视频编码是针对视频内容的压缩,而zip是非特定内容的,属于通用数据的压缩算法。它们的原理有一部分是相似的。

在通用数据压缩中,首先要寻找相同的码字,相同的码字可以用索引(index)和长度(length)来替代。在视频编码中,寻找相同或相似的内容的过程非常多。例如,在参考帧中寻找和当前块最相近的块,并把它们的位置差称为运动矢量(Motion Vector,简称MV)。运动矢量也不是直接编码,而是要在周围的块里面,找到和当前块的MV最相似的MV,编码这两个MV的差值。

在zip中,索引和长度的编码方式是哈夫曼编码(Huffman coding)。在早期的视频编码里面,也是使用哈夫曼编码的,但是后来,哈夫曼编码逐渐被更优秀的算术编码取代。另外,游程编码也被zip和视频编码使用。

下面做个小实验,来了解zip编码和H264编码对视频的压缩性能的差异。

首先用Windows自带的zip程序压缩视频文件BasketballPass_416x240p50.yuv,此视频文件的大小为73125KB,压缩后得到BasketballPass_416x240p50.zip,文件大小为45356KB。然后用ffmpeg(在ffmpeg官方网站https://ffmpeg.org下载)来压缩这个视频文件,这里使用无损模式压缩,因为zip是无损压缩。压缩命令如下:

ffmpeg -pixel_format yuv420p -video_size 416x240 -iBasketballPass_416x240p50.yuv -vcodec libx264  -crf 0 test.mp4

压缩后得到的test.mp4文件的大小是24178KB,对比zip文件的45356KB,文件大小只减少了将近一半。可见H264无损压缩的效果一般,使用了很多压缩工具,连zip文件的一半都没有压到。

下面用H264的有损压缩方法来压缩BasketballPass_416x240p50.yuv文件,看看压缩率如何。编码命令如下:

ffmpeg -pixel_format yuv420p -video_size 416x240 -i BasketballPass_416x240p50.yuv -vcodec libx264  -crf 23 test_crf23.mp4

这次,压缩后的文件 test_crf23.mp4的大小为7067KB,一下子变成了zip文件的1/6,而且视频质量很好。

为什么视频编码可以达到很高的压缩效率,同时保持良好的图像质量呢?因为视频编码针对视频内容自身的特征和人眼的特点,开发了有针对性的压缩工具。这些工具包括:

  1. 变换与量化。
  2. 基于可变块大小的编码。
  3. 帧内预测与帧间预测。
  4. 熵编码工具。
  5. 去噪,分辨率变换,去除块效应等图像前后处理工具。
  6. 最小可觉察误差模型(just notice detect)编码工具等。

这些工具组合起来实现了视频编码的高压缩率。下面我们一一介绍这些编码工具。        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值