Как я создаю анимированный gif из неподвижных изображений (предпочтительно с командной строкой)?

Я хочу, делают a .gif изображение с анимацией от данного набора .jpg изображения.

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

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

6 ответов

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

sudo apt-get install imagemagick

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

convert -delay 20 -loop 0 *.jpg myimage.gif
91
ответ дан 22 November 2019 в 23:16

Завершать ответ @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

*.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, например. На человечности можно использовать ls -v вместо этого, что-то как:

convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif

Сортировка численно довольно хитра на Mac OS X, хотя, я предполагаю, что необходимо будет создать пользовательский сценарий.

47
ответ дан 22 November 2019 в 23:16

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

convert -resize 50% -delay 10 -loop 0 image_{0..99}.jpg output.gif
21
ответ дан 22 November 2019 в 23:16

Можно использовать названную программу, преобразовывают включенный в 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

*Note вышеупомянутый пример является прямым от Изображение Примеры Magick

4
ответ дан 22 November 2019 в 23:16

GIMP

Можно легко сделать это с GIMP. Сначала установите его, если это уже не установлено с

sudo apt-get install gimp

Создание gif

От GIMP переходят к Файлу-> Открытый как Слои для открытия всего png's на их собственном слое.

Open as Layer

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

Set file type to GIF

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

GIF export options

11
ответ дан 22 November 2019 в 23:16

решение для 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 1024x1024 изображения PNG.

И вот другие данные тестирования, которые можно генерировать непосредственно в браузере прямо сейчас! 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 кадр/с на входных изображениях и произведите того же кадр/с.

    ffmpeg не может знать иначе, так как нет никаких данных кадр/с, находится в изображениях, поскольку существует, находится в форматах видео.

    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 по сравнению со сравнительным тестом 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 вычисляет те diffs по умолчанию, но 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: значение, которое соответствует 60 футам в секунду ffmpeg. Не должен иметь значения для производительности преобразования, но я не хочу рисковать ею.

Вывод GIFs имеют о том же размере и выглядят визуально идентичными.

Мы добираемся для 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 ГБ RAM и занял приблизительно 1 минуту
  • ffmpeg использовал 100 МБ RAM и занял 4 секунды

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

8
ответ дан 22 November 2019 в 23:16

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

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