📄 一句话概括
转封装、转分辨率、转码开销差了整整两个数量级——动手前先问一句:这次要换的是【盒子】还是【内容】?
📝 本节和前面几节的关系
5.4 讲了怎么播,5.5 讲怎么改——这是日常工作中最常做的一件事。
一、四类常见操作
转封装(换容器):只整理壳,不重编码。 转分辨率:要先解码再缩放再编码,很耗算力。 转码(换编码):逐帧解了重压,最耗算力。 加滤镜(缩放、叠加字幕、裁剪):比转码还要多一步处理。
二、耗时差多少
以【转封装】为 1 倍作基准:转分辨率约 30 倍,转码约 50 倍,加滤镜约 60 倍。 这个差距的意义是:一次判断失误,就是几十分钟的机时。 所以专业流程里,能转封装解决的绝不重编码。
三、转码时的三个常见参数
码率(-b:v):直接决定体积与画质。
分辨率(-s 或 -vf scale):决定画面大小。
预设(-preset):速度与压缩率的取舍——预设越快,压缩率越低。
第三个常被忽略,但它是在不改画质前提下调耗时的主要手段。
四、一条实践纪律
先在 30 秒的片段上调好参数,再跑完整文件。
因为转码是线性耗时,2 小时的片子调错一次参数,代价就是一次完整的等待。
这条纪律和 3.5.2 讲的 -c copy 是同一个思路:先判断能不能少做,再判断怎么做。
五、动手 Demo:转码、转封装、转分辨率,开销差得多
同样叫【转一下】,做的是什么,代价差好几个量级。
rows = [("转封装(换容器)", "不用", "1 倍"),
("转分辨率", "要", "约 30 倍"),
("转码(换编码)", "要", "约 50 倍"),
("加滤镜(缩放叠加)", "要", "约 60 倍")]
for a, b, c in rows:
print("%-18s %-8s %s" % (a, b, c))
实跑输出:
--------------------------------------------------------------------
转码、转封装、转分辨率,开销差得多
--------------------------------------------------------------------
同样叫【转一下】,做的是什么,代价差好几个量级。
操作 要重编码吗 相对耗时
-----------------------------------------------
转封装(换容器) 不用 1 倍
转分辨率 要 约 30 倍
转码(换编码) 要 约 50 倍
加滤镜(缩放叠加) 要 约 60 倍
第一行与后面几行**差了整整两个数量级**。
所以动手前先问一句:**这次要换的是【盒子】还是【内容】?**
第一行与后面几行差了整整两个数量级。 所以动手前先问一句:这次要换的是【盒子】还是【内容】?
30 秒实验
- 拿一段 1 分钟的视频,分别用
-c copy与重编码各转一次。 - 记下两次的耗时,感受一下这个差距。
常见误区
- 转容器也重编码。白花几十倍时间,还掉画质。
- 直接对完整文件调参数。先拿片段试。
自测三问(点开对答案)
1. 转封装与转码的本质区别是什么? —— 转封装只换壳不重编码,转码要逐帧解码再重压。 2. 为什么转码前要先在片段上调参数? —— 转码线性耗时,调错一次就要等一整遍。 3. `-preset` 参数调的是什么? —— 速度与压缩率的取舍——预设越快,压缩率越低。- ☐ 下一节(5.5.2 非线性编辑)
相关笔记
- 数据封装和解封装 — 为什么换容器那么快
- FFmpeg命令行 —
-c copy的用法 - 非线性编辑 — 从转码到剪辑
- 🎬 FFmpeg入门详解 · 索引