一、为什么视频需要压缩?
无论视频还是音频,未经压缩,存储体量巨大,传输也困难。
以一个简单演算为例:1920×1080(px)尺寸,R、G、B各8位采样(真彩色),帧率30fps:
3×8(bit)×1920×1080×30(s)÷8(byte)
=6220800byte×30(s)≈186.6MB/s
1分钟大约是11GB
一部90分钟的电影,约是1000GB
一般硬盘也就1TB,读写速度平均50-90MB/s。
二、人类视觉系统(HVS)特点
针对HVS的特点,数字视频系统的设计应该考虑以下因素:
- 对高频信息不敏感:可以丢弃高频细节信息
- 对高对比度更敏感:保留边缘和对比度信息
- 对亮度信息比色度信息更敏感:可以降低色度分辨率
- 对运动的信息更敏感:运动区域需要更高质量
三、视频编码关键技术
1. 预测(Prediction)
预测是视频编码中最重要的一环,包括:
- 帧内预测:利用当前编码块周围已经重构出来的像素预测当前块,去除空间冗余
- 帧间预测:利用视频图像在时间上的相关性,通过运动估计和运动补偿去除时间冗余
2. 变换(Transform)
通过从时域到频域的变换,去除相邻数据之间的相关性,即去除空间冗余。常用的变换方法包括DCT(离散余弦变换)等。
3. 量化(Quantization)
通过用更粗糙的数据表示精细的数据来降低编码的数据量,或者通过去除人眼不敏感的信息来降低编码数据量。量化是造成视频有损压缩的主要原因。
4. 扫描(Scanning)
将二维变换量化数据重新组织成一维的数据序列,便于后续的熵编码。
5. 熵编码(Entropy Coding)
根据待编码数据的概率特性减少编码冗余。常用的熵编码方法包括Huffman编码、算术编码等。
四、视频编码层次结构
| 层次 | 说明 |
|---|---|
| 序列(Sequence) | 一段连续编码的并具有相同参数的视频图像 |
| 图像组(GOP) | 一组连续的画面,用于定义视频编码的参考帧结构 |
| 图像(Picture) | 一帧完整的视频画面 |
| 条带(Slice) | 多个宏块的组合,用于防止编码错误扩散 |
| 宏块(Macroblock) | 16x16的像素块,视频编码的基本单元 |
| 块(Block) | 8x8或4x4块,用于变换和量化 |
五、常见视频编码标准
1. H.264/AVC
国际标准化组织制定的视频Codec标准,是目前最流行的视频编码标准之一。具有高压缩比、良好的网络适应性等特点。
2. H.265/HEVC
H.264的 successor,能够在相同画质下比H.264节省约50%的码率,但编码复杂度也更高。
3. VP9
Google开发的开源视频Codec,是WebM格式的默认编码器。与H.265/HEVC竞争。
4. AV1
由开放媒体联盟(Alliance for Open Media)开发的开源、免专利费的视频Codec,压缩效率比H.265和VP9更高。
六、关键参数
1. 帧率(Frame Rate)
视频每秒钟包括的画面数量(FPS)。帧率越高,视频就越逼真、越流畅。常见的有24fps、30fps、60fps等。
2. 分辨率
视频画面的像素尺寸,如1920×1080(Full HD)、3840×2160(4K)等。
3. 码率(Bitrate)
码率为每秒占用的数据量,用kbps或mbps来表示。码流是视频清晰度的一个重要指标,同样的压缩格式,码流越大,生成的视频损失就越小,视频相对来说也越"清晰"。
七、总结
视频编码的核心思想是:通过预测、变换、量化、熵编码等技术手段,去除视频中的空间冗余、时间冗余、视觉冗余等信息,从而在保证一定画质的前提下,最大程度地减小视频文件的体积。
理解这些技术原理,有助于我们更好地选择视频格式、调整编码参数,获得更好的视频质量和更小的文件体积。