Я хочу сделать .gif
анимированные картинки из заданного набора .jpg
картинок.
Я бы предпочел сделать это из командной строки, поэтому инструменты командной строки будут очень кстати.
Я хочу сделать .gif
анимированные картинки из заданного набора .jpg
картинок.
Я бы предпочел сделать это из командной строки, поэтому инструменты командной строки будут очень кстати.
Ответы:
Вы можете использовать пакет ImageMagick . Установите его с помощью команды:
sudo apt-get install imagemagick
Теперь вы можете создать gif
из числа картинок ( jpg
) используя:
convert -delay 20 -loop 0 *.jpg myimage.gif
-resize 50%
.
-deconstruct
. Я также обнаружил, что ImageMagick очень требователен к
convert -delay 0 -loop 0 *.tif myanimated.gif
работал хорошо, на 720 файлов TIF
Чтобы завершить ответ @Maythux:
-resize
опцию:В моем случае у меня есть 4608x3456 изображений, и сгенерированный GIF был больше, чем 300M для 32 изображений
convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif
или же
convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif
*.jpg
Немного отстой при работе с числовыми значениями, вы можете сгенерировать GIF с несортированными фото.
$ ls|cat
21-33-26_1.jpg
21-33-26_10.jpg // <--- this one
21-33-26_2.jpg
21-33-26_3.jpg
21-33-26_4.jpg
21-33-26_5.jpg
21-33-26_6.jpg
21-33-26_7.jpg
21-33-26_8.jpg
21-33-26_9.jpg
21-33-28_1.jpg // <--- should be here
21-33-28_2.jpg
21-33-28_3.jpg
...
Поскольку снимки были сделаны очень быстро (10 / с), все они имеют одинаковое время модификации, и вы не можете использовать трюк, ls -t
например. В Ubuntu вы можете использовать ls -v
вместо этого что-то вроде:
convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif
Числовая сортировка довольно сложна в Mac OS X, хотя, я думаю, вам нужно будет создать собственный скрипт.
find
, sort
расширение скобки и так далее. ls
Инструмент , как известно , непригодный для такого рода вещи. Используйте find
. Есть немного кривой обучения, но оно того стоит.
Вы можете легко сделать это с GIMP. Сначала установите его, если он еще не установлен с
sudo apt-get install gimp
Из GIMP перейдите в File -> Open as Layers, чтобы открыть все png на их собственном слое.
Отсюда вы можете выполнить редактирование слоев и, как только закончите, перейдите в File -> Export As . В диалоговом окне обязательно укажите тип файла GIF.
Оттуда вы перейдете к параметрам экспорта GIF. Отметьте опцию « As Animation » и установите необходимые параметры.
решение ffmeg + данные испытаний
Начиная с Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8, я обнаружил, что ffmpeg намного быстрее и использует гораздо меньше памяти .
Самая простая команда преобразования:
ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
-r 15 \
-vf scale=512:-1 \
out.gif \
;
Вы можете получить мои данные испытаний с:
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
Данные теста были созданы с: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292 и содержат 256 изображений PNG 1024x1024.
А вот и другие тестовые данные, которые вы можете генерировать прямо в своем браузере прямо сейчас! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718
Важные ffmpeg
параметры, которые я хочу выделить:
-pattern_type glob
: удобный способ выбора изображений
-framerate 60
: примите 60 FPS на входных изображениях и выведите тот же FPS.
ffmpeg
иначе не может знать, поскольку в изображениях нет данных FPS, как в видеоформатах.
Для 256 входных кадров требуется около 4 секунд.
-r 15
: по желанию. Выберите одно каждые 4 изображения, чтобы уменьшить размер ( 4 == 60 / 15
).
При этом identify out.gif
говорится, что GIF содержит только 64 кадра.
Игра все еще занимает 4 секунды, поэтому задержка изменяется, чтобы все совпадало.
-vf scale=512:-1
: по желанию. Установите ширину, высоту шкалы пропорционально, обычно для уменьшения размера и экономии места.
Чтобы заставить ImageMagick работать, мне сначала пришлось изменить пределы диска и памяти, /etc/ImageMagick-6/policy.xml
как описано по адресу: https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pages
Смотрите также:
Тест ImageMagick vs ffmpeg
Я сравнил команды:
/usr/bin/time -v convert *.png -deconstruct -delay 1.6 out-convert.gif
/usr/bin/time -v ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
out-ffmpeg.gif \
;
Команды были созданы для получения выходных данных, максимально близких к действительному сравнению:
/usr/bin/time -v
: используется для определения максимального использования памяти, как описано по адресу: https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process
-deconstruct
: Изображения GIF могут содержать только минимальный измененный прямоугольник из предыдущего кадра, чтобы уменьшить размер GIF.
ffmpeg
вычисляет эти различия по умолчанию, но ImageMagick не делает, если -deconstruct
не используется.
Вы будете в основном хотеть использовать эту опцию каждый раз с ImageMagick.
Мы можем наблюдать разницу с:
identify out.gif
В сжатой версии все кадры имеют меньшие размеры, чем исходный, например:
out.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
В этом примере второй кадр только 516x516
вместо полных 1024x1024 и размещен со смещением 252+257
. Поэтому он содержит только средний треугольник.
См. Также: как изменить размер анимированного GIF-файла с помощью ImageMagick?
-delay
: значение, которое соответствует 60FPS of ffmpeg
. Не должно иметь значения для эффективности конверсии, но я не хочу рисковать.
Выходные GIF-файлы имеют примерно одинаковый размер и выглядят визуально идентичными.
Мы получаем для ImageMagick:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856
и для ffmpeg:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172
из которого мы видим, что:
Тестовое оборудование: ноутбук Lenovo ThinkPad P51 , Intel Core i7-7820HQ, 32 ГБ (16 + 16) DDR4 2400 МГц SODIMM, 512 ГБ SSD PCIe TLC OPAL2.
-r
и -v
команды, тем не менее, выходной GIF имеет гораздо более низкое качество, чем оригинальные файлы PNG. Как сохранить то же качество gif, что и для файлов png?
-framerate 60 -r 60
. Проверяйте сгенерированный GIF и вводите изображения с помощью инструментов ImageMagick, например, identify
чтобы попытаться выяснить, что происходит.
Вы можете использовать программу под названием convert, включенную в пакет imagemagick. Это командная строка, но очень проста в использовании. Установите его либо через центр программного обеспечения, либо перейдите в командную строку и введите
sudo apt-get install imagemagick
Теперь, чтобы создать .gif.
convert -delay 100 -size 100x100 xc:SkyBlue \
-page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-loop 0 animation.gif
* Обратите внимание, что приведенный выше пример взят из примеров Image Magick.
convert -delay 20 -loop 0 *.png out.gif
делает цикл GIF.