
У меня есть набор из примерно 500 изображений JPEG. Общий размер набора составляет около 60 МБ, а каждое изображение имеет размеры 480 x 270. Я хочу преобразовать эти изображения в анимированный GIF.
Я попытался преобразовать эти изображения в анимированный GIF следующим образом на моей системе i7 с 16 ГБ оперативной памяти:
export MAGICK_THREAD_LIMIT=1
convert -delay 5 -loop 0 -layers optimize -limit memory 64 *.jpg output.gif
Однако когда я это делаю, потребляется так много системных ресурсов, что система становится непригодной для использования и останавливается.
Итак, какой же способ создания анимированного GIF-изображения подойдет лучше всего в Ubuntu?
решение1
Следующая процедура предотвращает чрезмерное потребление системных ресурсов ImageMagick. Она была протестирована с ImageMagick 6.8.9-9 на Ubuntu 15.04. Для иллюстрации процедуры я использую пример преобразования видео в анимированный 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 может хранить временные файлы. Это особенно полезно для кадровых изображений относительно большого размера, поскольку позволяет избежать чрезмерного использования оперативной памяти.
Подготовьте имя входного файла, имя выходного файла и каталог, в котором будут храниться изображения кадров.
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}"