我有一组约 500 张 JPEG 图像。该图像集的总大小约为 60 MB,每张图像的尺寸为 480 x 270。我想将这些图像转换为动画 GIF。
我尝试在具有 16 GB RAM 的 i7 系统上以以下方式将这些图像转换为动画 GIF:
export MAGICK_THREAD_LIMIT=1
convert -delay 5 -loop 0 -layers optimize -limit memory 64 *.jpg output.gif
然而,当我这样做时,系统资源被占用了太多,以致于系统变得无法使用并陷入停顿。
那么,在 Ubuntu 上制作动画 GIF 的好方法是什么?
答案1
以下步骤可防止 ImageMagick 消耗过多的系统资源。已在 Ubuntu 15.04 上使用 ImageMagick 6.8.9-9 进行了测试。为了说明此过程,我使用将视频转换为动画 GIF 的示例。
设置 ImageMagick 以使其不会消耗过多的系统资源:
export MAGICK_MEMORY_LIMIT=1024
export MAGICK_MAP_LIMIT=1024
export MAGICK_AREA_LIMIT=4096
export MAGICK_FILES_LIMIT=1024
export MAGICK_THREAD_LIMIT=1
export MAGICK_TMPDIR=/home/user/tmp
环境变量MAGICK_THREAD_LIMIT
限制 ImageMagick 使用的线程数(当启用 OpenMP 构建时)。环境变量MAGICK_TMPDIR
是 ImageMagick 可以存储临时文件的目录路径。它对于相对较大的帧图像特别有用,因为它可以避免过多的 RAM 内存使用。
准备输入文件名、输出文件名和要存储帧图像的目录。
filename1=2015-11-09T1300Z.mp4
filename2=2015-11-09T1300Z.gif
directoryName1="tmp_images"
将视频转换为多帧图像(适当设置时间限制;在此示例中,从 0 秒到 30 秒)。
mplayer -ao null -ss 0:00:00 -endpos 30 "${filename1}" -vo jpeg:outdir="${directoryName1}":quality=100
如果输出文件大小限制合理,则减少视频帧的大小(在此示例中为 50%)。
mogrify -resize 50% "${directoryName1}"/*.jpg
使用 ImageMagick 将帧图像转换为动画 GIF。
convert -delay 5 -loop 0 -layers optimize -limit memory 64 "${directoryName1}"/*.jpg "${filename2}"