Создание анимации GIF из файлов PNG

Вопрос или проблема

Существует ли инструмент для создания gif анимации из набора png файлов?

Я пробовал команду convert из набора ImageMagick, но это не всегда удается. Также у меня есть несколько проблем с этим:

  1. Я не могу понять, какой прогресс.
  2. Независимо от того, что я пробую, флаг -delay не изменяет частоту кадров анимации gif.
  3. convert определяет порядок кадров на основе алфавитного порядка названий файлов. Это означает, что name500.png будет помещен сразу после name50.png, а не после name450.png. Я могу это исправить, добавив нули, но это раздражает.

Команда convert из ImageMagick — это удобный инструмент командной строки для этого.
cd в папку с вашими png-файлами и выполните эту команду:

magick -delay 10 -loop 0 *.png animation.gif

Источник: http://ubuntuforums.org/showthread.php?t=1132058

Новые версии ffmpeg не имеют -sameq (см. faq), но поддерживают GIF.

ffmpeg -i %03d.png output.gif

Где %03d — это ID кадра в 3 цифрах.

Вы также можете попробовать использовать ffmpeg для создания фильма из последовательности изображений, а затем конвертировать фильм в анимацию GIF (снова используя ffmpeg).

# см. http://pages.uoregon.edu/noeckel/MakeMovie.html

# сначала конвертируем последовательность изображений в фильм
ffmpeg -sameq -i %03d.jpg output.mp4

# ... а затем конвертируем фильм в анимацию GIF
ffmpeg -i output.mp4 -pix_fmt rgb24 -s qcif -loop_output 0 output.gif

Опция --delay команды convert применяется только к следующему изображению в командной строке. Поэтому convert -delay 10 * установит задержку первого кадра только на 0.1 секунды. Опцию нужно повторить:

convert $(for a in *; do printf -- "-delay 10 %s " $a; done; ) result.gif

Для вашей потребности в сортировке convert не сортирует кадры, это делает оболочка с помощью глобального шаблона *. Если вы знаете, что ваши кадры пронумерованы от 0 до 700, вы можете просто вычислить номера сами:

convert $(for ((a=0; a<700; a++)); do printf -- "-delay 10 name%s.png " $a; done;) result.gif

Важные опции GIF ffmeg + тестовые данные

В дополнение к этому ответу:

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
ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i 'tmp.*.png' \
  -r 15 \
  -vf scale=512:-1 \
  out.gif \
;

Тестовые данные были сгенерированы с помощью: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292

Важные ffmpeg опции, на которые я хотел бы обратить внимание:

  • -pattern_type glob: удобный способ выбрать изображения
  • -framerate 60 и -r 15: предполагается 60 FPS для входящих изображений (ffmpeg не может знать иначе, так как в изображениях нет данных о FPS, как в видеоформатах), выбираем одно из каждых 4 изображений, чтобы уменьшить размер (4 == 60 / 15)
  • -vf scale=512:-1: установить ширину, пропорционально изменять высоту, обычно для уменьшения размера и экономии места

Смотрите также:

Протестировано на Ubuntu 18.10, ffmpeg 4.0.2.

Обновление:

Используйте convert для png-в-gif, затем используйте gifsicle для анимации. Это не универсальное решение, но, несомненно, скриптируемое.


GIMP может создавать анимированные GIF и предоставляет управление таймингом/задержкой и повтором и т.д.

ImageMagick может создавать gif-анимацию хорошего качества. Посмотрите это видео – http://www.youtube.com/watch?v=OFusYizJ-bA

ffmpeg может сделать все за вас, но действительно трудно с этим разобраться. Я написал маленький скрипт, чтобы сделать работу, чтобы не помнить. Он проходит по изображениям дважды: передает “a”, чтобы определить оптимальную палитру цветов, затем передает “b”, чтобы фактически создать gif-файл, используя созданную палитру. Скопируйте следующее в текстовый файл:

#!/bin/bash
ffmpeg -framerate 24 -start_number_range 999 -f image2 -i $1%3d.png -filter_complex "[0:v] split [a][b];[a] palettegen [p];[b][p] paletteuse" $1.gif

Сохраните файл как “creategif” или что-то другое на ваш вкус, сделайте его исполняемым и поместите в ту же директорию, что и ваш набор png.

Для последовательности foobar004.png, foobar005.png, foobar006.png…

