Kafelki animowane gify

10

Czy jest jakiś sposób na użycie imagemagic / montażu do układania animowanych gifów w kafelkach (mieszanych z nieanimowanymi)?

To znaczy, chcę połączyć animacje w przestrzeni, a nie w czasie. Zdaję sobie sprawę, że liczba klatek i ich czas trwania w animacji może uniemożliwić staranne połączenie dwóch animacji. Ale nie mam nic przeciwko temu programowi, który przybliża i zgaduje, a także rozszerza / powtarza klatki, o ile wszystkie klatki są w jakiś sposób.

próbowałem

convert *.gif -append output.gif

i

montage *.gif -mode concatenate -tile x1 output.gif

ale oba traktują animowane gify jako wiele pojedynczych nie animowanych.

Podejrzewam, że prawdopodobnie mógłbym napisać skrypt rozbijający animowane klatki, powtarzać / przedłużać krótsze pętle, aby dopasować do najdłuższej pętli, powtarzać nieanimowane gify dla tylu klatek, które są w najdłuższej animowanej, zszyć odpowiednie klatki w pojedyncze duże ramki z -append, a następnie połącz te duże ramki w jeden duży gif. Ale nie chcę na nowo wymyślać koła, jeśli jest to już możliwe za pomocą prostego polecenia.

Oczywiście jestem otwarty na inne bezpłatne opcje oprócz imagemagick.

tsbertalan
źródło
how-to.ytmnd.com
ᴇcʜιᴇ007
2
Przyjmę to, ponieważ prawdopodobnie nie było to zamierzone; jako poważny komentarz. Tak, chcę kafelki GIF. Ale na stałe, nie w HTML. Dziękuję za link. Zapisam ten konkretny plik GIF do późniejszego wykorzystania.
tsbertalan
1
@tsbertalan Czy w końcu to rozgryzłeś?
Seb Barre

Odpowiedzi:

1

Wygląda na to, że chcesz dopasować kilka animacji w czasie, ale zajmie to programowi odczytanie każdej klatki i jej opóźnienia, a następnie wysyłanie tej klatki z pewną częstotliwością, aż do osiągnięcia opóźnienia. np .: 1 klatka, opóźnienie 1 sekundy, a twoja „częstotliwość” wynosi 100 ms, więc chcesz zapisać 10 klatek przy 100 ms? A następnie przekształcony w montaż liniowy?

Do wykonania tego rodzaju przetwarzania potrzebny byłby program lub duży skrypt i trzeba by było zdefiniować „częstotliwość” (tutaj 100 ms).

Ale to działa dobrze: (gifsicle to pakiet, montaż jest częścią pakietu imagemagick)

gifsicle --unoptimize cool_animation.gif | \
  montage -tile x1 - linear_frames.png

(linia przerywana dla czytelności)

Pierwsza linia rozdziela przychodzący gif na pojedyncze klatki (na standardowe wyjście), ale z wypełnionymi warstwami. początkowo, bez opcji --unoptimize, dawałby pierwszą ramkę, ale kolejne ramki zawierały tylko to, co zmieniało się za każdym razem. Stworzone do dziwnych montaży!

Druga linia buduje wyjście liniowe, pobierając każdy obraz klatki (od standardowego wejścia) i układając je w określonej kolejności. „x1”, aby ustawić je wzdłuż linii poziomej.

Możesz zastąpić pojedynczą nazwę pliku (cool_animation.gif) kilkoma, a nawet znakiem wieloznacznym * .gif.

Nie jestem jednak pewien, czy tego właśnie szukasz.

lornix
źródło
Po zmodyfikowaniu do gifsicle --colors=255 DATA.gif | gifsicle --unoptimize | montage -tile x1 - linear_frames.pngobrazu testowego Ƭᴇcʜιᴇ007 daje mi to imgur.com/a/Likr9 ; nie dokładnie to, czego szukam. Nie pamiętam pierwotnego celu; Przypuszczam, że prawdopodobnie właśnie napisałem skrypt, aby to wszystko jawnie rozbić.
tsbertalan