带有 ImageMagick 和许多图像的 GIF 动画
Posted
技术标签:
【中文标题】带有 ImageMagick 和许多图像的 GIF 动画【英文标题】:GIF animation with ImageMagick and many images 【发布时间】:2018-06-19 00:41:23 【问题描述】:我正在尝试使用 ImageMagick 使用多个源 jpg 图像创建 GIF 动画。这是我进行的命令行调用
convert -delay 20 -loop 0 $WDir/*.jpg -resize 20% $WDir/animate.gif
其中$WDir
是一个bash 变量,它指向所有图像所在的工作目录。该脚本可以正常运行 10 张图片,但我有 500 多张图片要制作动画。我不想再resize
图像,我试图限制内存使用,但这似乎没有帮助。
谁能告诉我如何在使用 RAM 有限 (16GB) 的机器时,如何在不牺牲图像质量的情况下制作大量图像的动画?如果它需要在“块”中完成,那很好,因为我可以编写一个 bash 脚本来完成这项工作并“设置它并忘记它”。
【问题讨论】:
【参考方案1】:您的 Imagemagick 版本是什么,平台是什么?我假设是 Unix(Linux 或 Mac)。你遇到了什么错误?如果内存不足,则可以调整 policy.xml 文件,以便可以使用磁盘而不是 RAM,但处理时间会更长。如您所说,您可能需要分批处理。此外,取决于您的操作系统,图像名称字符串可能会超过操作系统限制(Windows 的典型情况)。
我的建议是使用 mogrify 处理所有图像,因为它一次处理一张,因此不会占用大量内存。使用 mogrify 调整大小和重新格式化。完成后,您可能可以将所有 gif 文件加载到 RAM 中并制作动画。我建议您创建一个新目录来保存 mogrify 的输出并使用 -path 参数指定该输出目录。需要先创建目录。所以
cd to directory holding your input images
mogrify -path yourpath2/newdirectory -format gif -resize 20% *.jpg
完成后
cd to newdirectory
convert -delay 20 *.gif -loop 0 animate.gif
【讨论】:
我现在正在运行它,到目前为止一切顺利。不过有一个问题……假设我无法将所有 gif 加载到 RAM 中。在这种情况下我该怎么办? 哦,是的,我正在 Linux 上执行此操作。我的版本是 ImageMagick 6.3.6,我意识到需要更新,但我相信必要的命令应该可用。如果版本 7.* 有新命令,那么我一定会更新 ImageMagick。 为避免 RAM 过载,请如上所述使用 mogrify,这在您的 Imagemagick 版本上应该可以正常工作。 Imagemagick 7 具有新功能,但也有一些语法差异。例如代替转换使用魔法。代替 mogrify,使用魔法 mogrify。我还不确定任何 Linux 发行版都带有 IM 7。因此,您可能必须从 RPM 或源代码安装。但是您可能会通过升级 IM 6 获得新的 Linux 发行版。 是的,我用mogrify
关注你,因为它一次操作一个文件以节省 RAM,但在你的解决方案中你说“一旦完成,你可能可以将所有 gif 加载到 RAM 和制作动画”。我在第一条评论中问的是关于这个声明的。如果我不能一次将mogrify
生成的所有 gif 加载到 RAM 中怎么办?
如果您没有足够的 RAM,Imagemagick 将分页到磁盘。这会减慢它的速度,但它会完成。您可以通过 policy.xml 文件设置使用的磁盘空间量。见imagemagick.org/script/resources.php#configure 和imagemagick.org/script/resources.php#environment以上是关于带有 ImageMagick 和许多图像的 GIF 动画的主要内容,如果未能解决你的问题,请参考以下文章
使用 ImageMagick 创建 GIF 图像时出错:异常过多和闪烁问题
使用 ImageMagick 将 gif 转换为 png 时出现“转换:不正确的图像标题”错误
使用 imagemagick 将 GIF 图像转换为 PNG,但得到的是 RGBA 图像而不是调色板版本