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

При выполнении сценария, необходимо выполнить его как sudo /path/to/my/script.

Править: На основе Вашего комментария к другому ответу Вы хотите выполнить это от значка. Необходимо будет создать a .desktop файл, который выполняет Вашу программу с sudo, точно так же, как на терминале.

Вы могли также рассмотреть использование gtk-sudo для визуальной подсказки пароля.

Необходимо, вероятно, рассмотреть идею, что Вы не должны выполнять вещи как корень и что, изменяя систему дальше в будущем так, чтобы Вы не должны были базироваться, полномочия вообще были бы лучшим способом пойти.

85
05.11.2011, 21:09
7 ответов

Более новые версии ffmpeg не имеют никакого-sameq (см. часто задаваемые вопросы), но действительно имейте поддержку GIF.

ffmpeg -i %03d.png output.gif

Где %03d является идентификатором кадра в 3 цифрах.

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

# cf. http://pages.uoregon.edu/noeckel/MakeMovie.html

# first convert an image sequence to a movie
ffmpeg -sameq -i %03d.jpg output.mp4

# ... and then convert the movie to a GIF animation
ffmpeg -i output.mp4 -pix_fmt rgb24 -s qcif -loop_output 0 output.gif
52
27.01.2020, 19:30
  • 1
    Эта инструкция устарела. –  Ben Sinclair 16.07.2014, 22:03
  • 2
    sameq опция больше не доступна. Далее, для меня, это перезаписывает файлы исходного изображения и не производит допустимый файл ролика. –  Lode 08.11.2014, 20:57
  • 3
    Какой смысл того, чтобы уехать -sameq кодировать там? Почему Вы даже хотели бы использовать формат видео с потерями (output.mp4) как временный файл? И если так, почему "то же качество" как вход, вместо очень высокой скорости передачи? Artifacting от этого просто идет ко всем неприятностям для кодера GIF. Если бы действительно необходимо было использовать видео в качестве временного файла, то Вы хотели бы использовать что-то без потерь как huffyuv. Или MJPEG без транскодирования, просто повторно мультиплексируйте вход jpegs в MJPEG. (-codec:video copy). –  Peter Cordes 07.12.2016, 17:25

convert удобный инструмент командной строки должен сделать это. cd к папке, содержащей Ваши png-файлы и выполненный эта команда:

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

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

85
27.01.2020, 19:30
  • 1
    Упоминания вопроса convert и некоторые проблемы с помощью него. Ваш ответ не обращается ни к одному из них. –  Mat 06.11.2011, 02:36
  • 2
    С версии ImageMagick 6.8.7-4 2013-11-02 Q16 это работало на меня. –  Rudy Matela 06.11.2013, 19:11
  • 3
    Это работает, но 10 средства 10 * 10 мс, настолько довольно быстро. Задержка a 100 1 секунда. –  Anne van Rossum 27.09.2015, 11:01
  • 4
    -dispose previous или -dispose 2 если Вы работаете с прозрачным PNGs –  Hải Phong 31.08.2016, 04:00
  • 5
    мне: расширение фигурной скобки может быть полезным для определения списка изображений как аргументы, например pic_{0..20..2}.png расширяется до pic_0.png, pic_2.png полностью к pic_20.png –  Yibo Yang 06.09.2017, 05:51

Обновление:

Использовать convert для png-to-gif затем используйте gifsicle для анимации. Это не Одно Приложение, Чтобы Сделать Все это решение, но scriptable, наверняка.


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

7
27.01.2020, 19:30
  • 1
    , который я знаю о калеке, но я не знаю, как написать сценарий его. Кроме того, использование калеки для создания анимации похоже на уничтожение мухи с орудием –  Yotam 07.11.2011, 09:58
  • 2
    Это - плохая идея; качество будет ужасно, поскольку каждый кадр будет квантован отдельно. –  Clément 05.07.2016, 16:27

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

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

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

convert $(for ((a=0; a<700; a++)); do printf -- "-delay 10 name%s.png " $a; done;) result.gif
19
27.01.2020, 19:30
  • 1
    я не испытываю это поведение с convert, для меня convert -delay 1000 -loop 0 *.png animation.gif действительно добавляет задержка 10-х между каждым изображением. –  Lode 08.11.2014, 20:52
  • 2
    Можно также использовать вид версии ls команда. Это: convert -delay 1000 $(ls -v name*png) output.gif –  erik 05.04.2015, 23:37

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

2
27.01.2020, 19:30
  • 1
    Добро пожаловать в Unix & Linux! Обычно нам нравится, когда ответы на сайте могут стоять самостоятельно - Ссылки являются большими, но если та ссылка когда-нибудь повреждается, ответ должен иметь достаточно информации, чтобы все еще быть полезным. Полагайте, что редактирование Вашего ответа включает больше детали. Посмотрите, что FAQ для большего количества информации –  slm♦ 18.04.2013, 23:20

По пункту 2

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

-1
27.01.2020, 19:30

ffmeg важные параметры 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
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 кадров в секунду на входных изображениях(ffmpegне могут знать иначе, поскольку нет данных о частоте кадров в изображениях, как в видеоформатах ), выберите одно из каждых 4 изображений, чтобы уменьшить размер(4 == 60 / 15)
  • -vf scale=512:-1:установите ширину и высоту пропорционально, обычно для уменьшения размера и экономии места

См. также:

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

13
27.01.2020, 19:30

Теги

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