Tworzenie animacji GIF z plików PNG

83

Czy istnieje narzędzie do tworzenia gifanimacji z zestawu pngplików?

Próbowałem convertpolecenia z pakietu ImageMagick , ale to nie zawsze się udaje. Mam też kilka problemów z tym:

  1. Nie umiem powiedzieć, jaki jest postęp.
  2. Bez względu na to, co spróbuję, -delayflaga nie zmienia częstotliwości klatek animacji gif.
  3. convertokreśla kolejność klatek na podstawie kolejności alfabetycznej nazw plików. Oznacza to, że name500.pngzostaną umieszczone zaraz po name50.pngtym, jak name450.pngmogę to naprawić, dodając 0, ale to denerwujące.
Yotam
źródło
[Wiadomości] Ubuntu Stackexchange i Unix Stackexchange nakładają się w znacznym stopniu. Próbowałem tutaj skategoryzować niektóre wątki .
hhh
Jeśli chodzi o pozycję 3., nadal możesz używać convertpo posortowaniu plików. Prawdopodobnie coś takiego działafiles=$(ls name*png | sort -n -tname -k1); convert $files animation.gif
altroware
Dla punktu 1: konwersja ma -monitorparametr, który śledzi proces
Curlew,

Odpowiedzi:

50

Nowsze wersje ffmpeg nie mają -sameq ( patrz faq ), ale mają obsługę GIF.

ffmpeg -i %03d.png output.gif

Gdzie% 03d jest identyfikatorem ramki w postaci 3 cyfr.

Możesz także spróbować ffmpegutworzyć film z sekwencji obrazów, a następnie przekonwertować film na animację GIF (ponownie używając 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
nano
źródło
10
Ta instrukcja jest nieaktualna.
highmaintenance
3
Ta sameqopcja nie jest już dostępna. Ponadto, dla mnie, to zastępuje oryginalne pliki obrazów i nie tworzy prawidłowego pliku filmu.
Lode
Po co zostawić -sameqtam kod? Dlaczego w ogóle chciałbyś użyć stratnego formatu wideo ( output.mp4) jako tymczasowego? A jeśli tak, to dlaczego „taka sama jakość” jak na wejściu, zamiast bardzo wysokiej przepływności? Artefaktowanie z tego tylko pogorszy sytuację kodera GIF. Jeśli musiałeś użyć wideo jako tymczasowego, chciałbyś użyć czegoś bezstratnego, takiego jak huffyuv. Lub MJPEG bez transkodowania, po prostu przemodeluj wejściowe jpegi do MJPEG. ( -codec:video copy).
Peter Cordes,
80

convertjest przydatnym narzędziem służącym do tego celu. cddo folderu zawierającego pliki png i uruchom następujące polecenie:

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

Źródło: http://ubuntuforums.org/showthread.php?t=1132058

RobinJ
źródło
5
Pytanie wspomina converti pewne problemy z jego użyciem. Twoja odpowiedź nie dotyczy żadnego z nich.
Mat
3
Od wersji ImageMagick 6.8.7-4 2013-11-02 Q16to działało dla mnie.
Rudy Matela,
7
To działa, ale 10oznacza 10 * 10 ms, więc dość szybko. Opóźnienie a 100wynosi 1 sekundę.
Anne van Rossum
7
użyj opcji -dispose previouslub -dispose 2jeśli pracujesz z przezroczystymi plikami PNG
Hải Phong
4
Uwaga do siebie: ekspansja klamra może być pomocne do określenia listy obrazów jako argumenty, na przykład pic_{0..20..2}.pngrozszerza się pic_0.png, pic_2.pngaż dopic_20.png
Yibo Yang
19

convert„S --delayopcja ma zastosowanie tylko do następnego obrazu w wierszu poleceń. Ustawi więc convert -delay 10 *tylko opóźnienie pierwszej klatki na 0,1 sekundy. Opcja musi zostać powtórzona:

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

Dla potrzeb sortowania, konwersja nie sortuje ramek, tak jak globowanie powłoki *. Jeśli wiesz, że twoje klatki są ponumerowane od 0 do 700, możesz po prostu sam je obliczyć:

convert $(for ((a=0; a<700; a++)); do printf -- "-delay 10 name%s.png " $a; done;) result.gif
BatchyX
źródło
5
Nie spotykam się z tym zachowaniem convert, convert -delay 1000 -loop 0 *.png animation.gifponieważ dodaje 10 sekund opóźnienia między każdym obrazem.
Lode
1
Możesz także użyć polecenia sortuj według wersji ls. To znaczy:convert -delay 1000 $(ls -v name*png) output.gif
erik
7

Aktualizacja:

Użyj convertdla png-to-gif, a następnie użyj animacji gifsicle . Nie jest to rozwiązanie typu „jedna aplikacja do zrobienia wszystkiego”, ale na pewno możliwe do wykonania ze skryptami.


GIMP może tworzyć animowane gify i zapewnia kontrolę nad czasem / opóźnieniem i powtarzaniem itp

gregnotcraig
źródło
3
Wiem o gimpie, ale nie wiem, jak go napisać. Poza tym używanie gimpa do tworzenia animacji jest jak zabicie muchy armatą
Yotam
1
To zły pomysł; jakość będzie okropna, ponieważ każda ramka zostanie skwantowana osobno.
Clément,
2

ImageMagick może generować dobrej jakości animację gif. Sprawdź ten film - http://www.youtube.com/watch?v=OFusYizJ-bA

xyz
źródło
6
Witamy w systemach Unix i Linux! Zasadniczo podoba nam się, aby odpowiedzi na stronie były w stanie samodzielnie działać - linki są świetne, ale jeśli ten link kiedykolwiek się zepsuje, odpowiedź powinna zawierać wystarczającą ilość informacji, aby nadal być pomocna. Proszę rozważyć edycję swojej odpowiedzi, aby zawierała więcej szczegółów. Zobacz FAQ, aby uzyskać więcej informacji.
slm
Cóż za przydatny komentarz powyżej ...
Łukasz
convert -delay 200 -loop 0 *.jpg output.gif
Łukasz
2

ffmeg ważne opcje GIF + dane testowe

Aby uzupełnić tę odpowiedź :

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 \
;

Dane testowe zostały wygenerowane za pomocą: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292

Ważne ffmpegopcje, które chciałem podkreślić to:

  • -patter_type glob: wygodny sposób wybierania zdjęć
  • -framerate 60i -r 15: załóż 60 klatek na sekundę na obrazach wejściowych ( ffmpegnie wiem inaczej, ponieważ nie ma danych FPS w obrazach jak w formatach wideo), wybierz jeden na 4 obrazy, więc zmniejsz rozmiar ( 4 == 60 / 15)
  • -vf scale=512:-1: ustaw szerokość, wysokość proporcjonalnie, zwykle w celu zmniejszenia rozmiaru i zaoszczędzenia miejsca

Zobacz też:

Testowane w Ubuntu 18.10, ffmpeg 4.0.2.

Ciro Santilli
źródło
-1

W odniesieniu do pkt 2

Wersja „display” programu ImageMagick, którą mam (ImageMagick 6.7.2-7 2017-01-12) ignoruje ustawienie liczby klatek za pomocą polecenia konwersji w celu utworzenia animowanego gif. Wypróbuj inny program, aby wyświetlić animowany gif, taki jak Firefox.

użytkownik8388891
źródło