Chcę zmienić rozmiar takiego animowanego pliku GIF do.gif
Jeśli to zrobię convert do.gif -resize 24x24\! do-24.gif
, rozmiar zostanie zmieniony w do-24.gif, ale nie jest animowany
Jak zmienić rozmiar we właściwy sposób, aby uzyskać tę samą animację?
imagemagick
Zuba
źródło
źródło
-coalesce
„tworzy pełny widok animacji w każdym punkcie, trochę jak prawdziwy pasek filmowy, a nie sekwencję animacji. Taka sekwencja, znana jako Animacja koalescencyjna, jest o wiele łatwiejsza do studiowania, edycji, modyfikacji i ponownej optymalizacji”.gifsicle --resize 24x24 > do-24.gif
też do tego-coalesce
+-deconstruct
Następnie
-coalesce
prawdopodobnie chcesz dodać-deconstruct
:Podstawową przyczyną problemu jest prawidłowe zminimalizowanie wejściowego pliku GIF: GIF pozwala, aby następna ramka była tylko zmodyfikowanym prostokątem z poprzedniego z przesunięciem.
-coalesce
następnie rozszerza wszystkie ramki do oryginalnego rozmiaru, co powoduje zmianę rozmiaru, ale nie kompresuje ponownie ramek, ponieważ obraz wejściowy-deconstruct
jest potrzebny!Wykorzystując dane testowe z tej odpowiedzi: Jak utworzyć animowany gif ze zdjęć (najlepiej z linii poleceń)? widzimy to wyraźnie dzięki
identify
:out.gif
out-coalesce.gif
out-deconstruct.gif
Po pierwsze, widzimy, jak wprowadzić plik,
out-convert.gif
w rzeczywistości został skompresowany, ponieważ klatka 2 ma tylko516x516
przesunięcie252+257
, podczas gdy klatka 1 jest w pełnym rozmiarze1024x1024
.Następnie, jeśli porównamy trzy konwersje:
out.gif
: Wszystkie ramki są256x256
większe lub większe i wynoszą około 5 Mb, TODO dlaczego?Nieprawidłowy wizualnie, ponieważ te przybliżone
256x256
klatki mają niezerowe przesunięcie, np.125+128
Dla klatki 2!out-coalesce.gif
: wszystkie ramki256x256
mają prawidłowe przesunięcie0+0
.Dane wyjściowe wyglądają na poprawne wizualnie, ale rozmiar pliku wyjściowego wynosi 2,0 MiB, czyli więcej niż
out-deconstruct.gif
out-deconstruct.gif
: ramki skompresowane, końcowy rozmiar wyjściowy 1,9 MiB.Nie jest znacznie mniejszy niż
out-coalesce.gif
, ale myślę, że dzieje się tak tylko dlatego, że czarna ziemia bardzo dobrze się kompresuje i ogólnie może być bardzo znacząca.ffmpeg i gifsicle
Wypróbowałem również następujące polecenia:
i oba wytworzyły jeszcze mniejszy poprawnie wyglądający wynik 1,5 MiB.
Zobacz także: Jak utworzyć animowany gif ze zdjęć (najlepiej z wiersza poleceń)?
DO ZROBIENIA: dlaczego mogą być mniejsze niż
convert
? Czy po prostu wybierają lepsze, bardziej minimalne prostokąty różnicowe, czy coś innego?Testowane w Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8.
źródło
Szukałem rozwiązania imagemagick, ponieważ go znam, ale ostatecznie skorzystałem z sugestii @ sam
gifsicle
. Zrobił to, co chciałem, bez kłopotów.Mogę zoptymalizować wynikowy rozmiar pliku na wiele sposobów, ale po prostu zmniejszyłem rozmiar i liczbę kolorów. Działa jak urok:
źródło