1. 课程导入
各位好,我是老周。在流媒体这行摸爬滚打了十几年,今天咱们聊聊转码这件事。
很多人觉得转码不就是把视频从一种格式变成另一种吗?嗯,这么说也没错,但太表面了。我见过不少团队,转码配置随便写写,结果上线后要么卡顿、要么画质惨不忍睹。说白了,转码是整个视频服务的基石,这块要是没打好,后面再怎么优化都是白搭。
1.1 什么是转码
转码,全称是「视频转码」。它指的是将一段视频从一种编码格式、分辨率、码率或封装格式,转换成另一种的过程。
举个例子:你手机拍了一段 4K 60fps 的 H.265 视频,文件大得吓人。但用户可能用着 3G 网络、拿着 720p 的旧手机。这时候,你就得把它转成 H.264、1080p、低码率的版本——这就是转码。
转码的核心三要素:
- 编码格式转换:H.265 → H.264、AV1 → H.264
- 分辨率/帧率调整:4K → 1080p、60fps → 30fps
- 码率/质量调整:50Mbps → 2Mbps、CBR → VBR
我个人习惯把转码拆成两个动作:解码和编码。先解出原始像素,再用目标参数重新压缩。听起来简单,但坑特别多。我在项目中遇到过解码器不支持 10bit 色深的情况,结果画面直接偏色,排查了整整两天。
1.2 为什么需要转码
你可能会问:原始文件直接推给用户不行吗?
不行。原因有这么几个:
| 原因 | 说明 |
|---|---|
| 兼容性 | 不同设备支持的编码格式不同。老电视只认 H.264,新手机支持 AV1,你得都照顾到。 |
| 带宽适配 | 用户网络千差万别。4G 用户看 4K 会卡死,2Mbps 的码率才是他的极限。 |
| 存储成本 | 原始素材动辄几百 GB,转码后可以压缩到十分之一甚至更小。 |
| 播放体验 | HLS/DASH 需要切片,切片前必须转码成统一的封装格式。 |
避坑指南:我曾经见过一个团队,为了省事只转了一个 1080p 版本。结果用户用 2G 网络播放,缓冲了 30 秒还没开始。后来他们加了 480p 和 360p 的档位,缓冲率直接降了 70%。记住:没有万能的码率,只有适配的码率。
1.3 转码在视频工作流中的位置
视频从拍摄到播放,要经过一条完整的流水线。转码正好卡在中间,承上启下。
下面这张图是我自己画的,能帮你快速理解整个链路:
从图上你能看到,转码不是孤立存在的。它前面连着采集和预处理,后面接着封装和分发。我习惯把转码叫做「视频流水线的发动机」——它决定了视频最终长什么样、能不能被顺利播放。
1.4 转码 vs 转封装 vs 转分辨率
这三个概念经常被混用,我简单区分一下:
| 术语 | 做了什么 | 典型场景 |
|---|---|---|
| 转码 | 改变编码格式(如 H.265 → H.264) | 兼容老旧设备 |
| 转封装 | 改变容器格式(如 MKV → MP4),不重新编码 | 快速调整封装,几乎无损耗 |
| 转分辨率 | 改变画面尺寸(如 4K → 1080p) | 适配不同屏幕大小 |
我的经验:转封装很快,几秒钟就能搞定。但转码是 CPU/GPU 密集型的,一个 4K 视频转成 H.264 可能要跑几十分钟。所以,能用转封装解决的问题,就别上转码。我在项目中就见过有人把 MP4 转成 MOV 还重新编码了一遍,白白浪费了算力。
1.5 转码的两种模式
实际工作中,转码分两种玩法:
- 离线转码:视频上传后,后台慢慢转。适合点播(VOD),比如优酷、B站。用户上传后等几分钟才能看,但画质有保障。
- 实时转码:直播场景下,边推流边转码。延迟要求高,通常用硬件编码器或者 GPU 加速。我做过一个体育直播项目,要求端到端延迟低于 3 秒,实时转码的压力非常大。
你想想看,离线转码你可以用 x265 慢慢压,追求极致压缩率。但实时转码就得用 NVENC 或者 QuickSync,速度优先,质量可以适当妥协。这就是工程上的取舍。
1.6 小结
转码不是简单的格式转换,它是视频服务的核心环节。搞懂了转码,你才能理解为什么同一个视频在不同设备上画质不一样、为什么有的视频加载快有的加载慢。
嗯,这一章就到这里。记住一句话:转码的本质,是在画质、码率、兼容性之间找平衡。后面我们会深入每个环节,看看怎么把这个平衡做到极致。