У меня есть серия изображений, из которых я хочу создать видео. В идеале я мог бы указать длительность кадра для каждого кадра, но фиксированная частота кадров тоже подойдет. Я делаю это в wxPython, так что я могу рендерить в wxDC или я могу сохранить изображения в файлы, такие как PNG. Есть ли библиотека Python, которая позволит мне создавать видео (AVI, MPG и т. Д.) Или анимированный GIF из этих кадров?
Изменить: я уже пробовал PIL, и это не похоже на работу. Может кто-то исправить меня с этим выводом или предложить другой инструментарий? Эта ссылка, кажется, подтверждает мое заключение относительно PIL: http://www.somethinkodd.com/oddthinking/2005/12/06/python-imaging-library-pil-and-animated-gifs/
источник
imageio in anaconda
урожайностьTrue
, ууу!Ну, теперь я использую ImageMagick. Я сохраняю свои кадры в виде файлов PNG, а затем запускаю ImageMagick convert.exe из Python для создания анимированного GIF-файла. Хорошая вещь об этом подходе - я могу указать длительность кадра для каждого кадра отдельно. К сожалению, это зависит от установки ImageMagick на машине. У них есть оболочка Python, но это выглядит довольно дрянно и не поддерживается. Все еще открыты для других предложений.
источник
convert -delay 20 -loop 0 *jpg animated.gif
convert -delay 20 -resize 300x200 -loop 0 *jpg animated.gif
По состоянию на июнь 2009 года в первоначально цитируемом сообщении в блоге появился метод создания анимированных GIF-файлов в комментариях . Загрузите скрипт images2gif.py (ранее images2gif.py , обновление любезно предоставлено @geographika).
Затем, чтобы обратить кадры в GIF, например:
источник
pip install visvis
, затем в вашем скриптеfrom visvis.vvmovie.images2gif import writeGif
.Вот как вы делаете это, используя только PIL (установите с :)
pip install Pillow
:источник
x = [a, b, c]
о*x
которой можно думать какa, b, c
(без заключающих в скобки). В вызовах функций они являются синонимами:f(*x) == f(a, b, c)
. При распаковке кортежей это особенно полезно в тех случаях, когда вы хотите разделить итерируемое на голову (первый элемент) и хвост (остальное), что я и делаю в этом примере.Я использовал images2gif.py, который был прост в использовании. Это, казалось, удвоило размер файла, хотя ..
26 PNG-файлов размером 110 КБ, я ожидал 26 * 110 КБ = 2860 КБ, но my_gif.GIF был 5,7 МБ
Кроме того, потому что GIF был 8-битным, хорошие png стали немного размытыми в GIF
Вот код, который я использовал:
Вот 3 из 26 кадров:
Сжатие изображения уменьшило размер:
источник
fp.write(globalPalette) TypeError: must be string or buffer, not list
Чтобы создать видео, вы можете использовать OpenCV ,
источник
Я наткнулся на этот пост, и ни одно из решений не сработало, так что вот мое решение, которое работает
Проблемы с другими решениями до сих пор:
1) Нет явного решения относительно того, как изменяется продолжительность
2) Нет решения для итераций каталога не по порядку, что важно для GIF
3) Нет объяснения того, как установить imageio для Python 3
установить imageio так: python3 -m pip установить imageio
Примечание: вам нужно убедиться, что ваши кадры имеют какой-то индекс в имени файла, чтобы их можно было отсортировать, иначе у вас не будет возможности узнать, где начинается или заканчивается GIF
источник
sort
может привести к неожиданным результатам, если ваша схема нумерации не содержит начальных нулей. Кроме того, почему вы использовали карту вместо простого понимания списка?filenames.append(os.path.join(path, filename))
images = [imageio.imread(f) for f in filenames]
чище, быстрее и питоннее.Как сказал Уоррен в прошлом году , это старый вопрос. Поскольку люди все еще просматривают страницу, я бы хотел перенаправить их на более современное решение. Как сказал здесь Блакев , на github есть пример Pillow .
Примечание. Этот пример устарел (
gifmaker
это не импортируемый модуль, а только скрипт). Подушка имеет GifImagePlugin (источник которого находится на GitHub ), но документ по ImageSequence, похоже, указывает на ограниченную поддержку (только чтение)источник
Это не библиотека Python, но Mencoder может сделать это: Кодирование из нескольких входных файлов изображений . Вы можете выполнить mencoder из python следующим образом:
источник
Старый вопрос, много хороших ответов, но еще может быть интерес к другой альтернативе ...
numpngw
Модуль , который я недавно поставил на GitHub ( https://github.com/WarrenWeckesser/numpngw ) можно записать анимированные файлы PNG из Numpy массивов. ( Обновление :numpngw
теперь на pypi: https://pypi.python.org/pypi/numpngw .)Например, этот скрипт:
создает:
Вам понадобится браузер, который поддерживает анимированный PNG (напрямую или с плагином), чтобы увидеть анимацию.
источник
Как упомянул один из участников, imageio - отличный способ сделать это. imageio также позволяет вам устанавливать частоту кадров, и я фактически написал функцию на Python, которая позволяет вам удерживать окончательный кадр. Я использую эту функцию для научной анимации, где циклы полезны, а немедленный перезапуск - нет. Вот ссылка и функция:
Как сделать GIF с использованием Python
источник
Вы пробовали PyMedia ? Я не уверен на 100%, но, похоже, этот учебный пример нацелен на вашу проблему.
источник
С windows7, python2.7, opencv 3.0 у меня работает следующее:
источник
Самая простая вещь, которая заставляет это работать для меня, это вызов команды оболочки в Python.
Если ваши изображения хранятся, например, dummy_image_1.png, dummy_image_2.png ... dummy_image_N.png, то вы можете использовать функцию:
Просто выполните:
Это создаст ваш GIF-файл my_output.gif.
источник
Задача может быть выполнена путем запуска двухстрочного скрипта Python из той же папки, что и последовательность файлов изображений. Для файлов в формате png скрипт -
источник
Я искал однострочный код и нашел следующее, чтобы работать для моего приложения. Вот что я сделал:
Первый шаг: установите ImageMagick по ссылке ниже
https://www.imagemagick.org/script/download.php
Второй шаг: наведите строку cmd на папку, в которой находятся изображения (в моем случае формат .png)
Третий шаг: введите следующую команду
Спасибо FogleBird за идею!
источник
Я просто попробовал следующее и был очень полезен:
Сначала загрузите библиотеки
Figtodat
иimages2gif
в свой локальный каталог.Во-вторых, собрать фигуры в массив и преобразовать их в анимированный GIF:
источник
Я наткнулся на модуль ImageSequence PIL , который предлагает лучшее (и более стандартное) GIF-анимирование. На этот раз я также использую метод Tk after () , который лучше, чем time.sleep () .
источник
Простая функция, которая делает GIF:
источник
Я понимаю, что вы спрашивали о преобразовании изображений в GIF; однако, если исходный формат MP4, вы можете использовать FFmpeg :
источник
Это действительно невероятно ... Все предлагают какой-то специальный пакет для воспроизведения анимированного GIF-файла, на данный момент это можно сделать с помощью Tkinter и классического модуля PIL!
Вот мой собственный метод анимации GIF (я создал его недавно). Очень просто:
Вы можете установить свои собственные средства, чтобы остановить анимацию. Дайте мне знать, если вы хотите получить полную версию с кнопками воспроизведения / паузы / выхода.
Примечание: я не уверен, считываются ли последовательные кадры из памяти или из файла (диска). Во втором случае было бы более эффективно, если бы они все читали одновременно и сохраняли в массив (список). (Мне не так интересно это выяснять! :)
источник
sleep
в основном потоке графического интерфейса. Вы можете использоватьafter
метод для периодического вызова функции.tk.after()
себя. Но здесь мне нужно было сделать код максимально простым. Тот, кто использует этот метод анимации GIF, может применить свою собственную функцию задержки.