上一篇文章我们主要讲解了音频压缩算法的主要指标,以及几个典型的音频压缩算法。本章将延续上一讲的内容,分析视频压缩算法。
视频压缩算法
视频压缩算法比较,Wiki百科官方收录分类,请自备梯子
视频压缩算法比较en.wikipedia.org这里建议大家关注三个东西。H264/5,DCT算法,FFmpeg开源库。
目前市面上主流的视频编码算法有:x264/5,vp8/9。本文简单记录一下它们的编译方法。其中x264现在占据着H.264视频编码器的半壁江山,x265则是目前实现H.265标准最好的开源视频编码器。是x264的潜在替代者。而vp8/9则是Google推出的开源视频编码器,它提出的VP9编码标准的性能也不错,但目前主要是Google这家公司在玩。
对于视频的编解码,常常还会涉及到专用硬件加速。这一块本文不涉及。
视频压缩性能衡量指标
- 有损/无损编码:
- 压缩比:实际输入数据量与输出数据量的比值
- 编解码时间(时延):编解码复杂度:
- 可变帧率(VFR)
- 兼容的封装格式
其他几个东西都比较好理解,那这个封装格式是一个什么东西呢?其实就是打包视频、音频、字幕等的方式。具体的我们会在下一章中讲到。
在视频中,由于数据量较大,所以相对于音频编解码算法,视频的编解码算法对于编解码时间还是比较关注的。真是因为这种编解码算法都是运算量极大的算法,因此一般核心音视频软件都是通过C/C++撰写的,同时还要关注其对于CPU资源的需求量,必要时通过GPU调优。
H264 编码
H.264是MPEG4的第十部分,是一个高级视频编码(AVC)标准。是一种面向块,基于运动补偿的编码算法。与旧标准(H.263)相比,它能够在更低带宽下提供优质视频,且复杂度适中,实现难度适中。因此,得到了广泛的发展。
H.264标准可以被看作一个“标准家族”,成员有下面描述的各种配置(profile)。一个特定的解码器至少支持一种,但不必支持所有的。解码器标准描述了它可以解码哪些配置。
更多细节可以参考Wiki百科:H.264标准
提到H264标准,就不得不提x264算法实现了。x264其实就是目前最流行的H264标准的算法实现库。而大名鼎鼎的FFmpeg对于H264的编码就是用的x264代码库。其中有一个特别显眼的注释: H.264 encoding using the x264 library
x264是H264标准的算法实现库:
x264 官方www.videolan.org所以H264、x264以及FFmpeg三者的关系可以概括为:H.264是标准(包含编码、解码),x264是标准的实现(只实现了编码),FFmpeg是一个框架,但是里面包含了H.264的解码实现,编码采用了x264。
H264 算法细节
英语标准原稿read.pudn.com首先,我们先看看编解码的整体结构,有个全局观。
好了,接下来放大招了:
ITU H264标准文档www.itu.int简直是一份全英文的数学公式,你别妄想着个把月能搞懂里面所有的东西(别问我怎么知道的),用的时候来查就好了,建议直接看Annex。接下来我们就进入正题了。
Profile和Level
H264定义了很多中的Profile来限定具体实现的H264算法的能力,然后通过