1. Codec 基础概念:编解码器到底是什么?

做音视频开发这些年,我经常被问到同一个问题:「编解码器不就是个压缩软件吗?」
嗯,这么说也对,但不够准确。今天咱们就把这个基础打扎实。

1.1 什么是编解码器?

编解码器,英文叫 Codec,是 Coder(编码器)和 Decoder(解码器)的合成词。
说白了,它是一套算法,负责两件事:

  • 编码:把原始音视频数据压缩成更小的文件或流
  • 解码:把压缩后的数据还原成可播放的音视频

我刚开始接触这个领域时,以为编解码器就是某个具体的软件。后来踩了坑才明白——编解码器是算法规范,而实现它的软件叫编码器/解码器。比如 H.264 是规范,x264 是编码器,FFmpeg 里的 libavcodec 是解码器。

核心记忆点: 编解码器 = 压缩/解压缩算法;编码器/解码器 = 算法的具体实现。

1.2 有损压缩 vs 无损压缩

这是选型时第一个要做的决定。我见过不少项目,因为没搞清楚这个区别,后期推倒重来。

对比维度 有损压缩 无损压缩
原理 丢弃人眼/人耳不敏感的信息 保留全部原始数据
压缩比 高(10:1 ~ 50:1 甚至更高) 低(2:1 ~ 3:1)
还原质量 有损,但感知上可能接近无损 完全还原
典型 Codec H.264、H.265、AAC、MP3 FLAC、ALAC、FFV1
适用场景 流媒体、短视频、视频通话 归档、专业剪辑、医疗影像

我曾经 在一个医疗影像项目中,团队默认用了 H.264 做压缩。结果审核时发现,压缩后的图像丢失了微小的纹理细节——那可是诊断依据。最后全部换成无损压缩,工期延误了两周。记住:有损压缩不可逆,选型前先确认业务对「失真」的容忍度。

1.3 压缩比与码率

这两个概念经常被混用,但它们是不同的东西。

压缩比 = 原始数据大小 / 压缩后数据大小。
比如一段 100MB 的原始视频,压缩后变成 5MB,压缩比就是 20:1。

码率(Bitrate) = 单位时间内传输的数据量,单位是 bps(bit per second)。
码率越高,画质越好,文件也越大。

你想想看,压缩比是个「静态」的比值,而码率是个「动态」的速率。我习惯用这个公式来估算:

文件大小 (MB) = 码率 (Mbps) × 时长 (秒) / 8

举个例子:一段 2 小时的电影,码率 10 Mbps:
文件大小 = 10 × 7200 / 8 = 9000 MB ≈ 8.8 GB

我个人习惯 在项目初期先确定目标码率,再反推压缩比。因为码率直接决定了带宽和存储成本,而压缩比只是个参考值。

1.4 常见 Codec 家族概览

市面上 Codec 很多,但真正常用的就那么几个。我按应用场景给你梳理一下:

视频 Codec

  • H.264 (AVC):2003 年发布,至今仍是兼容性最好的 Codec。几乎所有设备都支持。我做的第一个直播项目用的就是它。
  • H.265 (HEVC):H.264 的继任者,同等画质下码率降低 50% 左右。但专利授权复杂,部分浏览器不支持。
  • AV1:开源、免专利费,压缩率比 H.265 还高 20-30%。但编码速度慢,适合点播场景。
  • VP9:Google 主导,YouTube 在用。压缩率介于 H.264 和 H.265 之间。

音频 Codec

  • AAC:MP4 的标准音频 Codec,音质好,兼容性广。我一般用它做直播音频。
  • MP3:老牌 Codec,兼容性无敌,但效率不如 AAC。
  • Opus:开源、低延迟、动态码率范围广。视频通话场景的首选。
  • FLAC:无损压缩,适合音乐归档。

为了让你更直观地理解这些 Codec 的关系,我画了一张图:

常见 Codec 家族关系图 编解码器 (Codec) 视频 Codec 音频 Codec H.264 (AVC) H.265 (HEVC) AV1 AAC Opus FLAC 选型建议 • 直播/视频通话:H.264 + Opus(兼容性好、低延迟) • 点播/短视频:H.265 或 AV1 + AAC(压缩率高、画质好) • 专业归档:FFV1 + FLAC(无损、可逆)

1.5 选型前的灵魂三问

每次开始一个新项目,我都会问自己三个问题:

  1. 目标设备是什么? 如果是手机、浏览器,H.264 最稳妥;如果是智能电视、机顶盒,可以考虑 H.265。
  2. 延迟要求多高? 视频通话需要毫秒级延迟,选 H.264 + Opus;点播可以接受几秒缓冲,用 AV1 省带宽。
  3. 版权成本能接受吗? H.265 专利费复杂,AV1 和 VP9 免费。商业项目一定要提前算这笔账。

我建议 新手先从 H.264 + AAC 入手。这对组合兼容性最好,踩坑最少。等把基础流程跑通了,再尝试其他 Codec。

好了,这一章的基础概念就聊到这儿。记住:编解码器不是黑魔法,它只是一套聪明的算法——用「丢弃不重要的信息」来换取「更小的体积」。后面的章节,我们会深入每个 Codec 的内部原理和调优技巧。