Chcę zrobić .gif
animowany obraz z danego zestawu .jpg
zdjęć.
Wolałbym to zrobić z wiersza poleceń, więc narzędzia wiersza poleceń byłyby bardzo mile widziane.
command-line
image-processing
gif
Maythux
źródło
źródło
Odpowiedzi:
Możesz użyć pakietu ImageMagick . Zainstaluj go za pomocą polecenia:
Teraz możesz utworzyć
gif
z liczby zdjęć (jpg
), używając:źródło
-resize 50%
.-deconstruct
. Odkryłem także, że pamięć ImageMagick jest bardzo głodny, zobacz odniesienia: askubuntu.com/a/1102183/52975convert -delay 0 -loop 0 *.tif myanimated.gif
działało ładnie, na 720 plikach tifAby wypełnić odpowiedź @Maythux:
Aby uniknąć generowania bardzo dużego pliku, możesz użyć
-resize
opcji:W moim przypadku mam 4608x3456 obrazów, a wygenerowany gif był większy niż 300M dla 32 obrazów
lub
Zadbaj o * .jpg
*.jpg
trochę do bani w przypadku wartości liczbowych, możesz wygenerować gif z nieposortowanymi zdjęciami.Ponieważ strzały zostały zrobione bardzo szybko (10 / s), wszystkie mają ten sam czas modyfikacji i nie można
ls -t
na przykład oszukać . Na Ubuntu możeszls -v
zamiast tego użyć czegoś takiego:Sortowanie numeryczne jest jednak dość trudne w systemie Mac OS X. Myślę, że musisz zbudować własny skrypt.
źródło
find
,sort
rozwijanie nawiasów i tak dalej.ls
Narzędzie jest notorycznie nie nadają się do tego typu rzeczy. Użyjfind
. Jest trochę krzywej uczenia się, ale warto.Nie mam wystarczającej reputacji, aby komentować, ale zamiast modyfikować nazwy plików, możesz użyć globowania, aby zachęcić powłokę do rozwijania nazw plików
źródło
ŻYŁKA
Możesz to łatwo zrobić za pomocą GIMP. Najpierw zainstaluj go, jeśli nie jest jeszcze zainstalowany
Tworzenie gif
Z GIMP przejdź do Plik -> Otwórz jako warstwy, aby otworzyć wszystkie pliki PNG na ich własnej warstwie.
Stąd możesz edytować warstwy i po zakończeniu przejść do Plik -> Eksportuj jako . W oknie dialogowym ustaw typ pliku na GIF.
Stamtąd przejdziesz do opcji eksportu GIF. Zaznacz opcję „ Jako animacja ” i ustaw parametry zgodnie z wymaganiami.
źródło
rozwiązanie ffmeg + dane testowe
Począwszy od Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8, zauważyłem, że ffmpeg jest znacznie szybszy i zużywa znacznie mniej pamięci .
Najprostszym poleceniem konwersji jest:
Możesz pobrać moje dane testowe za pomocą:
Dane testowe zostały wygenerowane za pomocą: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292 i zawiera 256 1024x1024 obrazów PNG.
A oto kolejne dane testowe, które możesz teraz wygenerować bezpośrednio w przeglądarce! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718
Ważne
ffmpeg
opcje, które chcę podkreślić, to:-pattern_type glob
: wygodny sposób wybierania zdjęć-framerate 60
: załóż 60 klatek na sekundę na obrazach wejściowych i wyślij ten sam klatkę na sekundę.ffmpeg
nie mogę wiedzieć inaczej, ponieważ nie ma danych FPS w obrazach, tak jak w formatach wideo.256 klatek wejściowych trwa około 4 sekund.
-r 15
: opcjonalny. Wybierz jeden co 4 obrazy, więc zmniejsz rozmiar (4 == 60 / 15
).Dzięki niemu
identify out.gif
mówi, że GIF zawiera tylko 64 ramki.Nadal trwa to 4 sekundy, więc opóźnienie jest zmieniane, aby dopasować.
-vf scale=512:-1
: opcjonalny. Ustaw szerokość, wysokość proporcjonalnie, zwykle w celu zmniejszenia rozmiaru i zaoszczędzenia miejsca.Aby ImageMagick działał, najpierw musiałem zmodyfikować jego limity dysku i pamięci,
/etc/ImageMagick-6/policy.xml
jak wyjaśniono na stronie : https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pagesZobacz też:
Test porównawczy ImageMagick vs ffmpeg
Porównałem polecenia:
Komendy zostały zbudowane tak, aby uzyskać wyniki możliwie jak najbliższe, aby porównanie było ważne:
/usr/bin/time -v
: służy do znalezienia maksymalnego wykorzystania pamięci, jak wyjaśniono na stronie : https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process-deconstruct
: Obrazy GIF mogą zawierać tylko minimalny zmodyfikowany prostokąt z poprzedniej ramki, aby zmniejszyć GIF.ffmpeg
domyślnie oblicza te różnice, ale ImageMagick nie, chyba że-deconstruct
zostanie użyty.Zasadniczo będziesz chciał skorzystać z tej opcji za każdym razem z ImageMagick.
Różnicę możemy zaobserwować za pomocą:
W wersji skompresowanej wszystkie ramki mają mniejsze rozmiary niż początkowa, np .:
W tym przykładzie druga klatka jest tylko
516x516
zamiast pełnej 1024x1024 i jest ustawiona z przesunięciem o252+257
. Dlatego zawiera tylko środkowy trójkąt.Zobacz także: jak zmienić rozmiar animowanego pliku GIF za pomocą ImageMagick?
-delay
: wartość odpowiadająca 60 FPS zffmpeg
. Nie powinno to mieć znaczenia dla wydajności konwersji, ale nie chcę ryzykować.Wyjściowe pliki GIF mają mniej więcej ten sam rozmiar i wyglądają identycznie.
Dostajemy dla ImageMagick:
i dla ffmpeg:
z którego widzimy, że:
Sprzęt testowy: laptop Lenovo ThinkPad P51 , Intel Core i7-7820HQ, 32 GB (16 + 16) DDR4 2400 MHz SODIMM, 512 GB SSD PCIe TLC OPAL2.
źródło
-r
i-v
poleceń, ale wyjściowy gif jest znacznie niższej jakości niż oryginalne pliki png. Jak zachować taką samą jakość gif jak podane pliki png?-framerate 60 -r 60
. Sprawdź wygenerowany plik GIF i obrazy wejściowe za pomocą narzędzi ImageMagick, takich jakidentify
próba ustalenia , co się dzieje.Możesz użyć programu o nazwie konwersja zawartego w pakiecie imagemagick. Jest sterowany z wiersza poleceń, ale bardzo łatwy w użyciu. Zainstaluj go za pośrednictwem centrum oprogramowania lub przejdź do wiersza polecenia i wpisz
Teraz, aby utworzyć .gif.
* Uwaga: powyższy przykład pochodzi bezpośrednio z przykładów magii obrazu
źródło
convert -delay 20 -loop 0 *.png out.gif
tworzy zapętlony plik GIF.