2017-03-23 196 views
1

我从我的服务器上的视频生成动画gif。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"); 

我做了谷歌搜索,并跨越这些代码来:

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

但上面的代码不会执行任何操作,也不会执行任何操作正在生成。

有人请让我知道是否有明确的方法来产生高的quality gif using ffmpeg

有一些教程,我遇到过,但他们都没有为我工作,其中一些涉及使用imagemagic,我没有访问。

+0

http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html你可以试试这里的抖动和palettegen参数播放。 –

+0

@AleksandarMisich,这是我在google中遇到的第一件事情。但是,正如我在我的问题中所述,我无法访问imagemagic,所以教程对我来说并不好。对我有意义.. –

+0

你不需要该教程的imagemagick。 – Mulvya

回答

6

我写了一个工具,专门用于最高品质:

https://gif.ski

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

它不仅产生每帧的调色板,又融合了调色板跨框架,实现甚至上千的每帧颜色。

smooth

+1

这太神奇了... –

+0

绝对是杀手锏。 – ryanjdillon

1

的关键问题是,任何GIF图片或帧具有的唯一可能的百万色彩256影片中的极为有限的调色板

This is well explained here.

所以,相当最近(2015年,2.6版)的ffmpeg得到palettegenpaletteuse过滤器,可以产生每帧更好pallettes。

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

因此,这里有你的秘密和关键字搜索词让你在任何时间制作高品质的GIF - 研究palettegen过滤器。 Reddit beware.

一些参考:

ffmpeg 2.6 release notes

ffmpeg docs

superuser

blog.phk.me

+0

我使用的是2.6.8版本,我认为它的最新版本... –

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

我想ÿ您没有imageMagick安装在您的环境中,因为convert是IM的一种工具。

至于视频工件,它是由FFmpeg中的默认抖动方法引起的。为了达到最佳效果,我建议floyd_steinbergsierra2_4a,并与规模设定为3也许bayer(另外,有没有这样的事情,如“庞大”的像素,它们是光栅图像的基本元素。)

在另一方面,你只能用ffmpeg获得更好的结果。 首先,我会产生输入视频的调色板:

ffmpeg -i <your_input.mkv> -filter_complex "fps=10;scale=500:-1:flags=lanczos,palettegen=stats_mode=full" -t 10 palette.png 

然后,使用这种颜色的模板来生成实际的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> 

您可能需要与PARAMS拨弄和抖动方法达到最佳效果。您也可以尝试为每个帧生成新的调色板,因此您可以跳过第一遍,并使用paletteuse过滤器中的new选项。