2. 转码基础概念
各位好,我是老张。今天咱们聊聊编码格式选型这个事儿。
说实话,我在流媒体这行干了快十年,见过太多因为选错编码格式导致翻车的项目。有的是码率控制不好,有的是兼容性出问题,还有的是专利费没算清楚。嗯,今天我就把这几大主流编码格式——H.264、H.265/HEVC、AV1、VP9——掰开揉碎了讲清楚。
为什么编码格式这么重要?
说白了,编码格式决定了三件事:画质、带宽、兼容性。你想想看,同样的视频源,用不同编码器压出来,文件大小能差好几倍。我见过一个直播平台,从 H.264 切到 H.265 后,带宽成本直接降了 40%。但代价是什么?老设备不支持,用户投诉一堆。
所以选编码格式,本质上是在做平衡。没有银弹,只有 trade-off。
核心观点:编码格式选型 = 压缩效率 × 解码兼容性 ÷ 专利成本。三者缺一不可。
四大编码格式速览
先给个全景图,我习惯用一张表来对比它们的核心参数:
| 特性 | H.264 (AVC) | H.265 (HEVC) | VP9 | AV1 |
|---|---|---|---|---|
| 发布年份 | 2003 | 2013 | 2013 | 2018 |
| 压缩效率 | 基准 | 比 H.264 省 30-50% | 接近 H.265 | 比 H.265 再省 20-30% |
| 专利许可 | 成熟,有专利池 | 复杂,费用高 | 免费(Google) | 免费(开放媒体联盟) |
| 硬件解码支持 | 几乎所有设备 | 较新设备(2015+) | Chrome/Android 生态 | 最新设备(2020+) |
| 编码复杂度 | 低 | 中 | 中高 | 极高(慢 10-100 倍) |
这张表我建议你存下来。每次做选型决策时,对着它过一遍,基本不会出大错。
H.264:老当益壮的守门员
H.264 发布于 2003 年,到现在 20 多年了。你可能会问:这么老的东西还有用吗?
我的回答是:只要你的用户还有一台 2010 年的手机,H.264 就是必须的。
我在做视频监控项目时遇到过这种情况:客户要求所有摄像头都支持 H.265,结果现场有一半的 NVR(网络录像机)是 2014 年的老设备,根本不支持 H.265 硬解。最后只能降级到 H.264,虽然码率高了点,但至少能跑起来。
我的建议:H.264 作为保底格式。所有转码流程中,至少保留一路 H.264 输出,码率控制在 2-4 Mbps(1080p),保证最广泛的兼容性。
H.265/HEVC:压缩效率的标杆,但专利是个坑
H.265 的压缩效率确实好。同样的画质,码率能比 H.264 低一半。但问题出在专利上。
我记得 2018 年帮一家视频平台做转码方案,他们想全面切 H.265。结果一算专利费,每年要多付几十万美元。而且专利池有好几个,HEVC Advance、MPEG LA,每个都要交钱。最后他们放弃了,转投 VP9。
为什么会这样?因为 H.265 的专利持有者太多,而且收费模式不透明。你永远不知道明天会不会又冒出一个专利池来收钱。
避坑指南:如果你做的是商业产品,尤其是面向欧美市场,H.265 的专利风险必须提前评估。我曾经见过一个创业公司,产品上线后被专利流氓盯上,赔了一大笔钱。
VP9:Google 的免费午餐
VP9 是 Google 推出的,完全免费。它的压缩效率跟 H.265 差不多,但因为没有专利费,在 Web 生态里特别受欢迎。
YouTube 从 2013 年就开始用 VP9 了。如果你做的是 Web 端视频播放,VP9 是个很好的选择。但要注意,VP9 的编码速度比 H.265 慢不少,而且硬件解码支持主要在 Chrome 和 Android 设备上。
我个人的习惯是:VP9 用于 Web 端主码流,H.264 用于降级兼容。这样既保证了大部分用户的体验,又不会丢老用户。
AV1:未来的王者,但今天还太慢
AV1 是开放媒体联盟(AOM)推出的,目标是替代 VP9 和 H.265。它的压缩效率比 H.265 再高 20-30%,而且完全免费。
但代价是什么?编码速度慢得离谱。我做过测试,同样的视频,用 x265 压需要 1 小时,用 AV1 的参考编码器(libaom)需要 10 小时以上。虽然现在有 SVT-AV1 这种优化实现,但速度还是比 H.265 慢 5-10 倍。
所以我的建议是:AV1 适合点播场景,不适合直播。你可以提前把热门内容转成 AV1,存到 CDN 上,给支持 AV1 的设备推送。但实时转码?目前还不太现实。
编码格式选型决策树
说了这么多,到底怎么选?我画了一张决策图,帮你理清思路:
实际项目中的选型策略
说了这么多理论,咱们聊聊实战。我总结了一套「三路输出」策略,适用于大多数场景:
- 主码流(高画质):用 H.265 或 VP9,码率 3-5 Mbps(1080p),给新设备用。
- 次码流(中等画质):用 H.264,码率 1.5-2.5 Mbps(1080p),给老设备用。
- 低码流(移动端):用 H.264,码率 500-800 Kbps(480p),给弱网环境用。
这套策略我在多个项目里验证过,效果不错。既保证了画质,又覆盖了老设备,还控制了带宽成本。
一个小技巧:如果你用 FFmpeg 做转码,可以这样配置多路输出:
# 三路输出示例
ffmpeg -i input.mp4 \
-c:v libx265 -b:v 3M -preset medium -x265-params "crf=23" output_hevc.mp4 \
-c:v libx264 -b:v 2M -preset medium -profile:v high output_h264.mp4 \
-c:v libx264 -b:v 800K -preset fast -profile:v baseline output_low.mp4
避坑指南:我踩过的几个坑
- 坑一:H.265 的 B 帧问题。 有些老设备解码 H.265 的 B 帧会花屏。我建议在编码时限制 B 帧数量,或者直接用
-x265-params "bframes=3"控制。 - 坑二:VP9 的编码速度。 如果你用 VP9 做直播,编码延迟会很高。我试过用 libvpx-vp9 做实时编码,延迟超过 5 秒,根本没法用。所以 VP9 只适合点播。
- 坑三:AV1 的兼容性。 虽然 AV1 免费,但很多电视盒子、智能音箱根本不支持。我建议在 AV1 之外,至少保留一路 H.264 或 H.265。
总结
编码格式选型没有标准答案,但有一条铁律:永远不要只选一种格式。多路输出、按设备推送,才是最优解。
我个人习惯是:H.264 打底,H.265 或 VP9 主推,AV1 做储备。这样既不会丢用户,又能逐步降低成本。