🎬 第五章 视频基础
📄 一句话概括

转封装、转分辨率、转码开销差了整整两个数量级——动手前先问一句:这次要换的是【盒子】还是【内容】?

📝 本节和前面几节的关系

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. 拿一段 1 分钟的视频,分别用 -c copy 与重编码各转一次。
  2. 记下两次的耗时,感受一下这个差距。

常见误区

  1. 转容器也重编码。白花几十倍时间,还掉画质。
  2. 直接对完整文件调参数。先拿片段试。
自测三问(点开对答案) 1. 转封装与转码的本质区别是什么? —— 转封装只换壳不重编码,转码要逐帧解码再重压。 2. 为什么转码前要先在片段上调参数? —— 转码线性耗时,调错一次就要等一整遍。 3. `-preset` 参数调的是什么? —— 速度与压缩率的取舍——预设越快,压缩率越低。

相关笔记