Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Gifski:一个跨平台的高质量 GIF 编码器

Gifski:一个跨平台的高质量 GIF 编码器

作者头像
用户8639654
修改于 2021-10-26 02:18:06
修改于 2021-10-26 02:18:06
1.7K00
代码可运行
举报
文章被收录于专栏:云计算运维云计算运维
运行总次数:0
代码可运行

作为一名文字工作者,我需要在我的文章中添加图片。有时为了更容易讲清楚某个概念,我还会添加视频或者 gif 动图,相比于文字,通过视频或者 gif 格式的输出,读者可以更容易地理解我的指导。前些天,我已经写了篇文章来介绍针对 Linux 的功能丰富的强大截屏工具 Flameshot。今天,我将向你展示如何从一段视频或者一些图片来制作高质量的 gif 动图。这个工具就是 Gifski,一个跨平台、开源、基于 Pngquant 的高质量命令行 GIF 编码器。

对于那些好奇 pngquant 是什么的读者,简单来说 pngquant 是一个针对 PNG 图片的无损压缩命令行工具。相信我,pngquant 是我使用过的最好的 PNG 无损压缩工具。它可以将 PNG 图片最高压缩 70% 而不会损失图片的原有质量并保存了所有的阿尔法透明度。经过压缩的图片可以在所有的网络浏览器和系统中使用。而 Gifski 是基于 Pngquant 的,它使用 pngquant 的功能来创建高质量的 GIF 动图。Gifski 能够创建每帧包含上千种颜色的 GIF 动图。Gifski 也需要 ffmpeg 来将视频转换为 PNG 图片。

安装 Gifski

首先需要确保你安装了 FFMpeg 和 Pngquant。

FFmpeg 在大多数的 Linux 发行版的默认软件仓库中都可以获取到,所以你可以使用默认的包管理器来安装它。具体的安装过程,请参考下面链接中的指导。

Pngquant 可以从 AUR 中获取到。要在基于 Arch 的系统安装它,使用任意一个 AUR 帮助程序即可,例如下面示例中的 Yay

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ yay -S pngquant

在基于 Debian 的系统中,运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo apt install pngquant

假如在你使用的发行版中没有 pngquant,你可以从源码编译并安装它。为此你还需要安装 libpng-dev包。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git clone --recursive https://github.com/kornelski/pngquant.git
$ make
$ sudo make install

安装完上述依赖后,再安装 Gifski。假如你已经安装了 Rust 编程语言,你可以使用 cargo 来安装它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cargo install gifski

另外,你还可以使用 Linuxbrew 包管理器来安装它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew install gifski

假如你不想安装 cargo 或 Linuxbrew,可以从它的 发布页面 下载最新的二进制程序,或者手动从源码编译并安装 gifski 。

使用 Gifski 来创建高质量的 GIF 动图

进入你保存 PNG 图片的目录,然后运行下面的命令来从这些图片创建 GIF 动图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gifski -o file.gif *.png

上面的 file.gif 为最后输出的 gif 动图。

Gifski 还有其他的特性,例如:

  • 创建特定大小的 GIF 动图
  • 在每秒钟展示特定数目的动图
  • 以特定的质量编码
  • 更快速度的编码
  • 以给定顺序来编码图片,而不是以排序的结果来编码

为了创建特定大小的 GIF 动图,例如宽为 800,高为 400,可以使用下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gifski -o file.gif -W 800 -H 400 *.png

你可以设定 GIF 动图在每秒钟展示多少帧,默认值是 20。为此,可以运行下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gifski -o file.gif --fps 1 *.png

在上面的例子中,我指定每秒钟展示 1 帧。

我们还能够以特定质量(1-100 范围内)来编码。显然,更低的质量将生成更小的文件,更高的质量将生成更大的 GIF 动图文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gifski -o file.gif --quality 50 *.png

当需要编码大量图片时,Gifski 将会花费更多时间。如果想要编码过程加快到通常速度的 3 倍左右,可以运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gifski -o file.gif --fast *.png

请注意上面的命令产生的 GIF 动图文件将减少 10% 的质量,并且文件大小也会更大。

如果想让图片以某个给定的顺序(而不是通过排序)精确地被编码,可以使用 --nosort 选项。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gifski -o file.gif --nosort *.png

假如你不想让 GIF 循环播放,只需要使用 --once 选项即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gifski -o file.gif --once *.png

从视频创建 GIF 动图

