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)。别为了省那点空间把素材毁了,我见过太多人后悔了。

码率、帧率、分辨率——铁三角

这三个参数是编码调优的基石。它们之间的关系,我画了张图:

码率 · 帧率 · 分辨率 关系图 码率 (Bitrate) 帧率 (FPS) 分辨率 画质与文件大小 码率 = 每帧数据量 × 帧率 × 分辨率系数 固定码率下,分辨率或帧率升高 → 每帧质量下降

这张图你看懂了吗?码率是总预算,帧率和分辨率是开销项。预算固定,开销越大,每帧能分到的"钱"就越少,画质自然就差了。

三个参数怎么搭配?

我给你们一个实战参考表。这是我多年调参总结出来的经验值:

场景 分辨率 帧率 建议码率 备注
短视频(抖音/快手) 1080p 30 2-4 Mbps 手机观看,码率可以低一些
直播(游戏) 1080p 60 6-10 Mbps 高帧率需要更多码率
电影/剧集 4K 24 15-40 Mbps 低帧率,高分辨率,码率要足
监控摄像头 720p 15 0.5-1 Mbps 低帧率省码率,够用就行

避坑指南:我曾经帮一个客户调直播参数,他非要用 4K 60fps 配 2Mbps 码率。结果画面全是马赛克,观众全跑了。记住:码率不够,分辨率再高也是白搭。这叫"码率饥饿",是新手最容易犯的错误。

编码器是怎么工作的?

简单说几个关键步骤,让你心里有个底:

  1. 帧类型划分——I帧(关键帧)、P帧(预测帧)、B帧(双向预测帧)。I帧是完整的画面,P帧和B帧只记录变化的部分。
  2. 运动估计——找相邻帧之间哪些块移动了,往哪个方向移。
  3. 变换量化——把像素数据转到频域,然后丢掉人眼不敏感的高频细节。这一步是"有损"的核心。
  4. 熵编码——用更短的码字表示出现频率高的数据,类似 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 结构、心理视觉优化的时候,才能跟得上。