Chcę zrobić .gifanimowany obraz z danego zestawu .jpgzdjęć.
Wolałbym to zrobić z wiersza poleceń, więc narzędzia wiersza poleceń byłyby bardzo mile widziane.
Chcę zrobić .gifanimowany obraz z danego zestawu .jpgzdjęć.
Wolałbym to zrobić z wiersza poleceń, więc narzędzia wiersza poleceń byłyby bardzo mile widziane.
Odpowiedzi:
Możesz użyć pakietu ImageMagick . Zainstaluj go za pomocą polecenia:
sudo apt-get install imagemagick
Teraz możesz utworzyć gifz liczby zdjęć ( jpg), używając:
convert -delay 20 -loop 0 *.jpg myimage.gif
-resize 50%.
-deconstruct. Odkryłem także, że pamięć ImageMagick jest bardzo głodny, zobacz odniesienia: askubuntu.com/a/1102183/52975
convert -delay 0 -loop 0 *.tif myanimated.gifdziałało ładnie, na 720 plikach tif
Aby wypełnić odpowiedź @Maythux:
-resizeopcji:W moim przypadku mam 4608x3456 obrazów, a wygenerowany gif był większy niż 300M dla 32 obrazów
convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif
lub
convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif
*.jpg trochę do bani w przypadku wartości liczbowych, możesz wygenerować gif z nieposortowanymi zdjęciami.
$ ls|cat
21-33-26_1.jpg
21-33-26_10.jpg // <--- this one
21-33-26_2.jpg
21-33-26_3.jpg
21-33-26_4.jpg
21-33-26_5.jpg
21-33-26_6.jpg
21-33-26_7.jpg
21-33-26_8.jpg
21-33-26_9.jpg
21-33-28_1.jpg // <--- should be here
21-33-28_2.jpg
21-33-28_3.jpg
...
Ponieważ strzały zostały zrobione bardzo szybko (10 / s), wszystkie mają ten sam czas modyfikacji i nie można ls -tna przykład oszukać . Na Ubuntu możesz ls -vzamiast tego użyć czegoś takiego:
convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif
Sortowanie numeryczne jest jednak dość trudne w systemie Mac OS X. Myślę, że musisz zbudować własny skrypt.
find, sortrozwijanie nawiasów i tak dalej. lsNarzędzie jest notorycznie nie nadają się do tego typu rzeczy. Użyj find. Jest trochę krzywej uczenia się, ale warto.
Możesz to łatwo zrobić za pomocą GIMP. Najpierw zainstaluj go, jeśli nie jest jeszcze zainstalowany
sudo apt-get install gimp
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.
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:
ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
-r 15 \
-vf scale=512:-1 \
out.gif \
;
Możesz pobrać moje dane testowe za pomocą:
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
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 ffmpegopcje, 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.gifmó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.xmljak wyjaśniono na stronie : https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pages
Zobacz też:
Test porównawczy ImageMagick vs ffmpeg
Porównałem polecenia:
/usr/bin/time -v convert *.png -deconstruct -delay 1.6 out-convert.gif
/usr/bin/time -v ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
out-ffmpeg.gif \
;
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.
ffmpegdomyślnie oblicza te różnice, ale ImageMagick nie, chyba że -deconstructzostanie użyty.
Zasadniczo będziesz chciał skorzystać z tej opcji za każdym razem z ImageMagick.
Różnicę możemy zaobserwować za pomocą:
identify out.gif
W wersji skompresowanej wszystkie ramki mają mniejsze rozmiary niż początkowa, np .:
out.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
W tym przykładzie druga klatka jest tylko 516x516zamiast pełnej 1024x1024 i jest ustawiona z przesunięciem o 252+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 z ffmpeg. 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:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856
i dla ffmpeg:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172
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 i -vpoleceń, 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 jak identifypró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
sudo apt-get install imagemagick
Teraz, aby utworzyć .gif.
convert -delay 100 -size 100x100 xc:SkyBlue \
-page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-loop 0 animation.gif
* Uwaga: powyższy przykład pochodzi bezpośrednio z przykładów magii obrazu
convert -delay 20 -loop 0 *.png out.giftworzy zapętlony plik GIF.