有时或许你想从一个视频创建 GIF 动图。这也是可以做到的,这时候 FFmpeg 便能提供帮助。首先像下面这样,将视频转换成一系列的 PNG 图片:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ffmpeg -i video.mp4 frame%04d.png

上面的命令将会从 video.mp4 这个视频文件创建名为 “frame0001.png”、“frame0002.png”、“frame0003.png” 等等形式的图片(其中的 %04d 代表帧数),然后将这些图片保存在当前的工作目录。

转换好图片后,只需要运行下面的命令便可以制作 GIF 动图了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gifski -o file.gif *.png

想知晓更多的细节,请参考它的帮助部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gifski -h

这是使用 Gifski 创建的示例 GIF 动图文件。

正如你看到的那样,GIF 动图的质量看起来是非常好的。

好了,这就是全部内容了。希望这篇指南对你有所帮助。更多精彩内容即将呈现,请保持关注!

干杯吧!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ffmpeg 生成高质量 gif
GIF(Graphics Interchange Format)是网络中常见的一种图像交互格式,普遍用于表情包。GIF 有很多特点:
xiaoxia
2024/11/29
5600
温故知新:ffmpeg操作《天空之城》。窗口党勿入,都是指令!
在本文中,我们将看到一些选项和示例,演示如何使用FFmpeg多媒体框架对音频和视频文件执行各种转换过程。
程序员小助手
2020/04/27
8300
温故知新:ffmpeg操作《天空之城》。窗口党勿入,都是指令!
利用ffmpeg转码视频为gif图片,调整gif图片的大小
一般发布技术文章的时候经常要插入GIF图演示软件效果,但是一些编辑器总是限制大小,但是录制的时候可能一不小心就搞大了。
DS小龙哥
2025/05/27
2330
我是如何高效录制出那么多高质量 gif 动图的呢?
我最推荐 Tim 自带的录屏功能(在截图功能里),因为这玩意选择录制区域方便得很。
Piper蛋窝
2021/03/25
7870
我是如何高效录制出那么多高质量 gif 动图的呢?
探索现代图片格式:从GIF到HEIF,优势与适用场景一览
每个像素所能显示的彩色数为2的8次方,即256种颜色。这种彩色深度适用于较古老的显示设备和简单的图像场景。它在色彩表现方面相对较弱,颜色过渡可能显得不够平滑,导致图像呈现出颗粒感,不适合表现细腻的色彩变化。
linwu
2023/07/27
1.1K0
探索现代图片格式:从GIF到HEIF,优势与适用场景一览
PHP-FFMpeg 操作音视频
江户川码农
2023/10/19
5191
PHP-FFMpeg 操作音视频
ffmpeg 入门
http://einverne.github.io/post/2015/12/ffmpeg-first.html
bear_fish
2018/09/19
3K0
无意间发现一个好用的视频转换gif图片的开源框架
我使用Mac自带的屏幕录制软件QuickTime Player录制了一个测试视频,根据上面的命令行参数来看如果我们不做一些其他的自定义,只添加-o、--output输出的gif文件名即可,如下所示:
恒宇少年
2020/08/10
1.7K0
Linux系统如何缩小媒体文件的占用空间,这7个命令绝了!
您的计算机上有媒体文件吗?您可以通过以更节省空间的文件格式存储数据来节省大量磁盘空间。
网络技术联盟站
2021/11/19
1.9K0
Linux系统如何缩小媒体文件的占用空间,这7个命令绝了!
百万点赞怎么来?用Python制作抖音视频原来这么简单!
那么在上一篇教程当中,我们讲了Python在图片处理当中的应用,通过调用当中的opencv的模块,那么今天小编就和大家来分享一下Python同样也可以用来制作视频,也就是调用moviepy的模块。
用户6888863
2023/03/01
1.3K0
百万点赞怎么来?用Python制作抖音视频原来这么简单!
图片该如何优化来提高网站的性能,这里提供几种方法
图像是web上提供的最基本的内容类型之一。他们说一张图片胜过千言万语。但是如果你不小心的话,图片大小有时高达几十兆。
前端小智@大迁世界
2022/06/15
1.2K0
图片该如何优化来提高网站的性能,这里提供几种方法
FFmpeg 学习笔记
当然可以!下面是一份**《FFmpeg 学习笔记》**,内容包括常用命令、基础概念、实践技巧,适合初学者入门或进阶者查阅参考。
用户3672714
2025/06/04
2160
Android终端上视频转GIF的实现及GIF质量讨论
在生成 GIF 的过程中,最关键的步骤就是生成调色板以及像素到调色板的映射关系。
天天P图攻城狮
2018/02/02
3.8K0
Android终端上视频转GIF的实现及GIF质量讨论
利用 FFmpeg 将视频转换为 GIF 操作指北
在写技术文档的时候,为了演示方便,经常需要插入一些短小的视频资源。比如一些操作的录频、一些经典视频片段、一些科普动画等。由于展示的地方通常是网页,而如果是插入视频之类的资源,通常需要占用额外的存储,而且也需要可用的视频播放器的支持,非常不便。对于命令行操作的回放,我们可能会采用 Asciinema,但是这个方案对非终端的操作无法模拟。一个常见的方案是把需要的资源转换成网页支持的 GIF、WEBP 格式等动图。考虑到各大浏览器对 GIF 格式的支持最稳定,因此大部分情况下我们都想将待展示的短小视频转换成 GIF 格式,方便直接插入文档中。
mythsman
2022/11/14
3.7K0
利用 FFmpeg 将视频转换为 GIF 操作指北
全面掌握移动端主流图片格式的特点、性能、调优等
图片通常是移动端应用流量耗费最多的部分,并且占据着重要的视觉空间。以大家最常用的即时通讯IM应用为例,应用中存在大量的图片数据往来(比如图片消息、用户相册、用户头像等等)。合理的图片格式选用和优化不仅能减小图片传递过程中的数据量、提升视觉效果,还能显著降低服务端的带宽、计算资源等基础设施成本,一举多得。
JackJiang
2018/08/29
2K0
【免费】怎么将MP4转换为GIF,如何在线实现多媒体文件格式互转
日常生活中MP4和GIF都是经常遇到的多媒体格式,十年前各大社会论坛还经常出现GIF图和经典的“不动戳大”老梗,一眨眼十年过去,人们已经厌恶了GIF低质的画面、卡顿的帧率和较大的体积。GIF的应用范围越来越少,取代的是压缩算法高级,画面精美而流畅的MP4视频。
watermelo37
2025/03/18
1.3K0
【免费】怎么将MP4转换为GIF,如何在线实现多媒体文件格式互转
9.27【前端开发】图片文件格式:常见的图片格式对比有何优劣以及如何使用Google的webp格式?
总结一下,对于色彩与图像内容比较丰富,变化比较多端的,适合使用jpg,例如大型背景、头像、人物照片等。对于颜色单一,有大色块的图像,例如图标等,适合用png,压缩效率高,并且有透明。小动画可以使用gif,便不适合使用复杂的视频。
LIYI
2020/10/09
2.5K0
9.27【前端开发】图片文件格式:常见的图片格式对比有何优劣以及如何使用Google的webp格式?
开发 | 谷歌开源JPEG编码器Guetzli,压缩35%也能生成高质量图片
谷歌通过线上社区的形式创造了各种新的工具和工业标准,它们所衍生出的服务和产品旨在为使用者提供更好的线上体验。 谷歌近日开源了用于数字图像和网络图形的JPEG编码器 Guetzli( [guɛtsli], 在瑞士德语中被翻译为饼干)。与现有的方法相比,它能将高质量图片的大小缩小35%。这就使网站管理员可以使用更少的数据更快地加载网页,此外,它能兼容现有的浏览器、图像处理应用和JPEG标准。 从实现的角度来说Guetzli 与Zopfli算法类似,并不需要引入新的格式就能生成更小的PNG和gzip文件。与前段时
AI科技评论
2018/03/12
8210
开发 | 谷歌开源JPEG编码器Guetzli,压缩35%也能生成高质量图片
TRTC案例:截图体积与清晰度
业务场景和架构:TRTC安卓端与小程序端实现视频互通,房间旁路到直播,采用直播云端截图。
singleli
2020/10/24
2.7K0
TRTC案例:截图体积与清晰度
使用交互式地图和动画可视化伦敦的自行车流动性(下)
上面的代码使用了一种动态的颜色方案,这取决于站点的容量。我们还可以根据每个站点的出发和到达次数,为这些圆形标记实现动态半径方案。我们可以得到我们所称的密度图,显示每个车站的净出发/到达人数。
AiTechYun
2020/02/23
7640
推荐阅读
相关推荐
ffmpeg 生成高质量 gif
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验