当前位置: 首页 > 教程资源 > FFmpeg 教程 > 正文
如何使用 FFmpeg 将视频转换为 GIF 动画教程

如何使用 FFmpeg 将视频转换为 GIF 动画教程

作者:大眼仔~旭 日期:3个月前 (07-28) 评论:0 条

摘要:动画 GIF 通常用于难以使用或无法使用视频文件的地方。常见的情况是在不支持视频的电子邮件中,或者在希望动画自动播放的网站上。电影和电视节目中的短小片段经常被转换成 GIF 并用来制作备忘录。但如何将视频转换成 GIF 动画呢? 在本文中,大眼仔将向您展示如何使用 FFmpeg 将视频转换为 GIF 动画。 什么是 F…

动画 GIF 通常用于难以使用或无法使用视频文件的地方。常见的情况是在不支持视频的电子邮件中,或者在希望动画自动播放的网站上。电影和电视节目中的短小片段经常被转换成 GIF 并用来制作备忘录。但如何将视频转换成 GIF 动画呢?

在本文中,大眼仔将向您展示如何使用 FFmpeg 将视频转换为 GIF 动画。

FFmpeg 将视频转换为 GIF 动画

什么是 FFmpeg?

FFmpeg 是一款免费的开源软件,用于处理视频、音频和其他多媒体文件和流。它是一个命令行工具,可用于转换视频和音频文件,以及执行视频流、录制、编辑和转码等其他任务。它适用于 Windows、Mac OS X 和 Linux。

前提条件

要学习本教程,请确保您已安装 FFmpeg。你可以在终端运行以下命令检查 FFmpeg 是否已安装:

1
ffmpeg -version

如果没有安装 FFmpeg,可以从 FFmpeg 官方网站下载

要从视频生成 GIF,需要 FFmpeg v2.6 或更高版本。高于 v2.6 的版本包含调色板生成器和调色板使用过滤器,本文稍后将详细介绍。FFmpeg v2.6 发布于 2015 年,所以如果你最近安装了 FFmpeg,也不会有问题。

将 MP4 视频转换为 GIF 动画

打开终端(或 Windows 的命令提示符)并导航到保存视频文件的文件夹。要将视频转换为 GIF,请运行以下命令:

1
ffmpeg -i input.mp4 output.gif

以下是命令和选项的详细说明:

  • ffmpeg:我们要运行的 ffmpeg 软件程序或命令。
  • -i input.mp4:输入视频的名称,在我们的例子中使用 input.mp4。
  • output.gif:输出 GIF 文件的名称。

命令执行完毕后,你会在 input.mp4 文件旁边看到一个名为 output.gif 的新文件,并可以查看该文件。只需提供带有 .gif 扩展名的输出文件名,FFmpeg 就会自动将视频转换为 GIF 文件。

将部分视频转换为 GIF

GIF 用作备忘录很常见,只需将几秒钟的视频转换为 GIF 即可。为此,请运行以下命令:

1
ffmpeg -i input.mp4 -ss 5.0 -t 2 trimmed.gif

以下是该命令中选项的作用:

  • -ss 5:从 5 秒开始提取视频。
  • -t 2:设置输出视频的持续时间。

上述 FFmpeg 命令将 mp4 视频转换为 GIF,从 5 秒开始,持续 2 秒。输出文件名为 trimmed.gif。

使用 FFmpeg 创建循环 GIF

反复循环播放的 GIF 也很常见。要创建循环 GIF,我们可以使用 -loop 选项。-loop 选项使用一个数字作为参数,指定 GIF 应循环的次数:

1
ffmpeg -i input.mp4 -loop 0 looped.gif

在本例中,-loop 0 选项让 FFmpeg 永远循环播放 GIF。您也可以指定一个数字,这样 GIF 就会循环多少次。例如,-loop 1 将循环播放 GIF 一次,-loop 2 将循环播放 GIF 两次,以此类推。请注意,循环次数为 1 会播放 GIF 两次,因为 GIF 会播放一次,然后循环一次。如果想完全不循环播放 GIF,可以使用 -loop -1 设置,或者直接省略 -loop 选项。

优化 GIF 文件大小和质量

如果您查看一下刚刚创建的 GIF 文件大小,就会发现它们比原始视频大得多。在示例中大眼仔使用的 .mp4 视频,原始文件为 8.6MB,而 GIF 为 140MB。即使是经过 2 秒钟修剪的视频也有 16MB。