откройте командную строку и перейдите в директорию с всем этим, а затем введите

./creategif foobar

и он создаст файл foobar.gif из png. Вы можете добавить несколько параметров в скрипт, чтобы сделать его немного более гибким, но мне легче просто изменить скрипт, если я хочу другую частоту кадров или что-то подобное. Большое спасибо тому, кто указал мне верное направление несколько лет назад на этом форуме.

Чтобы получить кадры в числовом порядке (т.е. 1.png, 2.png), а не в алфавитном, сделайте это:

files=$(ls | sort --version-sort); convert -delay 10 -loop 0 $files animation.gif

Что касается пункта 2

Версия ImageMagick “display”, которую я имею (ImageMagick 6.7.2-7 2017-01-12), игнорирует частоту кадров, установленную с помощью команды convert для создания анимированного gif. Попробуйте другую программу для просмотра анимированного gif, например, firefox.

Ответ или решение

Создание GIF-анимации из PNG-файлов является распространенной задачей в мире графики и веб-разработки. Для этого существует несколько инструментов, среди которых наиболее популярными являются ImageMagick и ffmpeg. В данной статье мы подробно рассмотрим, как эффективно использовать эти инструменты, а также предоставим решения для часто встречающихся проблем.

Использование ImageMagick для создания анимации GIF

ImageMagick — это мощный инструмент командной строки для работы с графикой. Чтобы создать GIF-анимацию из PNG-файлов, выполните следующие шаги:

  1. Перейдите в папку с вашими PNG-файлами.
  2. Запустите следующую команду в терминале:
    magick -delay 10 -loop 0 *.png animation.gif

    В этой команде:

    • -delay 10 задает задержку между кадрами (в данном случае 10/100 секунды).
    • -loop 0 указывает на бесконечное повторение GIF.

Проблемы с ImageMagick и их решения

Несмотря на универсальность ImageMagick, вы можете столкнуться с некоторыми проблемами, такими как:

  1. Отсутствие визуального прогресса. ImageMagick не отображает процесс обработки. Для решения этой проблемы можно использовать pv (Pipe Viewer), чтобы отслеживать прогресс.

  2. Проблемы с задержкой. Опция -delay применяется только к следующему изображению. Чтобы задать одинаковую задержку для всех кадров, повторите флаг для каждого файла. Для автоматизации вы можете использовать следующую команду:

    convert $(for a in *.png; do printf -- "-delay 10 %s " "$a"; done) result.gif
  3. Неправильный порядок кадров. ImageMagick сортирует изображения по алфавиту. Чтобы обеспечить правильный порядок, можете воспользоваться командой:

    files=$(ls | sort --version-sort); convert -delay 10 -loop 0 $files animation.gif

Использование ffmpeg для создания GIF

ffmpeg — это еще один мощный инструмент для работы с видео и графикой. Для создания GIF-анимации из последовательности PNG-файлов выполните следующее:

  1. Перейдите в директорию с изображениями и запустите:

    ffmpeg -framerate 10 -i %03d.png output.gif

    Здесь %03d — это пример формата имени файлов (например, 001.png, 002.png).

  2. Чтобы добиться лучшего качества и оптимизации размера GIF, используйте палитру:

    ffmpeg -framerate 24 -i %03d.png -vf "palettegen" palette.png
    ffmpeg -framerate 24 -i %03d.png -i palette.png -lavfi "paletteuse" output.gif

Альтернативные инструменты

GIMP: Если вы предпочитаете графические интерфейсы, то GIMP предоставляет простые инструменты для создания анимации. Вы можете управлять временем задержки и циклом анимации, что делает его отличным выбором для пользователей, не знакомых с командной строкой.

Gifsicle: Для улучшения уже созданных GIF-файлов можно использовать gifsicle, который позволяет оптимизировать и редактировать анимации.

Заключение

Создание GIF-анимаций из PNG-файлов является простой задачей при использовании подходящих инструментов. ImageMagick и ffmpeg предлагают широкие возможности для формирования качественной анимации, а также позволяют решать распространенные проблемы с порядком кадров и задержкой. Выбор инструмента зависит от ваших предпочтений и требований проекта. Применение вышеперечисленных методов поможет вам эффективно создать анимацию и улучшить ваш рабочий процесс.

Оцените материал
Добавить комментарий

Капча загружается...