12

我必须将大量(200,000+)的短 mp4(少于 10 秒)批量处理成动画 gif。我想我已经尝试了所有可能的命令行方式,但是制作高质量的 gif 仍然需要很长时间。目前我使用 ffmpeg 解压缩图像(jpg)帧,并使用图像魔法转换来组装它们。它可以生成高质量的 gif,但需要的时间太长,而且占用的内存和 CPU 太多,即使使用 -limit 内存和地图限制进行了调整。

我也尝试过直接使用 ffmpeg 创建动画 gif,但质量很糟糕。另外,我尝试过使用 gifsicle,它看起来确实很快,但它只将 gif 作为输入,并且使用 ffmpeg 生成它们会产生质量很差的 gif。

有没有人有一些用于快速创建高质量 gif 的命令行食谱?

4

3 回答 3

18

mplayer首先,您应该使用jpeg选项设置为 100 (jpeg:quality=100)创建一组具有最高质量的 jpg 图像。

mplayer -ao null -ss 0:00:00 -endpos 10 mts.flv -vo jpeg:outdir=jpeg_dir:quality=100

接下来,您需要使用 将生成的 jpgs 转换为 gifs convert,只需键入:

for i in ./jpeg_dir/*.jpg; do convert "$i" "${i%.jpg}.gif"; done

最后使用gifsicle创建动画 gif:

gifsicle --delay=10 --loop ./jpeg_dir/*.gif > anim.gif

此外,您可以使用优化级别标志--optimize=03。减小文件大小可能会有所帮助:

gifsicle --delay=10 --optimize=03 --loop *.gif > anim.gif

此外,您可以操作--colors num当前调色板的颜色数量并--color-method method确定最合适的调色板。

至于我最合适的方法是median-cut

median-cut is the median cut algorithm described by Heckbert

此外,我尝试使用描述的标志进行操作,并找到了最有用的选项来获得更好的生成 gif 图像质量:

gifsicle --delay=3 --optimize=03 --color-method median-cut --loop *.gif > anim.gif

准确与--delay=NUM对应的动画速度。此参数取决于原始视频的 FPS。

于 2013-06-24T15:03:43.347 回答
0

它可以改善未压缩图像(如 .ppm)的传递,例如使用 mplayer 命令行将是:

mplayer -benchmark -noframedrop -nosound -vf format=rgb24 -vo pnm *.avi -osdlevel 0

这些将保存 jpg 压缩/解压缩周期。

它还有助于使用固态驱动器。

于 2013-06-23T19:52:20.210 回答
0

将视频拆分为图像后,使用 imagemagick 包中的“动画”程序。像这个动画./*.jpg。然后只需将在 ImageMagick 程序中打开的合并图像保存为 gif。但它可能很大/然后需要优化和调整大小(最好使用 mplayer first scale=240:180)。

于 2014-04-23T14:59:39.260 回答