1、编码基础概念:什么是视频编码?为什么需要编码?有损与无损压缩的区别
各位同学好,我是老周。做视频编码这行十几年了,今天咱们聊聊最基础的问题——视频编码到底是什么。
说白了,视频编码就是把原始视频数据「压缩打包」的过程。你想想看,一部没压缩的1080p电影,一秒钟就要吃掉将近1.5GB的带宽。一部两小时的电影,光存储就得10TB以上。这谁受得了?
所以我们需要编码。编码的目的就一个:在尽量保持画质的前提下,把文件体积降下来。
1.1 为什么非要编码不可?
我刚开始做视频处理时,也想过这个问题:直接存原始画面不行吗?
不行。我给你算笔账:
| 分辨率 | 帧率 | 色深 | 原始码率 | 1小时体积 |
|---|---|---|---|---|
| 1920×1080 | 30fps | 8bit YUV420 | ~1.5 Gbps | ~675 GB |
| 3840×2160 | 60fps | 10bit YUV420 | ~12 Gbps | ~5.4 TB |
| 7680×4320 | 120fps | 12bit YUV444 | ~120 Gbps | ~54 TB |
看到没?不编码的话,一部8K电影能塞满一整块硬盘。而且网络传输根本跑不动——你家的千兆宽带,连一秒钟原始8K画面都传不完。
核心结论:视频编码不是「可选项」,而是「必选项」。没有编码,就没有流媒体、没有短视频、没有视频通话——整个视频产业都玩不转。
1.2 有损 vs 无损:鱼和熊掌
编码压缩分两种:有损压缩和无损压缩。这个区别,我当年踩过不少坑。
无损压缩
无损压缩,就是压缩完解压出来,跟原始数据一模一样。一个像素都不差。
常见的无损格式有:
- FFV1——档案级无损编码,我用来存原始素材
- H.264 Lossless——H.264的无损模式,但码率依然很大
- Apple ProRes 4444——后期制作常用,其实是有损但视觉无损
无损压缩的压缩比大概在2:1到4:1之间。说实话,对于视频来说,这个压缩比远远不够。
我的经验:无损编码只适合两个场景——存档原始素材、或者做中间格式用于后期调色。日常分发和播放,千万别用无损,码率太大,用户等不起。
有损压缩
有损压缩就「聪明」多了。它利用人眼的视觉特性,把那些你看不太出来的细节扔掉,只保留关键信息。
常见的做法包括:
- 色度子采样——人眼对亮度敏感,对颜色不敏感,所以把颜色信息砍掉一半
- DCT变换+量化——把画面从像素域转到频率域,高频细节直接量化掉
- 运动补偿——相邻帧之间只存变化的部分,背景不动就不重复存
有损压缩的压缩比能做到50:1甚至200:1。一部原始675GB的电影,用H.265压完可能只有2GB。画质嘛……嗯,看码率给得够不够。
注意:有损压缩是不可逆的。一旦压完,丢掉的信息就永远找不回来了。所以做后期制作时,千万别在原始素材上直接压有损——我见过有人把绿幕素材压成H.264,结果抠像时边缘全是马赛克,那叫一个惨。
1.3 编码的核心流程
为了让你更直观地理解编码到底在做什么,我画了一张流程图:
流程其实不复杂:原始帧进来 → 切成小块 → 做DCT变换 → 量化丢掉高频 → 最后用熵编码无损压缩一遍 → 输出码流。
这里面最关键的一步就是量化。量化参数QP(Quantization Parameter)直接决定了画质和码率的平衡。QP越小,保留的细节越多,码率越大;QP越大,细节丢得越多,码率越小。
1.4 有损 vs 无损:怎么选?
我个人的选择原则很简单:
| 场景 | 推荐方式 | 原因 |
|---|---|---|
| 原始素材存档 | 无损或视觉无损 | 保留后期调整空间 |
| 后期调色/抠像 | ProRes/DNxHR | 需要保留色彩精度 |
| 网络分发 | 有损(H.264/H.265) | 码率必须可控 |
| 直播推流 | 有损(低延迟模式) | 实时性优先 |
| 监控录像 | 有损(高压缩比) | 存储成本敏感 |
一句话总结:无损保真但费空间,有损省空间但丢细节。没有绝对的好坏,只有合不合适的场景。
1.5 我踩过的坑
最后分享一个真实教训。几年前我做一批4K素材的转码,为了省存储空间,直接用固定QP=28压了一遍。结果素材交付给调色师后,对方直接炸了——暗部全是色块,一拉曲线就出banding。
后来我才意识到:有损压缩的「损」在暗部区域特别明显。因为暗部的量化误差相对人眼感知更敏感。从那以后,我处理暗部多的素材时,都会适当降低QP,或者用10bit色深来缓解banding问题。
嗯,这就是经验。有些坑,不亲自踩一遍,光看书是学不到的。