←首页

音视频基础

视频为什么能压这么小

一部高清电影不压缩要几百 GB,流媒体只用原来的百分之一不到。

1080p30 原始746 Mbit/s
高清流媒体5 Mbit/s
压缩比约 150:1

视频压缩靠两件事:去掉一帧之内的重复,再去掉帧与帧之间的重复。后者贡献最大,因为相邻两帧通常几乎一样。

1080p 视频不压缩约 746 Mbit/s,流媒体高清只要 5 Mbit/s,相差约 150 倍。

1. 不压缩有多大

按常见的 1080p、每秒 30 帧、8 位 4:2:0 采样计算:亮度每像素 1 字节,两路色度各只保留四分之一。

项目计算结果
每帧像素1920 x 10802,073,600
每帧数据像素数 x 1.5 字节约 3.1 MB
每秒数据x 30 帧约 93.3 MB,即 746 Mbit
两小时电影x 7200 秒约 672 GB
流媒体高清建议带宽Netflix 官方建议5 Mbit/s

采样方式见 《Wikipedia:Chroma subsampling》;带宽见 《Netflix:Internet connection speed recommendations》。表中数值为按上述条件自行计算。

2. 帧内压缩:一张图里的重复

画面切成小块,每块换算成频率成分。平缓的区域只剩少数几个数,细节中人眼不敏感的部分被舍弃。这一步和 JPEG 压照片的思路相同。

切成小块比如 8 x 8 变换像素值变频率系数 量化丢掉不敏感的细节 熵编码常见值用短码 只有量化这一步会损失信息
示意。

3. 帧间预测:只记变化

大部分帧不单独存整张图,只存和参考帧的差别:哪块从哪儿移过来,移动后还差多少。

I 帧完整一张图 B 帧参考前后 B 帧参考前后 P 帧参考前面 下一个 I 帧可以从这里起播 绿线:P 帧只记相对 I 帧的变化;灰线:B 帧同时参考前后两帧
示意,实际的帧类型顺序由编码器决定。

依据:《Wikipedia:Video compression picture types》;标准原文见 《ITU-T H.264》。

4. 为什么有时会糊

场景结果原因
对话、静态画面很清晰帧间变化小,码率够用
下雨、烟花、快速转镜出现方块和糊每帧变化大,同样码率下只能多丢细节
拖动进度条要等一下从最近的 I 帧开始解码P 帧和 B 帧离开参考帧无法单独显示

资料链接

资料地址
《Wikipedia:Chroma subsampling》https://en.wikipedia.org/wiki/Chroma_subsampling
《Netflix:Internet connection speed recommendations》https://help.netflix.com/en/node/306
《Wikipedia:Video compression picture types》https://en.wikipedia.org/wiki/Video_compression_picture_types
《ITU-T H.264》https://www.itu.int/rec/T-REC-H.264