为什么 GIF 在提取阶段出错

大多数不良 GIF 在打开任何 GIF 软件之前就已确定。有人提取了 5 秒剪辑的每一帧,获取 150 张图像,将它们组合起来,最终得到一个聊天应用程序拒绝嵌入的 14 MB 文件。本能地会更加用力地压缩,这会使其变得浑浊,但不会使其变得更小。

实际问题在上游。 GIF 不是视频编解码器——它没有运动补偿,没有名副其实的帧间预测,并且每帧有 256 种颜色的硬上限。每一帧都接近于一个独立的图像。这个事实决定了下面的每一个决定。

因此要考虑的顺序是:首先决定帧数,其次是调色板,然后才担心压缩。

第 1 步:选择采样间隔

问题不是“源有多少帧”,而是“运动实际需要多少帧”。一些粗略的起点:

  • 10–12 fps ——主力设置。对于手势、UI 演示和大多数反应剪辑来说足够流畅。在 30 fps 源上,即每 3 帧; 60 fps,每 5 次一次。
  • 15 fps — 用于连续运动,其中 12 开始频闪,如相机平移或弹跳物体。
  • 5–8 fps — 用于类似幻灯片的内容:建立图表、之前/之后、缓慢缩放。通常看起来是故意的而不是廉价的。
  • 24+ fps ——很少值得。相对于 12 fps,文件大小大约翻倍,大多数观看者无法在小循环图像中分辨出来。

帧提取器,使用“帧速率 (FPS)”模式并输入除数:每三帧为 3,每五帧为 5。帧计数会在您键入时更新,该数字实际上可以预测您的文件大小。

提取前进行完整性检查: 将您的预期帧数乘以大约 30-60 KB。这是调色板缩减后 480 像素宽的 GIF 帧的真实情况。 60 帧的大小约为 2-3 MB。如果这超出了您的预算,请立即剪切帧 - 这比稍后压缩要有效得多。

第2步:保持简短的持续时间

GIF 没有长格式用例。两到四秒几乎涵盖了循环的所有内容,循环点比长度更重要:在开始位置附近结束的剪辑看起来是连续的,而在运动中剪切的剪辑会在每次重复时将注意力吸引到接缝处。

在提取之前使用时间范围滑块进行修剪,而不是在之后删除帧。拖动时时间戳可见,因此您可以将出点放置在与入点相同的姿势上。

第3步:了解256种颜色的限制

这是令人惊讶的约束,值得理解而不是争论。

每个 GIF 帧都索引到最多 256 种颜色的调色板中。您的源视频有数百万。必须采取某些措施消除差异,而差异决定了结果的外观。

两种策略,正确的完全取决于内容:

  • 抖动 分散相邻调色板颜色的像素以伪造丢失的颜色。渐变——天空、柔和的灯光、脸上的阴影——有了它,效果会更好。代价是可见的斑点图案和明显更大的文件,因为噪声破坏了压缩。
  • 没有抖动 提供平坦、干净的颜色区域和更小的文件。非常适合屏幕录制、UI 演示、线条艺术以及具有较大均匀区域的任何内容。在照相渐变上,它会产生硬条带。

实用规则:屏幕内容,无抖动。摄像机镜头,抖动。如果您不确定,请将两者导出并以实际大小查看 - 差异很明显,并且需要一分钟。

这也是为什么提取到 PNG 这是正确的选择,即使最终的 GIF 有 256 种颜色。源中的每个 JPEG 制品都会成为调色板必须花费一个条目的颜色。将干净、无损的帧输入调色板步骤可为量化器提供更好的起点。

第 4 步:将帧延迟与您提取的间隔相匹配

GIF 不存储帧速率。它们存储每帧的延迟(以百分之一秒为单位),这就是许多 GIF 最终以错误的速度播放的原因。

算术很简单:延迟 = 100 ÷ 您的目标 fps。

  • 12 fps → 延迟 8 (0.08s)
  • 10 fps → 延迟 10 (0.10s)
  • 15 fps → 延迟 7(四舍五入到 6.67)
  • 5 fps → 延迟 20 (0.20s)

有两件事需要知道。首先,舍入是真实的:15 fps 无法准确表达,因此循环略有漂移。对于任何时间重要的事情,最好选择 10、12.5、20 或 25 fps,这些分辨率划分得很清楚。其次,大多数浏览器默默地将延迟限制在 2(0.02 秒)以下到 10 以内 - 因此,以 50 fps 创作的 GIF 对于大多数观看者来说将以 10 fps 的速度播放,文件大小是文件大小的五倍,而且没有任何流畅度。

第 5 步:按照有效的顺序缩小大小

如果文件仍然太大,请按顺序应用这些。每个保存字节的质量成本都低于其后一个。

  1. 减小尺寸。 宽度减半为像素数的四分之一。 480 像素宽的 GIF 适合大多数嵌入上下文; 800+ 很少有必要。
  2. 丢帧。 从 15 fps 变为 10 fps 会删除大多数观看者不会注意到的更改的三分之一的数据。
  3. 缩短剪辑。 无情。几乎每个 GIF 在开始或结束时都有一秒不执行任何操作。
  4. 将调色板减小到 256 以下。 128 甚至 64 色通常在屏幕内容上不可见,而且尺寸较小。
  5. 关闭抖动 如果您打开了它并且内容可以接受它。

注意“更难压缩”不在列表中。 GIF 的压缩是无损 LZW — 没有质量刻度盘。您所能做的就是决定首先要包含哪些数据。

当你根本不应该制作 GIF 时

值得明确说明,因为它节省了大量精力:

  • 任何超过大约五秒的内容。 MP4 或 WebM 将是尺寸的一小部分,但质量更好。大多数接受“GIF”的平台现在都会在内部将其转换为视频。
  • 具有大量渐变的摄影内容。 256 种颜色根本不够,而且没有调色板欺骗修复了它。
  • 任何需要音频的内容。 GIF 没有任何接缝,如果源有节拍,则循环会感觉不对劲。
  • 任何宽度超过 800 像素的内容。 到那时,尺寸惩罚已经足够严重,视频就是正确的答案。

GIF 在一种情况下占据一席之地:一个简短、无声、自动播放的循环,必须在没有玩家的情况下在任何地方工作。为此,它仍然保持不败——只要进入的帧是经过精心选择的。

一个有效示例

假设您想要某个 GIF 60 fps 屏幕录制的三秒 UI 交互,大小低于 1 MB。

  1. 修剪 包含交互的 3.2 秒,最后一帧接近第一帧。
  2. 提取 在 N = 5 的 FPS 模式下 — 每 5 个 60 fps 的帧提供 12 fps,大约 38 帧。 PNG 输出。
  3. 组装 在延迟 8 时,抖动关闭(它是具有平面颜色的屏幕内容)。
  4. 缩放 如果源较大,宽度为 600 像素。
  5. 检查结果。 大约 38 帧的平面 UI 内容通常远低于 1 MB。如果没有,请将调色板降至 128 色,然后再进行其他操作。

整个过程需要几分钟,每一步都是您做出的决定,而不是您继承的默认设置。