为什么 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 步:按照有效的顺序缩小大小
如果文件仍然太大,请按顺序应用这些。每个保存字节的质量成本都低于其后一个。
- 减小尺寸。 宽度减半为像素数的四分之一。 480 像素宽的 GIF 适合大多数嵌入上下文; 800+ 很少有必要。
- 丢帧。 从 15 fps 变为 10 fps 会删除大多数观看者不会注意到的更改的三分之一的数据。
- 缩短剪辑。 无情。几乎每个 GIF 在开始或结束时都有一秒不执行任何操作。
- 将调色板减小到 256 以下。 128 甚至 64 色通常在屏幕内容上不可见,而且尺寸较小。
- 关闭抖动 如果您打开了它并且内容可以接受它。
注意“更难压缩”不在列表中。 GIF 的压缩是无损 LZW — 没有质量刻度盘。您所能做的就是决定首先要包含哪些数据。
当你根本不应该制作 GIF 时
值得明确说明,因为它节省了大量精力:
- 任何超过大约五秒的内容。 MP4 或 WebM 将是尺寸的一小部分,但质量更好。大多数接受“GIF”的平台现在都会在内部将其转换为视频。
- 具有大量渐变的摄影内容。 256 种颜色根本不够,而且没有调色板欺骗修复了它。
- 任何需要音频的内容。 GIF 没有任何接缝,如果源有节拍,则循环会感觉不对劲。
- 任何宽度超过 800 像素的内容。 到那时,尺寸惩罚已经足够严重,视频就是正确的答案。
GIF 在一种情况下占据一席之地:一个简短、无声、自动播放的循环,必须在没有玩家的情况下在任何地方工作。为此,它仍然保持不败——只要进入的帧是经过精心选择的。
一个有效示例
假设您想要某个 GIF 60 fps 屏幕录制的三秒 UI 交互,大小低于 1 MB。
- 修剪 包含交互的 3.2 秒,最后一帧接近第一帧。
- 提取 在 N = 5 的 FPS 模式下 — 每 5 个 60 fps 的帧提供 12 fps,大约 38 帧。 PNG 输出。
- 组装 在延迟 8 时,抖动关闭(它是具有平面颜色的屏幕内容)。
- 缩放 如果源较大,宽度为 600 像素。
- 检查结果。 大约 38 帧的平面 UI 内容通常远低于 1 MB。如果没有,请将调色板降至 128 色,然后再进行其他操作。
整个过程需要几分钟,每一步都是您做出的决定,而不是您继承的默认设置。