Vimeo针对GIF性能和质量的改进

文 / Raphaël Zumervim

原文连接 / https://medium.com/vimeo-engi...浏览器

如今是2021年,视频编码彻底被AV1等现代编解码器所主导。好吧,也不彻底是。一个小小的,不屈不挠的格式仍然可以抵抗入侵者。对于那些想要提升视频质量的工程师来讲,生活并不容易……ide

Vimeo针对GIF性能和质量的改进
Sintel by the Blender Institute/CC BY. 在Vimeo上制做的GIF性能

即便在今天,建立于1987年的Graphics Interchange Format(图形交换格式),或称 GIF (发音为“ JIF”) ,仍然是传输短动画或视频的最便携、最普遍支持的方式。尽管它每帧最多只支持256种颜色,压缩性能不好,并且不能包含音轨,但该格式的简单使其在电子邮件、论坛、社交媒体等应用中,以及在不支持现代替代品的传统系统中仍占据主导地位。因为该格式的限制,许多声称支持 GIF的平台实际上使用的是 h.264,这种格式被配置为在没有音频的状况下循环播放,以模拟实际的GIF。浏览器和移动设备能够轻松回放这些文件,它们在相同或更好的质量下提供更低的文件大小。然而GIF在支持方面仍然有优点。优化

在Vimeo,咱们最近发布了一个功能,容许会员从他们的视频中建立GIF,嵌入到电子邮件中,并在任何平台上分享。与任何视频编码系统同样,咱们须要考虑如何在保持合理的文件大小和编码时间的同时尽量保持高质量。但因为压缩格式的能力有限,咱们必须解决一些特有的相关问题,涉及图像量化、时间优化、速率控制和性能。动画

后台是一个由libimagequant和FFmpeg组成的系统。咱们使用libimagequant对图像进行量化——减小每帧中使用的颜色数量,以知足格式的限制——同时最小化这一过程对质量的影响。这个优化步骤是复杂的,也是编码器中最耗时的部分。libimagequant还应用了抖动,它看起来相似于胶片的颗粒,并在生成的GIF中隐藏了量化可能产生的任何色带。而后,FFmpeg获取量化和抖动图像及其调色板,并将它们编码为实际的GIF格式。编码

为了提升量化质量和压缩性能,咱们采用了预处理步骤来减小时间冗余。GIF能够有透明像素,在动画GIF中,能够利用这一点在不一样帧之间只改变部分像素,保持其余像素的静态。若是视频中的背景在帧之间没有变化,咱们能够经过对比连续帧的每一个像素来避免对其颜色进行屡次编码,当它们很是类似时,在后一帧中使其透明。咱们使用一个简单的感知颜色距离测量来肯定要成为透明的像素,这样就不会影响人眼看到的质量。spa

这套系统可让咱们用一些控制帧速率和大小的质量参数、量化质量和像素透明度的像素距离阈值来对GIF文件进行编码,可是还有一个咱们须要解决的问题:速率控制。因为GIF是一种旧的格式,并无针对视频编码进行优化,因此咱们不能用一样的设置对每个视频进行不加区分的编码,并指望合理的大小用于有硬性大小限制的电子邮件和平台。现代视频编码器一般包括内部速率控制机制,以调整质量以达到目标大小,但对于GIF,管理文件大小的方法有限:减小每帧颜色的数量,减小帧数,减小帧的大小。为了保持文件大小合理而不牺牲质量(除非必要),咱们运行多个编码,根据须要逐步下降默认参数的质量,直到咱们达到一个适当水平,尽量少地损害质量。orm

对同一视频进行屡次编码确实会致使总体响应时间更长,所以咱们在多个级别上对它们进行并行处理,以保持合理的等待时间。目前,咱们在收集结果并挑选出最终结果以前,以固定规模的批次运行编码,而且每一个编码同时在多个帧上运行主要瓶颈,颜色量化。下面的活动示意图描述了系统的整体结构和程序流程。视频

Vimeo针对GIF性能和质量的改进
GIF 建立系统的活动示意图

因为年代久远和格式的低复杂性,GIF永远不会像它们的源视频那样好看,但咱们仍然有一些针对质量和性能的改进工做。经过电子邮件或社交媒体分享GIF片断是在朋友或关注者中建立视频兴趣的好方法。

如今咱们全部的成员均可以使用这个功能,因此若是你想经过电子邮件或社交媒体在Vimeo上分享视频,在你的视频设置中找到GIF选项,并试一试!

相关文章
相关标签/搜索