从mp4创建动画GIF的最快方法

sti*_*per 11 linux ffmpeg imagemagick image-processing animated-gif

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

我也曾尝试使用ffmpeg直接创建动画GIF,但质量最差.此外,我尝试使用gifsicle,看起来似乎很快,但它只需要GIF作为输入,并使用ffmpeg生成它们产生质量差的GIF.

有没有人有一些命令行配方快速高品质的GIF创建?

Ale*_*lya 17

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

mplayer -ao null -ss 0:00:00 -endpos 10 mts.flv -vo jpeg:outdir=jpeg_dir:quality=100
Run Code Online (Sandbox Code Playgroud)

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

for i in ./jpeg_dir/*.jpg; do convert "$i" "${i%.jpg}.gif"; done
Run Code Online (Sandbox Code Playgroud)

最后使用gifsicle创建动画gif:

gifsicle --delay=10 --loop ./jpeg_dir/*.gif > anim.gif
Run Code Online (Sandbox Code Playgroud)

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

gifsicle --delay=10 --optimize=03 --loop *.gif > anim.gif
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用--colors num当前调色板的多种颜色进行操作,并--color-method method确定最合适的调色板.

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

median-cut is the median cut algorithm described by Heckbert
Run Code Online (Sandbox Code Playgroud)

此外,我尝试使用描述的标志进行操作,并找到了最有用的选项,以实现更好的生成的gif-image质量:

gifsicle --delay=3 --optimize=03 --color-method median-cut --loop *.gif > anim.gif
Run Code Online (Sandbox Code Playgroud)

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


Ant*_*nio 0

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

mplayer -benchmark -noframedrop -nosound -vf format=rgb24 -vo pnm *.avi -osdlevel 0
Run Code Online (Sandbox Code Playgroud)

这些将节省 jpg 压缩/解压缩周期。

它还有助于使用固态硬盘。