这与视频和 GIF 的压缩方式有关。视频文件压缩和编解码器(如 H.264 和 H.265)对移动图像的编码效率很高。而 GIF 的效率则不高,GIF 的每一帧都作为单独的图像存储,因此文件大小要大得多。

无论何时为互联网创建媒体文件,无论是视频、图像还是音频文件,都应尽量优化文件大小,以加快页面加载速度,降低存储和带宽成本,并获得更好的用户体验。

减小 GIF 动画文件的大小

您可能已经注意到,网上共享的 GIF 宽度和高度(即分辨率)都非常小。与最好使用高清分辨率的视频不同,GIF 恰恰相反,它使用的尺寸要小得多。尺寸越小,文件大小就越小。

缩小文件大小的另一个方法是降低帧频。GIF 的播放有时会显得有点生涩。这通常是因为帧频降低了。帧频是指每秒显示的帧数(fps)。帧频越高,动画越流畅,但文件大小也越大。降低帧频可以减小文件大小,但动画会不那么流畅。

下面是一个减少 GIF 尺寸和帧频的命令:

1
ffmpeg -i input.mp4 -filter_complex "fps=10, scale=-1:360" compressed.gif

该命令中的选项有以下作用:

  • -filter_complex:对输出应用一个或多个滤镜,滤镜用引号括起来。
  • fps=10:将帧速率设置为每秒 10 帧,我们的原始鲸鱼.mp4 视频使用的是 60fps。
  • scale=-1:360:将输出高度设置为 360px,宽度按比例缩放。

我们的新 GIF 文件 compressed.gif 现在为 10.6MB,文件大小减少了 92%。虽然质量不如原版,但仍然可以观看,比我们之前创建的 140MB GIF 要好得多。

提高 GIF 的视觉质量

GIF 的限制之一是每帧只支持 256 种颜色。这意味着,如果视频中的颜色较多,就会在 GIF 中出现色彩失真或色带。如果视频中存在大量渐变色,情况就更是如此。

为了解决这个问题,FFmpeg 使用一个名为 palettegen 的过滤器为 GIF 生成自定义调色板。调色板生成过滤器与调色板使用过滤器结合使用,可生成调色板更接近原始视频的 GIF,并提高 GIF 的视觉质量。

使用原始的 input.mp4 视频素材,我们可以使用以下命令创建带有自定义调色板的新 GIF:

1
ffmpeg -i input.mp4 -filter_complex "[0]split[a][b]; [a]palettegen[palette]; [b][palette]paletteuse" palette.gif

我们再次使用 filter_complex 对输出应用多个过滤器。过滤器用引号括起来,并用分号隔开。以下是每个过滤器的作用:

  • [0]split[a][b]:将输入视频分为两个视频流,分别标为 a 和 b。
  • [a]palettegen[palette]:将 a 流导向 palettegen,创建一个自定义调色板,存储在名为 palette 的流中。
  • [b][palette]paletteuse:使用 paletteuse 将 b 流与来自 palette 的自定义调色板结合起来。

你会发现,在生成调色板时,编码过程非常缓慢。生成的 GIF 文件比我们创建的第一个 output.gif 文件(462MB)还要大,但视觉质量要好得多。

生成经过优化的 GIF 视频文件

综合以上所有步骤,我们就能制作出文件大小更小、视觉质量更好的新 GIF 文件。我们还将对视频进行修剪,并使用一小段视频来制作可在线使用的 GIF。最后,我们将添加一个无限循环。

1
ffmpeg -i input.mp4 -ss 5 -t 2 -loop 0 -filter_complex "fps=10, scale=-1:360[s]; [s]split[a][b]; [a]palettegen[palette]; [b][palette]paletteuse" final.gif

该命令将所有内容整合在一起,将原始视频转换成 3MB、2 秒钟、美观的循环 GIF。除了 [s] 标签外,所有选项现在都应该很熟悉了。这是一个标签,我们用它来引用 fps 和缩放过滤器创建的流。然后,我们使用该标签将数据流分成两个数据流,即 a 和 b。

总结

使用 FFmpeg 以及本教程中的选项和过滤器,您应该能够将视频转换为 GIF,而且这些 GIF 已针对网络进行了优化,看起来非常漂亮。

声明:大眼仔旭 | 本文采用署名-非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
文章名称:《如何使用 FFmpeg 将视频转换为 GIF 动画教程
文章固定链接:https://www.dayanzai.me/convert-video-gif-ffmpeg.html
本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。
转载声明
全部评论: (0条)
^_^ 暂无评论!

发表评论

返回顶部