1. 编码基础概念:视频编码原理、有损与无损压缩、码率、帧率、分辨率的关系
各位同学好,我是老张。做视频编码这行十几年了,踩过的坑比你们看过的片还多(笑)。今天咱们聊聊最基础的东西——编码原理、压缩方式、还有码率帧率分辨率那点事儿。
很多人一上来就调参数,结果画质越调越差。为什么?因为基础没打牢。你想想看,连视频是怎么压缩的都不清楚,调参数不就是瞎蒙吗?
视频编码到底在干什么?
说白了,视频编码就是想办法把原始视频文件变小。原始视频有多大?我给你们算笔账:
- 一帧 1920×1080 的画面,每个像素用 RGB 三个字节表示
- 一帧就是 1920×1080×3 ≈ 6.2 MB
- 每秒 30 帧,就是 186 MB/s
- 一部 90 分钟的电影,原始数据量接近 1 TB
嗯,你没看错,1TB。这谁受得了?所以必须压缩。
核心思路:视频编码利用的是人眼的视觉特性和视频帧之间的冗余信息。说白了,就是去掉那些你看不出来的、或者相邻帧之间重复的内容。
有损压缩 vs 无损压缩
这里有个关键概念——有损和无损。我刚开始做编码时,总觉得有损压缩就是"坏"的,无损才是"好"的。后来发现,这想法太天真了。
| 类型 | 原理 | 压缩比 | 画质 | 典型场景 |
|---|---|---|---|---|
| 无损压缩 | 去掉冗余信息,不丢失任何数据 | 2:1 ~ 3:1 | 完美还原 | 医疗影像、专业存档 |
| 有损压缩 | 丢弃人眼不敏感的信息 | 20:1 ~ 200:1 | 可接受损失 | 流媒体、短视频、监控 |
无损压缩能压到原始大小的三分之一就不错了。但有损压缩呢?H.265 在合理参数下能压到 1/100 甚至更小。你想想看,没有有损压缩,今天的 Netflix、抖音、B站全都不存在。
我的经验:做直播时,码率带宽有限,必须用有损压缩。但做后期存档时,我建议用无损或者接近无损的编码(比如 ProRes、DNxHR)。别为了省那点空间把素材毁了,我见过太多人后悔了。
码率、帧率、分辨率——铁三角
这三个参数是编码调优的基石。它们之间的关系,我画了张图:
这张图你看懂了吗?码率是总预算,帧率和分辨率是开销项。预算固定,开销越大,每帧能分到的"钱"就越少,画质自然就差了。
三个参数怎么搭配?
我给你们一个实战参考表。这是我多年调参总结出来的经验值:
| 场景 | 分辨率 | 帧率 | 建议码率 | 备注 |
|---|---|---|---|---|
| 短视频(抖音/快手) | 1080p | 30 | 2-4 Mbps | 手机观看,码率可以低一些 |
| 直播(游戏) | 1080p | 60 | 6-10 Mbps | 高帧率需要更多码率 |
| 电影/剧集 | 4K | 24 | 15-40 Mbps | 低帧率,高分辨率,码率要足 |
| 监控摄像头 | 720p | 15 | 0.5-1 Mbps | 低帧率省码率,够用就行 |
避坑指南:我曾经帮一个客户调直播参数,他非要用 4K 60fps 配 2Mbps 码率。结果画面全是马赛克,观众全跑了。记住:码率不够,分辨率再高也是白搭。这叫"码率饥饿",是新手最容易犯的错误。
编码器是怎么工作的?
简单说几个关键步骤,让你心里有个底:
- 帧类型划分——I帧(关键帧)、P帧(预测帧)、B帧(双向预测帧)。I帧是完整的画面,P帧和B帧只记录变化的部分。
- 运动估计——找相邻帧之间哪些块移动了,往哪个方向移。
- 变换量化——把像素数据转到频域,然后丢掉人眼不敏感的高频细节。这一步是"有损"的核心。
- 熵编码——用更短的码字表示出现频率高的数据,类似 ZIP 的原理。
嗯,这里要注意:量化参数(QP)是控制画质和码率最直接的旋钮。QP 越小,保留的细节越多,码率越大。我一般建议 QP 在 18-28 之间调,低于 18 基本看不出区别,高于 28 就开始明显损失了。
一个简单的调参示例
假设你要做一个 1080p 30fps 的视频,目标码率 5 Mbps。用 x264 编码器,命令行大概长这样:
ffmpeg -i input.mp4 \
-c:v libx264 \
-preset medium \
-b:v 5000k \
-maxrate 5000k \
-bufsize 10000k \
-r 30 \
-s 1920x1080 \
-x264-params "keyint=60:min-keyint=60:no-scenecut=1" \
output.mp4
这里 -b:v 5000k 就是目标码率,-preset medium 是编码速度和压缩效率的平衡点。preset 越慢(比如 veryslow),压缩效率越高,同样的码率画质更好,但编码时间更长。
我的习惯:做离线转码时用 slow 或 veryslow,反正不赶时间。做直播时用 veryfast 或 faster,延迟低。别在直播里用 veryslow,那延迟能让你怀疑人生。
总结一下
这一章我们聊了:
- 视频编码的本质——去掉冗余,压缩体积
- 有损 vs 无损——各有各的用武之地
- 码率、帧率、分辨率——铁三角,牵一发而动全身
- 编码器的基本流程——I/P/B帧、运动估计、量化、熵编码
这些概念是后面所有调优操作的基础。你把这些搞明白了,后面讲 CRF、VBV、GOP 结构、心理视觉优化的时候,才能跟得上。