我必须将数量非常多(200,000+)的短 mp4(少于 10 秒)批量处理成动画 gif。我想我已经尝试了所有可能的命令行方式,但是生成高质量的 gif 仍然需要很长时间。目前我使用 ffmpeg 解压缩图像(jpg)帧,并使用图像 magick 转换来组装它们。它可以生成高质量的 gif,但即使使用 -limit 内存和 map 限制进行调整,它也会花费太长时间并使用过多的内存和 CPU。
我也尝试过直接使用 ffmpeg 创建动画 gif,但质量充其量也很糟糕。另外,我尝试过使用 gifsicle,它看起来确实很快,但它只将 gif 作为输入,使用 ffmpeg 生成它们会产生质量较差的 gif。
有没有人有一些快速创建高质量 gif 的命令行秘诀?
最佳答案
首先,您应该使用 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
将生成的 jpg 转换为 gif,只需键入:
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 方法
来确定最合适的调色板。
对我来说最合适的方法是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。
关于linux - 从 mp4 创建动画 gif 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17221481/