我正在服务器上的视频中生成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
我写了一个专门用于最高质量的工具:
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
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_steinberg或sierra2_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。
关键问题是,任何 gif 图片或框架都具有极其有限的调色板,在您的视频中可能只有 256 种颜色。
因此,最近(2015 年,2.6 版)ffmpeg 获得了Palettegen和Paletteuse过滤器,可以为每一帧生成更好的调色板。
因此,请确保您使用的是最新版本的 ffmpeg。
因此,有您的秘密和关键搜索词可以让您立即制作高质量的 gif - 研究调色板过滤器。 Reddit 小心。
一些参考: