FFMPEG:高品质的GIF动画?

Dav*_*ope 10 animation ffmpeg

我正在服务器上的视频中生成GIF动画.

生成的动画gif不是很高质量,看起来像素很大.

例:

在此输入图像描述

这就是我生成gif的方法:

shell_exec("/usr/bin/ffmpeg -i video.mkv -vf scale=500:-1 -t 10 -r 10 image.gif");
Run Code Online (Sandbox Code Playgroud)

我在google上搜索了一下,发现了这段代码:

shell_exec("/usr/bin/ffmpeg -i video.mkv -r 20 -f image2pipe -vcodec ppm - | convert -delay 5 - output.gif");
Run Code Online (Sandbox Code Playgroud)

但上面的代码没有做任何事情,根本没有生成output.gif.

如果有明确的方法可以产生高价,有人可以告诉我quality gif using ffmpeg吗?

我遇到过一些教程,但没有一个对我有用,其中一些涉及使用我无法访问的imagemagic.

Kor*_*nel 34

我写了一个专门用于最高质量的工具:

https://gif.ski

ffmpeg -i video.mp4 frame%04d.png
gifski -o clip.gif frame*.png
Run Code Online (Sandbox Code Playgroud)

它可以生成良好的每帧调色板,但也可以跨框架组合调色板,每帧甚至可以实现数千种颜色.

如果要减小视频尺寸,请添加缩放滤镜:

ffmpeg -i video.mp4 -vf scale=400:240 frame%04d.png
Run Code Online (Sandbox Code Playgroud)

如果要降低帧速率,请添加fps过滤器:

ffmpeg -i video.mp4 -vf fps=12 frame%04d.png
Run Code Online (Sandbox Code Playgroud)

您可以将过滤器与 -vf scale=400:240,fps=12

  • 很棒的工作。由于看到了 gifski 的质量,我正在探索 imageoptim。 (2认同)

Ger*_*csy 11

shell_exec("/usr/bin/ffmpeg -i video.mkv -r 20 -f image2pipe -vcodec ppm - | convert -delay 5 - output.gif");
Run Code Online (Sandbox Code Playgroud)

我想您的环境中没有安装imageMagick,因为“convert”是 IM 的工具之一。

至于视频伪像,这是由 FFmpeg 中默认的抖动方法引起的。为了获得最佳结果,我建议floyd_steinbergsierra2_4a,并且可能bayer将比例设置为 3。(此外,不存在诸如“巨大”像素之类的东西,它们是光栅图像的原子元素。)

另一方面,仅使用 ffmpeg 可以获得更好的结果。首先,我生成输入视频的调色板:

ffmpeg -i <your_input.mkv> -filter_complex "fps=10;scale=500:-1:flags=lanczos,palettegen=stats_mode=full" -t 10 palette.png
Run Code Online (Sandbox Code Playgroud)

然后,使用此颜色模板生成实际的 gif 文件:

ffmpeg -i <your_input.mkv> -i palette.png -filter_complex "[0]fps=10;scale=500:-1:flags=lanczos[scaled]; [scaled][1:v] paletteuse=dither=sierra2_4a" -t 10 <output.gif>
Run Code Online (Sandbox Code Playgroud)

您可能需要摆弄参数和抖动方法才能获得最佳结果。您还可以尝试为每个帧生成新的调色板,这样您就可以跳过第一遍,并使用过滤器new中的选项paletteuse

  • 显然在“调色板]”之前缺少一个“[”。在没有 `scale` 和 `t` 的情况下重写此命令,加上引入 `-vsync 0` 导致此处的 `gif` 大小合理: `ffmpeg -y -i input.mkv -filter_complex "fps=15,split[v1][v2 ]; [v1]palettegen=stats_mode=full [调色板]; [v2][调色板]paletteuse=dither=sierra2_4a" -vsync 0 output.gif` (11认同)
  • 请注意:您可以使用稍微复杂的过滤器图将这两个命令合并为一个: ffmpeg -i &lt;your_input.mkv&gt; -filter_complex "fps=10;scale=500:-1:flags=lanczos,split[v1][ v2]; [v1]palettegen=stats_mode=full [调色板];[v2]palette]paletteuse=dither=sierra2_4a" -t 10 &lt;output.gif&gt; (7认同)

neo*_*eon 5

关键问题是,任何 gif 图片或框架都具有极其有限的调色板,在您的视频中可能只有 256 种颜色。

这在这里得到了很好的解释。

因此,最近(2015 年,2.6 版)ffmpeg 获得了PalettegenPaletteuse过滤器,可以为每一帧生成更好的调色板

因此,请确保您使用的是最新版本的 ffmpeg。

因此,有您的秘密和关键搜索词可以让您立即制作高质量的 gif - 研究调色板过滤器。 Reddit 小心。

一些参考:

ffmpeg 2.6 发行说明

ffmpeg 文档

超级用户

博客.phk.me