linux - 从 mp4 创建动画 gif 的最快方法

标签 linux image-processing ffmpeg imagemagick animated-gif

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

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

有没有人有一些快速创建高质量 gif 的命令行秘诀?

最佳答案

首先,您应该使用 mplayerjpeg 选项设置为 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/

相关文章:

java - 如何向用 Java 调用的 bash 脚本添加参数?

Linux 系统调用流程序列

c++ - 在 C++ 中的线程之间共享列表

linux + 验证文件是文本还是二进制

c++ - 模糊高斯算法是什么样的?有实现的例子吗?

c++ - 用于模式识别/图像处理的 C 或 C++?

java - 通过从 Java/Python 中的照片中删除黑色边框,从图像中裁剪精确的文档纸张

ffmpeg - 从 Sprite 创建视频

azure - 将 FFMpeg 与 Asp .Net Core 和视频流一起使用

objective-c - iOS 中的 RTSP 流