Создать анимированный GIF из набора изображений JPEG - PullRequest
29 голосов
/ 11 сентября 2010

Мне нужно что-то, что можно написать в Windows 7. Это изображение будет использоваться в баннерах.

Ответы [ 6 ]

67 голосов
/ 09 апреля 2015

Ответ Саймона П Стивенса почти привел меня туда:

ffmpeg -f image2 -i image%d.jpg video.avi
ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif

Давайте посмотрим, сможем ли мы разобраться с этим.

Переход через avi не нужен.-pix_fmt из rgb24 недопустимо, а опция -loop_output предотвращает зацикливание, что мне не нужно.Мы получаем:

ffmpeg -f image2 -i image%d.jpg out.gif

Мои входные изображения помечены нумерованным 3-значным числом, и у меня их 30 (image_001.jpg, image_002.jpg, ...), поэтому мне нужноисправьте спецификатор формата

ffmpeg -f image2 -i image_%003d.jpg out.gif

Мои входные изображения с моей камеры телефона, они слишком большие!Мне нужно уменьшить их.

ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299 out.gif

Мне также нужно повернуть их на 90 градусов по часовой стрелке

ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif

Этот GIF будет играть с нулевой задержкой между кадрами, что, вероятно, не то, что мыхочу.Укажите частоту кадров входных изображений

ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif

Изображение слишком большое, поэтому я обрежу небо на 100 пикселей.Транспонирование делает это непростым делом, я использую значения x и y после поворота:

ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1,crop=299,431,0,100 out.gif

Окончательный результат - я могу поделиться с миром удивительным выражением лица моего приятеля:

Example of an animated gif created with ffmpeg

45 голосов
/ 11 сентября 2010

Вы можете сделать это с помощью ffmpeg

Сначала преобразуйте изображения в видео:

ffmpeg -f image2 -i image%d.jpg video.avi

(Это преобразует изображения из текущего каталога (с именем image1.jpg, image2.jpg ...) в видеофайл с именем video.avi.)

Затем преобразовать AVI в GIF:

ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif

Вы можете получить двоичные файлы для ffmpeg здесь .


Вы можете сделать то же самое с mplayer . См. Кодирование из нескольких входных файлов изображений .

Я думаю, что командная строка будет выглядеть примерно так:

mplayer mf://*.jpg -mf w=800:h=600:type=jpg -vf scale=160:120 -vo gif89a:fps=3:output=out.gif

(где 800 и 600 - ширина и высота вашего источника, а 160 и 120 - ширина и высота цели .out.gif - имя целевого файла)


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

35 голосов
/ 14 июля 2013

С ImageMagick:

convert *.png a.gif
11 голосов
/ 08 августа 2012

С ffmpeg до .avi и .avi до .gif сработало, но единственное, что нужно отметить, это то, что ваши изображенияДолжен быть назван в порядке увеличения нумерации для работы, без пробелов.Я подготовил быстрый скрипт на Python, чтобы переименовать все мои изображения соответственно, чтобы этот рецепт ffmpeg работал:

import os

files = [ f for f in os.listdir('.') if os.path.isfile(os.path.join('.',f)) and f.endswith('.jpg') ]
for i, file in enumerate(sorted(files)):
    os.rename(file, 'image%03d.jpg' % i)

И затем я наткнулся на гораздо более простой подход, чем ffmpeg для выполнения преобразования, которое просто использует инструмент преобразования командной строки ImageMagick, подобный этому

convert image%03d.jpg[0-198] animated_gif.gif

Не намного проще, чем эти люди.

Суть здесь: https://gist.github.com/3289840

4 голосов
/ 15 ноября 2017

Основываясь на ответах Саймона П Стивенса и dwurf, я пришел к этому упрощенному решению:

ffmpeg -f image2 -framerate 1 -i image%d.jpg video.gif

Это дает скорость 1 секунда на изображение. Отрегулируйте значение framerate в соответствии с вашими потребностями.

2 голосов
/ 16 мая 2018

Я просто хотел бы добавить к ответу dwurf , что это сгенерирует gif со стандартной палитрой из 256 цветов, которая не выглядит очень визуально приятной.

Я нашел два сообщений в блоге и адаптировал их к моим потребностям, чтобы улучшить визуальное качество с помощью настраиваемой палитры для анимации:

Создатьцветовая палитра:

ffmpeg -f image2 -i image%d.jpg -vf scale=900:-1:sws_dither=ed,palettegen palette.png

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

ffmpeg.exe -f image2 -framerate 1.2 -i image%d.jpg video.flv

Теперь преобразуйте сгенерированное видео с сгенерированной палитрой в более красивый рисунок:

ffmpeg.exe -i video.flv -i palette.png -filter_complex "fps=1.2,scale=900:-1:flags=lanczos[x];[x][1:v]paletteuse" video.gif
...