为什么打字 GIF 通常比它该有的体积大
多数打字 GIF 生成器按固定帧率出帧,常见是每秒 10 或 20 帧,然后每隔几帧冒一个字。以 20fps、每三帧一个字为例:每三帧里有两帧和前一帧一模一样。动画看着没问题,文件却大了差不多三倍。
按"一字一帧"编码就彻底没有这个问题。40 个字就是 40 帧,每帧的延时就是你设定的打字速度。真正的上限来自格式本身:一帧不能短于 20 毫秒,所以每秒 50 个字已经是任何 GIF 能达到的极限。
把一句话做成逐字打出来的 GIF——README、产品演示和个人主页上常见的那种终端打字效果。不用传任何文件:输入文字,选好速度,导出。
不需要素材。点开就是一个准备好的打字片段。
整张图都由你输入的文字生成,文件里没有任何原始素材。
打开工作台,输入想逐字打出来的文字。回车换行;太长的行会自动按画布宽度折行。
设置每个字多少毫秒、整句打完停留多久再循环,以及光标是竖线、方块、下划线还是不显示。
选字体、字号、颜色和背景,然后导出。深色背景配等宽字体,就是最经典的终端效果。
GIF 没有帧率这回事,每一帧自带一个延时值——所以"一个字符"和"它的时长"本来就是同一件事。这意味着文件里不会有重复帧充数,打字速度也是精确设定的,而不是拿帧率去凑。
最后一个字打完的那段停顿,是一帧加一个很长的延时,而不是一秒钟的重复帧。停 4 秒和停 1 秒,导出的体积是一样的。
换行位置是按整句话算好的,字符再逐个出现在这个固定版式里。边打边折行的话,每到换行点整行都会横向跳一下。
常亮光标不额外花钱——它搭在本来就存在的帧上。闪烁光标则是闪一次一帧,编辑器会在导出前告诉你要多花几帧。
多数打字 GIF 生成器按固定帧率出帧,常见是每秒 10 或 20 帧,然后每隔几帧冒一个字。以 20fps、每三帧一个字为例:每三帧里有两帧和前一帧一模一样。动画看着没问题,文件却大了差不多三倍。
按"一字一帧"编码就彻底没有这个问题。40 个字就是 40 帧,每帧的延时就是你设定的打字速度。真正的上限来自格式本身:一帧不能短于 20 毫秒,所以每秒 50 个字已经是任何 GIF 能达到的极限。
每字 60 到 100 毫秒——大约每秒 10 到 16 个字——读起来最像真人在敲键盘。快过 40 毫秒就不像打字了,更像整段粘贴进去;慢过 150 毫秒又显得拖沓,长句子还没打完人就划走了。
停留时长和速度一样重要。GIF 是立刻循环的,不留停顿的话,完整的句子只会闪现一瞬就跳回第一个字。留 1 到 2 秒,通常刚够把这句话读完。
文字是 GIF 压缩最不擅长的情况:全是高对比度的锐利边缘,而这恰恰是行程编码压不动的东西。三件事有用,按效果排序:把画布收紧到文字周围,别导出一大片空白;把颜色数降下来——纯色文字配纯色背景其实用不了几种颜色,16 色往往和 256 色看不出区别;关掉投影,它会引入一堆极为接近的过渡色,占满调色板,而在这个尺寸下几乎看不出效果。
同一个工作台,对着另一件事使。