没人讲清楚的 ffmpeg 流水线
来源:dev.to — 2026-09-14
📋 概述
几乎每个开发者都从 2014 年的 Stack Overflow 回答里复制过 ffmpeg -i input.mov -vcodec h264 -acodec mp2 output.mp4,然后就此走开,从没问过 -vcodec 到底做了什么,也不知道为什么有些转换瞬间完成、有些却让 CPU 烧上十分钟。文章给出的解释是:ffmpeg 不是一次操作,而是一条七段流水线——输入、解复用、解码、滤镜、编码、复用、输出,每一个参数只是调节其中某一段。ffmpeg 由 Fabrice Bellard 在 2000 年创造,名字是 fast forward 与 MPEG 的拼合,它不只是命令行玩具,而是 Chrome、Blender、YouTube、Vimeo 背后的编解码引擎。看清流水线后,-c copy 这类参数的意义就自然浮现:它直接跳过解码与编码这两个唯一昂贵的阶段。
🔑 核心要点
- ffmpeg 的本质是七段流水线:输入 → 解复用 → 解码 → 滤镜 → 编码 → 复用 → 输出,每个参数只调节其中一段。
- 所谓「一个视频文件」在解复用后其实是多条轨道:视频、音频,可能还有字幕,只是被交错打包在一个容器里。
- 解码与编码是整条链路中仅有的昂贵阶段,解复用与复用只是搬字节的记账工作。
- -c copy 因此能几乎瞬时完成转封装,因为它把解码和编码整个跳过。
- 滤镜阶段是唯一真正接触像素或音频采样的环节,亮度、对比度、缩放、加字幕都发生在这里,跳过它不会改变任何东西。
- ffprobe 之所以瞬间返回,是因为它只跑前两段流水线并打印发现,不做编码。
💡 金句
ffmpeg 是每个人都在用、却几乎没人真正理解的那个命令行工具。
👍 0
👎 0
← 返回 dev.to 首页