我正在服务器上的视频中生成GIF动画。
生成的动画gif不是很高质量,看起来像素很大。
示例:
这是我生成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。
答案 0 :(得分:27)
我已经专门为最高质量编写了一个工具:
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种。
所以,最近(2015年,版本2.6)ffmpeg获得了 palettegen 和 paletteuse 过滤器,可以生成更好的托盘每一帧。
因此,请确保您使用的是最近的版本的ffmpeg。
所以,有你的秘密和关键搜索术语可以让你立刻制作高质量的GIF - 研究 palettegen 过滤器。 Reddit beware.
一些参考文献:
答案 2 :(得分:1)
floyd_steinberg
我认为您的环境中没有安装 imageMagick ,因为转换是IM的工具之一。
对于视频工件,它是由FFmpeg中的默认抖动方法引起的。为了获得最佳效果,我建议sierra2_4a
或bayer
,也许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
选项。