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.
źródło
Odpowiedzi:
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)
(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.
źródło
gifsicle --colors=255 DATA.gif | gifsicle --unoptimize | montage -tile x1 - linear_frames.png
obrazu 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ć.