FFMPEG:高品质的GIF动画?

时间:2017-03-23 15:38:00

标签: animation ffmpeg

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

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

示例:

enter image description here

这是我生成gif的方式:

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

我在google上搜索过并遇到过这段代码:

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

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

有人可以告诉我是否有明确的方法来生成高quality gif using ffmpeg

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

3 个答案:

答案 0 :(得分:27)

我已经专门为最高质量编写了一个工具:

https://gif.ski

ffmpeg -i video.mp4 frame%04d.png
gifski -o clip.gif frame*.png

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

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

ffmpeg -i video.mp4 -vf scale=400:240 frame%04d.png

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

ffmpeg -i video.mp4 -vf fps=12 frame%04d.png

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

组合使用

答案 1 :(得分:1)

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

This is well explained here.

所以,最近(2015年,版本2.6)ffmpeg获得了 palettegen paletteuse 过滤器,可以生成更好的托盘每一帧。

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

所以,有你的秘密和关键搜索术语可以让你立刻制作高质量的GIF - 研究 palettegen 过滤器。 Reddit beware.

一些参考文献:

ffmpeg 2.6 release notes

ffmpeg docs

superuser

blog.phk.me

答案 2 :(得分:1)

floyd_steinberg

我认为您的环境中没有安装 imageMagick ,因为转换是IM的工具之一。

对于视频工件,它是由FFmpeg中的默认抖动方法引起的。为了获得最佳效果,我建议sierra2_4abayer,也许ffmpeg -i <your_input.mkv> -filter_complex "fps=10;scale=500:-1:flags=lanczos,palettegen=stats_mode=full" -t 10 palette.png 的比例设置为3.(此外,还没有像#34这样的事情;巨大的像素,它们是光栅图像的原子元素。)

另一方面,只有ffmpeg才能获得更好的效果。 首先,我生成输入视频的调色板:

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>

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

new

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