Есть ли в Ubuntu какое-либо программное обеспечение для преобразования серии файлов изображений в анимированный файл gif? [дубликат]

Я хочу сделать анимированное изображение .gif из заданного набора of .jpg картинки.

Я бы предпочел делать это из командной строки, поэтому инструменты командной строки будут очень приветствоваться.

132
задан 3 February 2019 в 20:39

6 ответов

Вы можете использовать пакет ImageMagick . Установите его с помощью команды:

sudo apt-get install imagemagick

Теперь вы можете создать gif из количества изображений ( jpg ), используя:

convert -delay 20 -loop 0 *.jpg myimage.gif
126
ответ дан 5 January 2021 в 23:09

Чтобы завершить ответ @Maythux:

Чтобы избежать создания очень большого файла, вы можете использовать параметр -resize :

В моем случае у меня 4608x3456 изображений и сгенерированного gif было больше 300 МБ для 32 изображений

convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif

или

convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif

. Позаботьтесь о * .jpg

*. jpg немного отстой при работе с числовыми значениями, вы можете создать gif с несортированными pics.

$ 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, хотя, думаю, вам нужно будет создать собственный сценарий.

63
ответ дан 5 January 2021 в 23:09

решение ffmeg + тестовые данные

Начиная с Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8, я обнаружил, что ffmpeg намного быстрее, чем ImageMagick, и использует намного меньше памяти .

Простейшая команда преобразования:

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

enter image description here

Важные параметры 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 vs ffmpeg benchmark

Чтобы получить Чтобы ImageMagick работал, мне сначала пришлось изменить ограничения на диск и память на /etc/ImageMagick-6/policy.xml , как описано на: https://superuser.com/questions/1178666/ imagemagick-convert-quits-after-some-pages

Я сравнил команды:

/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 могут содержать только минимум imal изменил прямоугольник из предыдущего кадра, чтобы уменьшить размер GIF.

    ffmpeg вычисляет эти различия по умолчанию, но ImageMagick не делает этого, если не используется -deconstruct .

    В основном вы захотите использовать эту опцию каждый раз с ImageMagick.

    Мы можем наблюдать разницу с помощью:

     identify out.gif
     

    В сжатой версии все кадры имеют меньший размер, чем исходный, например :[1280 sizesout.gif[0] GIF 1024x1024 1024x1024 + 0 + 0 8-битный sRGB 256c 16,7865MiB 0,010u 0: 00,010 out.gif [1] GIF 516x516 1024x1024 + 252 + 257 8-битный sRGB 256c 16,7865MiB 0,010u 0: 00.010 out.gif [2] GIF 515x520 1024x1024 + 248 + 257 8-битный sRGB 256c 16,7865MiB 0,010u 0: 00.010

    В этом примере размер второго кадра составляет только 516x516 вместо полного 1024x1024, и он размещен со смещением 252 + 257 . Поэтому он содержит только средний треугольник.

    См. Также: как изменить размер анимированного файла GIF с помощью ImageMagick?

  • -delay : значение, которое соответствует 60FPS 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

] из которого мы видим, что:

  • ImageMagick использовал 2,6 ГБ ОЗУ и занял около 1 минуты
  • ffmpeg использовал 100 МБ ОЗУ и занял 4 секунды

Тестовое оборудование: Lenovo ThinkPad P51 ноутбук , Intel Core i7-7820HQ, 32 ГБ (16 + 16) DDR4 SODIMM 2400 МГц, 512 ГБ SSD PCIe TLC OPAL2.

20
ответ дан 5 January 2021 в 23:09

Вы можете использовать программу 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 Examples

4
ответ дан 5 January 2021 в 23:09

GIMP

Вы можете легко сделать это с помощью GIMP. Сначала установите его, если он еще не установлен с помощью

sudo apt-get install gimp

Создание gif

Из GIMP перейдите в Файл -> Открыть как слои , чтобы открыть все png на отдельном слое.

Open as Layer

Отсюда вы можете редактировать слои и после этого перейти к Файл -> Экспортировать как . В диалоговом окне обязательно установите тип файла GIF.

Set file type to GIF

Оттуда вы перейдете к параметрам экспорта GIF. Отметьте опцию « As Animation » и установите требуемые параметры.

GIF export options

Чтобы изменить задержку между кадрами

Измените название слоев и укажите задержку в миллисекундах между скобками, как это : (1500 мс)

enter image description here

Предварительный просмотр анимации перед экспортом

Щелкните меню «Фильтры», затем «Анимация», затем «Воспроизведение анимации».

14
ответ дан 5 January 2021 в 23:09

У меня недостаточно репутации, чтобы комментировать, но вместо изменения имен файлов вы можете использовать подстановку, чтобы ваша оболочка расширяла имена файлов

convert -resize 50% -delay 10 -loop 0 image_{0..99}.jpg output.gif
24
ответ дан 5 January 2021 в 23:09

Другие вопросы по тегам:

Похожие вопросы: