我必须批量处理非常高数量(200,000+)的短mp4s(小于10s)为动画gif。我想我已经尝试了所有可能的命令行方法,但生成高质量的gif仍然需要太长时间。目前,我使用ffmpeg来解压图像(Jpg)帧,然后使用图像magick convert来组装它们。它可以生成高质量的gif,但耗时太长,占用太多内存和CPU,即使调整了-limit内存和贴图限制也是如此。
我也尝试过直接使用ffmpeg创建动画gif,但质量充其量也是糟糕透顶。此外,我也尝试过使用gifsicle,它看起来确实很快,但它只接受gif作为输入,并且使用ffmpeg生成它们会产生质量很差的gif。
有没有人有一些命令行配方来快速创建高质量的gif?
发布于 2013-06-24 23:03:43
首先,您应该使用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接下来,您需要使用convert将生成的jpgs转换为gifs,只需输入:
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此外,您可以操纵当前调色板和--color-method method的颜色--colors num的数量,以确定最合适的调色板。
对我来说,最合适的方法是median-cut
median-cut is the median cut algorithm described by Heckbert此外,我尝试使用所描述的标志来操作,并找到了最有用的选项来实现更好的生成gif-image的质量:
gifsicle --delay=3 --optimize=03 --color-method median-cut --loop *.gif > anim.gif准确地使用--delay=NUM来对应动画速度。该参数依赖于原始视频的FPS。
发布于 2013-06-24 03:52:20
它可以提高未压缩图像的传递率,例如.ppm,例如使用mplayer命令行将是:
mplayer -benchmark -noframedrop -nosound -vf format=rgb24 -vo pnm *.avi -osdlevel 0这将节省jpg压缩/解压缩周期。
它也将有助于固态硬盘的工作。
发布于 2014-04-23 22:59:39
在将视频分割成图像后,使用imagemagick包中的"animate“程序。像这样的动画./*.jpg。然后只需将打开的合并在ImageMagick程序中的图像保存为gif。但它可能会很大,然后需要优化和调整大小(最好使用mplayer first scale=240:180)。
https://stackoverflow.com/questions/17221481
复制相似问题