Mam serię zdjęć, z których chcę utworzyć film. Idealnie mógłbym określić czas trwania ramki dla każdej ramki, ale stała częstotliwość klatek też byłaby w porządku. Robię to w wxPython, więc mogę renderować do wxDC lub zapisywać obrazy do plików, takich jak PNG. Czy istnieje biblioteka Python, która pozwala mi tworzyć wideo (AVI, MPG itp.) Lub animowany GIF z tych ramek?
Edycja: Próbowałem już PIL i wydaje się, że nie działa. Czy ktoś może mnie poprawić tym wnioskiem lub zasugerować inny zestaw narzędzi? Ten link wydaje się potwierdzać mój wniosek dotyczący PIL: http://www.somethinkodd.com/oddthinking/2005/12/06/python-imaging-library-pil-and-animated-gifs/
źródło
imageio in anaconda
plonyTrue
, tak!Teraz używam ImageMagick. Zapisuję swoje ramki jako pliki PNG, a następnie wywołuję program.exe.exe z Python ImageMagick, aby utworzyć animowany plik GIF. Zaletą tego podejścia jest to, że mogę określić czas trwania klatki indywidualnie dla każdej klatki. Niestety zależy to od zainstalowania ImageMagick na komputerze. Mają otoki Pythona, ale wygląda to dość kiepsko i nie jest obsługiwane. Nadal otwarte na inne sugestie.
źródło
convert -delay 20 -loop 0 *jpg animated.gif
convert -delay 20 -resize 300x200 -loop 0 *jpg animated.gif
W czerwcu 2009 r. Pierwotnie cytowany post na blogu zawiera metodę tworzenia animowanych plików GIF w komentarzach . Pobierz skrypt images2gif.py (wcześniej images2gif.py , aktualizacja dzięki uprzejmości @geographika).
Następnie, aby odwrócić ramki w gifie, na przykład:
źródło
pip install visvis
Następnie w swoim skrypciefrom visvis.vvmovie.images2gif import writeGif
.Oto, jak to zrobić, używając tylko PIL (zainstaluj za pomocą :)
pip install Pillow
:źródło
x = [a, b, c]
do*x
którego można pomyśleć jakoa, b, c
(bez załączających nawiasów). W wywołań funkcji są synonimami:f(*x) == f(a, b, c)
. W rozpakowywaniu krotek jest to szczególnie przydatne w przypadkach, gdy chcesz podzielić iterowalną głowę (pierwszy element) i ogon (reszta), co robię w tym przykładzie.Użyłem images2gif.py, który był łatwy w użyciu. Wydaje się, że podwoił rozmiar pliku ...
26 plików PNG 110 kb, spodziewałem się 26 * 110 kb = 2860 kb, ale my_gif.GIF wynosił 5,7 mb
Również dlatego, że GIF był 8-bitowy, ładne png stały się trochę rozmyte w GIF
Oto kod, którego użyłem:
Oto 3 z 26 ramek:
zmniejszenie zdjęć zmniejszyło rozmiar:
źródło
fp.write(globalPalette) TypeError: must be string or buffer, not list
Aby utworzyć wideo, możesz użyć opencv ,
źródło
Natrafiłem na ten post i żadne z rozwiązań nie zadziałało, więc oto moje rozwiązanie, które działa
Dotychczasowe problemy z innymi rozwiązaniami:
1) Brak jednoznacznego rozwiązania dotyczącego sposobu modyfikacji czasu trwania
2) Brak rozwiązania dla iteracji katalogu poza kolejnością, co jest niezbędne w przypadku plików GIF
3) Brak wyjaśnienia, jak zainstalować imageio dla Pythona 3
zainstaluj imageio w ten sposób: python3 -m pip zainstaluj imageio
Uwaga: musisz upewnić się, że ramki mają indeks w nazwie pliku, aby można je było posortować, w przeciwnym razie nie będziesz w stanie wiedzieć, gdzie zaczyna się lub kończy GIF
źródło
sort
może przynieść nieoczekiwane wyniki, jeśli Twój schemat numerowania nie zawiera zer wiodących. A także dlaczego użyłeś mapy zamiast prostego zrozumienia listy?filenames.append(os.path.join(path, filename))
images = [imageio.imread(f) for f in filenames]
jest czystszy, szybszy i bardziej pythoniczny.Jak powiedział Warren w zeszłym roku , to stare pytanie. Ponieważ ludzie nadal wydają się przeglądać stronę, chciałbym przekierować ich do bardziej nowoczesnego rozwiązania. Jak powiedział tu Blakev , na github istnieje przykład poduszki .
Uwaga: ten przykład jest nieaktualny (
gifmaker
nie jest modułem do importowania, tylko skrypt). Poduszka ma GifImagePlugin (którego źródłem jest GitHub ), ale dokument na ImageSequence wydaje się wskazywać na ograniczone wsparcie (tylko do odczytu)źródło
To nie jest biblioteka Pythona, ale mencoder może to zrobić: Kodowanie z wielu wejściowych plików obrazów . Możesz uruchomić mencoder z Pythona w następujący sposób:
źródło
Stare pytanie, wiele dobrych odpowiedzi, ale wciąż może być zainteresowanie inną alternatywą ...
numpngw
Moduł, który niedawno wystawiony na github ( https://github.com/WarrenWeckesser/numpngw ) można napisać animowanych plików PNG z NumPy tablic. ( Aktualizacja :numpngw
jest teraz na pypi: https://pypi.python.org/pypi/numpngw .)Na przykład ten skrypt:
tworzy:
Aby zobaczyć animację, potrzebujesz przeglądarki obsługującej animowany PNG (bezpośrednio lub za pomocą wtyczki).
źródło
Jak wspomniał jeden z członków, imageio to świetny sposób na zrobienie tego. imageio pozwala również ustawić liczbę klatek na sekundę, a tak naprawdę napisałem funkcję w Pythonie, która pozwala ci zatrzymać ostatnią klatkę. Używam tej funkcji do animacji naukowych, w których zapętlenie jest przydatne, ale natychmiastowe ponowne uruchomienie nie. Oto link i funkcja:
Jak zrobić GIF za pomocą Pythona
źródło
Czy próbowałeś PyMedia ? Nie jestem w 100% pewien, ale wygląda na to, że ten przykład samouczka dotyczy twojego problemu.
źródło
W systemie Windows7, python2.7, opencv 3.0, dla mnie działa:
źródło
Najłatwiejszą rzeczą, która sprawia, że to działa, jest wywołanie polecenia powłoki w Pythonie.
Jeśli przechowywane są takie obrazy, jak dummy_image_1.png, dummy_image_2.png ... dummy_image_N.png, możesz użyć funkcji:
Po prostu wykonaj:
Spowoduje to utworzenie pliku gif my_output.gif.
źródło
Zadanie można wykonać, uruchamiając dwuwierszowy skrypt Pythona z tego samego folderu, co sekwencja plików obrazów. W przypadku plików sformatowanych png skrypt to -
źródło
Szukałem kodu jednoliniowego i znalazłem następujące elementy do mojej aplikacji. Oto co zrobiłem:
Pierwszy krok: zainstaluj ImageMagick z linku poniżej
https://www.imagemagick.org/script/download.php
Drugi krok: skieruj linię cmd do folderu, w którym znajdują się obrazy (w moim przypadku .png)
Trzeci krok: wpisz następujące polecenie
Dzięki FogleBird za pomysł!
źródło
Właśnie wypróbowałem następujące i bardzo się przydałem:
Najpierw pobierz biblioteki
Figtodat
iimages2gif
do lokalnego katalogu.Po drugie Zbierz figurki z tablicy i przekonwertuj je na animowany gif:
źródło
Natknąłem się na moduł ImageSequence firmy PIL , który oferuje lepszą (i bardziej standardową) animację GIF. Tym razem używam również metody after () Tk , co jest lepsze niż time.sleep () .
źródło
Prosta funkcja tworząca GIF-y:
źródło
Rozumiem, że pytałeś o konwersję obrazów do gif; jednak jeśli oryginalnym formatem jest MP4, możesz użyć FFmpeg :
źródło
To naprawdę niewiarygodne ... Wszyscy proponują teraz specjalny pakiet do gry w animowany GIF, który można teraz zrobić za pomocą Tkintera i klasycznego modułu PIL!
Oto moja własna metoda animacji GIF (stworzyłem jakiś czas temu). Bardzo prosty:
Możesz ustawić własne środki, aby zatrzymać animację. Daj mi znać, jeśli chcesz uzyskać pełną wersję z przyciskami odtwarzania / pauzy / wyjścia.
Uwaga: Nie jestem pewien, czy kolejne klatki są odczytywane z pamięci czy z pliku (dysku). W drugim przypadku byłoby bardziej wydajne, gdyby wszyscy czytali jednocześnie i zapisywali w tablicy (liście). (Nie jestem tak zainteresowany, aby się dowiedzieć! :)
źródło
sleep
w głównym wątku GUI nie jest dobrym pomysłem . Możesz użyć tejafter
metody do okresowego wywoływania funkcji.tk.after()
siebie. Ale tutaj musiałem uczynić kod tak prostym, jak to możliwe. Każdy, kto korzysta z tej metody animacji GIF, może zastosować własną funkcję opóźnienia.