先说结论
打开视频转 GIF,把片子丢进去,标出你要的那几秒,宽度保持 480,帧率保持每秒 12 帧。多数 GIF 要的就是这一档。出来的文件要是太大,别的先别动,先把宽度降下来,那是唯一一个能省两遍的设置。
这一页剩下的部分解释为什么,因为“我的 GIF 有 14 MB”才是所有人真正遇到的问题,而该拧哪个旋钮,并不显然。
视频做成 GIF 为什么这么大
视频编码存的是运动。它每隔一两秒写一张完整画面,中间的每一帧则只写这张画面是怎么动的:这块像素往左挪了四格、这片区域暗了一点。一段五秒的片子可以只有几百 KB,因为里面大半是关于一张你手上已经有的画面的指令。
GIF 一样都没有。它 1989 年就定稿了,那时候这些东西一个都还不存在。每一帧都是一张画面,各自单独压缩,用的还是一套为电子表格截图设计的方案。这个格式里没有任何运动估计,也没法给它补上。
所以该有的心理预期是视频体积的十倍,哪个转换器都劝不动这一点。好的转换器能做的,是不在这十倍之上再浪费什么,并且把真正决定大小的那三个设置交到你手上。
三个设置,各自的代价
一张 GIF 的大小归根到底就是它一共装了多少像素,也就是时长乘帧率乘单帧面积。
- 段落长度,线性。长一倍就是帧数多一倍,文件大约也大一倍。这一条多数人本来就懂,而且值得狠一点:一个三秒就把话说完的 GIF,既更小,也更好。
- 宽度,平方级。宽度砍一半,高度跟着砍一半,于是像素只剩四分之一。从 640 降到 320,省下的不是差不多一半,而是大约四分之三。这个设置没人第一个想到,回报却最高。
- 帧率,线性。每秒十帧是十五帧的三分之二大。它也是损失最显眼的那个设置,因为动得太慢会被读成“坏了”,而不是“小”。
举个实际的例子。一段六秒的手机片子,按它自己的 1080×1920、30 fps 来,就是 180 帧、每帧两百万像素,合计约三亿五千万个像素,那不叫 GIF,那叫人质事件。同样这六秒,宽 480、12 fps,就是 72 帧、每帧四十万像素,三千万,大约十二分之一,而它看上去正是人们说“GIF”时想的那个东西。
帧率该选几
这里默认十二,而它出乎意料地经常就是正确答案。手绘动画用了一个世纪的就是这个帧率:快到眼睛读得出连贯的运动,慢到你不必为谁也看不见的那些帧掏钱。
- 5 到 8,幻灯片的感觉。慢速摇镜、或者没什么快动作的屏幕录像,用它没问题。
- 10 到 15,正常。读得出是在动。几乎每一个值得做的 GIF 都落在这一段。
- 20 到 25,顺滑,体积大约是 12 帧的两倍,换来的差别多数观众说不上来。快动作、体育片段、带甩镜的东西,值这个价。
有一道硬顶你不妨知道:GIF 用百分之一秒为单位存每一帧停留多久,而所有浏览器都把小于两个单位的延迟当成十来处理。所以每秒 50 帧才是真正的上限,一个要求 100 fps 的文件,会一声不吭地按 10 fps 播。给你 60 fps 选项的转换器,要么无视了这条,要么正准备给你一个意外。
256 种颜色,以及抖动是干什么的
这个格式的年纪还体现在另一半上:一张 GIF 带一张最多 256 色的颜色表,每个像素都是指向表里某一项的编号。而一帧视频画面能有一千六百万种颜色。绝大部分都得扔掉,而怎么扔,基本决定了这张 GIF 长什么样。
好的转换器会数一遍你这段片子里的颜色,挑 256 个合适的,而不是用一套固定颜色。拍森林的就给 256 种绿,拍落日的就给 256 种橙。这里的工具就是这么干的,而且是把这一段里每一帧都数过,不只是第一帧,所以一个只在结尾出现的颜色也占得上位置。
抖动处理的是“你要的那个颜色还是没有”的情况。它不把整片区域四舍五入到最接近的可用颜色,那样一片平滑的天空会变成四道平色、中间还有看得见的台阶;它把最接近的两种颜色按细密的图案交替排布,在正常观看距离下,你的眼睛会把它们混成那个并不存在的颜色。
- 照片类就开着:天空、皮肤、渐变、阴影、影片画面。
- 平色类就关掉:屏幕录像、线稿、logo、卡通,以及任何有大片同色区域的东西。那里没有渐变需要保护,关掉之后文件更小也更干净。
要是你会拿几个转换器作比较,有个细节值得知道。最容易想到的抖动做法是误差扩散,多数图像编辑软件用的就是它,它让每个像素的结果取决于周围的像素。放在动画里,就意味着一块根本没在动的背景,在每一帧里抖出来的花样都不一样,于是它明显地在爬,而且每一帧都得完整存下来,因为技术上每个像素都变了。另一种叫有序抖动,只取决于像素在哪个位置,所以静止的背景稳稳当当。这个工具用的是后者,所以它的文件既更安静,也更小。
什么时候干脆别做 GIF
这一问值得提,因为老实的答案常常是“别做”。一段无声循环的 MP4 或者 WebM,体积大约是同样动画做成 GIF 的十分之一,播放效果一样,而且你上传之后,每个社交平台反正都会把你的 GIF 转成它。
只有目的地确实需要 GIF 时才留着它:
- 只收图片的地方,很多聊天、论坛、维基和邮件软件都是;
- README 或者文档页,GIF 在那儿能内嵌播放,视频则要一个播放器;
- 要在离线状态下继续动的幻灯片或者文档;
- 表情、贴纸、反应图,小到上面那些体积算术根本不成问题。
声音要紧的话,这个问题自己就回答了:GIF 从来没有音频,将来也不会有。那就别转,去剪视频,视频剪切能从里面取出一段,而且一帧都不重编。
怎么压到人家的上限之下
多数人之所以要调 GIF,就是因为收它的那一端有个上限。按咬人的狠劲大致排一排:
- 邮件,整封信 10 到 25 MB,而接近这个数的附件,中途总有个环节会把它剥掉或者退回来。留足余量。
- 聊天和论坛,常见 8 到 10 MB,要是走内嵌预览而不是下载,有时候还少得多。
- GitHub 的 README,单文件 10 MB,而超过两三兆,手机上打开就会觉得这页坏了。
- 贴纸和表情的位置,常常只有几百 KB,这意味着要的是小宽度和短段落,不是低帧率。
超了之后该试的顺序是:先缩短段落,再把宽度砍一半,然后降帧率,最后关掉抖动。前两条加起来,比后两条加起来管用得多。
这些事一样都不用上传
把视频转成 GIF,无非是解码、缩放、数颜色、压缩这四件事,而浏览器自己干这四件已经干了很多年。顶上链接的那个工具全都在你的机器上干:文件从你的硬盘上读,画面帧由你的浏览器解码,GIF 在内存里拼好,交给你的下载。
这件事在这儿比在别处更值得在意。人们拿来做 GIF 的片子都很私人:家庭录像里的一个瞬间、工作上某个东西的屏幕录像、一通通话里的几秒钟。一个要求把这些传上去的转换器,是在向你要一份副本,而如今,已经没有哪条技术理由值得你答应了。