Мне нужно что-то, что может быть написано на окнах 7. Это изображение будет использоваться в баннерах.
Создание анимированного gif из набора jpeg-изображений
Ответ 1
Вы можете сделать это с помощью 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, если бы посмотрели.
Ответ 2
ответ Саймона П Стивенса почти заставил меня:
ffmpeg -f image2 -i image%d.jpg video.avi
ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif
Посмотрим, сможем ли мы это сделать.
Пройти через avi не нужно. A -pix_fmt
of 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
Конечный результат - я могу поделиться своим миром удивительным выражением лица с миром:
Ответ 3
С ImageMagick:
convert *.png a.gif
Ответ 4
Работала ffmpeg до .avi и .avi до .gif, но единственное, что нужно отметить заключается в том, что ваши изображения должны быть названы в совершенном числовом порядке для работы без пробелов. Я подготовил быстрый python script, чтобы переименовать все мои изображения соответственно, чтобы этот рецепт 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
Ответ 5
Основываясь на ответах Саймона П Стивенса и dwurf, я придумал это упрощенное решение:
ffmpeg -f image2 -framerate 1 -i image%d.jpg video.gif
Это приводит к скорости 1 секунду на изображение. Отрегулируйте значение framerate
в соответствии с вашими потребностями.