Vimeo针对GIF性能和质量的改进
正文字数:1579 阅读时长:3分钟
本文介绍了GIF在现代应用中的劣势&优势,以及Vimeo对GIF的运用方法。
文 / Raphaël Zumer
原文链接 / https://medium.com/vimeo-engineering-blog/supporting-a-35-year-old-video-format-4cb9a62eae9
现在是2021年,视频编码完全被AV1等现代编解码器所主导。好吧,也不完全是。一个小小的,不屈不挠的格式仍然能够抵抗入侵者。对于那些想要提高视频质量的工程师来说,生活并不容易……
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中,可以利用这一点在不同帧之间只改变部分像素,保持其他像素的静态。如果视频中的背景在帧之间没有变化,我们可以通过对比连续帧的每个像素来避免对其颜色进行多次编码,当它们非常相似时,在后一帧中使其透明。我们使用一个简单的感知颜色距离测量来确定要成为透明的像素,这样就不会影响人眼看到的质量。
这套系统可以让我们用一些控制帧速率和大小的质量参数、量化质量和像素透明度的像素距离阈值来对GIF文件进行编码,但是还有一个我们需要解决的问题:速率控制。由于GIF是一种旧的格式,并没有针对视频编码进行优化,所以我们不能用同样的设置对每一个视频进行不加区分的编码,并期望合理的大小用于有硬性大小限制的电子邮件和平台。现代视频编码器通常包括内部速率控制机制,以调整质量以达到目标大小,但对于GIF,管理文件大小的方法有限:减少每帧颜色的数量,减少帧数,减少帧的大小。为了保持文件大小合理而不牺牲质量(除非必要),我们运行多个编码,根据需要逐步降低默认参数的质量,直到我们达到一个适当水平,尽可能少地损害质量。
对同一视频进行多次编码确实会导致整体响应时间更长,因此我们在多个级别上对它们进行并行处理,以保持合理的等待时间。目前,我们在收集结果并挑选出最终结果之前,以固定规模的批次运行编码,并且每个编码同时在多个帧上运行主要瓶颈,颜色量化。下面的活动示意图描述了系统的总体结构和程序流程。
GIF 创建系统的活动示意图
由于年代久远和格式的低复杂性,GIF永远不会像它们的源视频那样好看,但我们仍然有一些针对质量和性能的改进工作。通过电子邮件或社交媒体分享GIF片段是在朋友或关注者中创建视频兴趣的好方法。
现在我们所有的成员都可以使用这个功能,所以如果你想通过电子邮件或社交媒体在Vimeo上分享视频,在你的视频设置中找到GIF选项,并试一试!
LiveVideoStackCon 2021 上海站
时间:2021年4月16日-4月17日
我们准备好全新的内容,在上海欢迎您的到来
点击【阅读原文】了解更多详情
Vimeo针对GIF性能和质量的改进相关推荐
- 针对“云计算”服务安全思路的改进-花瓶模型V4.0
针对"云计算"服务安全思路的改进 ---花瓶模型V4.0 Jack zhai 问题提出: 随着云计算与物联网的兴起,使得互联网正在日益"城市化",传统的四合院( ...
- [jQuery] 针对jQuery性能的优化方法有哪些?
[jQuery] 针对jQuery性能的优化方法有哪些? show slide animate 等频繁修改 dom 很耗性能,可采用 jquery.transit 插件等使用单个 id 或 class ...
- 改进建议 计算机组成原理,“计算机组成原理”教学方法的探讨及教学质量的改进...
摘 要:计算机组成原理是计算机专业的一门主干核心课程,课程的任务是使学生掌握计算机组成部件的工作原理.逻辑实现.设计方法,建立CPU级和硬件系统级的整体概念,培养学生对计算机硬件系统的分析.开发与设计 ...
- Linux 4.7内核针对syncookie性能所做的优化
由于端午节加班攒了两天调休,周四,五就申请休假了,刚申请下来调休,老婆突然就决定带着小小西北行了,周五出发,这次是去环青海-休假本为了放松,却成了坑.周四先是去看了<加勒比海盗5>,然后我 ...
- java开发之提高java和mysql代码性能和质量
0.if嵌套的层数最好不要超过3层 点击(此处)折叠或打开 import java.util.HashMap; import java.util.Map; public class Qiantao { ...
- BM与V神再次交锋 EOS针对DPOS BFT共识机制做出改进
本文翻译自BM在Medium的文章,比较了当前的几种主流共识算法,论述了在DPOS在拜占庭容错机制下... 本文翻译自BM在Medium的文章,比较了当前的几种主流共识算法,论述了在DPOS在拜占庭容 ...
- Siemens NX 1965下载及教程
资源地址:Siemens NX 1965 Siemens NX 1965是由西门子公司最新发布的一款集成化产品.工程和制造软件,可以为企业提供一个集成的工具集,用于协调不同的学科,维护数据完整性和设计 ...
- 一起看 I/O | Google TV 和 Android TV OS 的最新进展
在接触到的娱乐内容与日俱增的今天,有研究表明,三分之一的美国家庭现每周的电视观看时长在 25 个小时以上.随着电视体验的不断演进,我们也为自己设定了一个目标,那就是为用户打造量身定做的电视使用体验,让 ...
- Flutter:从入门到实践
课程内容 开篇:迎合未来主流趋势,把握新技术主动权 移动开发的前方突破口在哪里? 小团队如何面向未来做技术选型? 想要独立开发一个产品,能不能做到省心省力? 我用两个关键词来回答这些问题:跨平台.Fl ...
最新文章
- shell实例第23讲:每天定时备份nginx日志
- wifi一阵一阵卡_家里wifi总是过一会就卡一下然后又好了
- 移动端 c++ 开发_这 10 点值得移动端开发重点学习
- vivado不识别HLS生成的IP解决方法
- BROCADE 300和MD3200扩展柜FC SAN,截图
- DB2 存储过程中执行动态SQL的两种写法
- php软件开发--nginx服务器(待补充)
- 在线文本中插入符号工具
- docker 启动tomcat_docker安装tomcat
- robot framework学习五——AutoltLibrary库
- DR模式 + keepalived
- 系统登录界面(收集)
- thinkphp 字段静态验证$_validate中错误提醒多语言化写成{%LANGUATE}的原因
- 安信三级分销商城系统源码 带有安装介绍
- Ubuntu/Windows 双系统安装教程
- linux配置maven环境变量
- 一个商品SKU是怎么生成的
- 多线段几何图形—— 简单几何图形(布尔运算)
- 2009年三月全国计算机二级,2009年3月全国计算机二级考试Access真题(2)
- 一文看尽 CVPR 2022 最新 20 篇 Oral 论文
热门文章
- PostgreSQL 与 MySQL 常用命令对照
- gitolite 踩坑记
- 从“负电价”说起:谈谈德国新能源消纳的借鉴意义
- [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用
- ubuntu下安装zabbix
- 软引用、弱引用、 java
- sql union 与多个order by 一起使用
- Linq Coding -- Part Eight (Equals Topic)
- 中石油训练赛 - 数学问题(思维)
- CodeForces - 375D Tree and Queries(树上启发式合并)