nie mam 2 animowanych GIF-ów o tej samej długości, więc ja po prostu korzystać z dwóch kopii tego jednego:
Spójrzmy na ramkach w tam, z tego:
identify 1.gif
1.gif[0] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[1] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[2] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[3] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[4] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[5] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[6] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[7] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[8] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[9] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[10] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[11] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[12] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[13] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[14] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[15] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[16] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
1.gif[17] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
Mmmm, 18 klatek o różnych rozmiarach, co oznacza, że musimy użyć -coalesce
odbudować częściowych klatek na pełne.
Skopiujmy że i zrobić 2.gif
cp 1.gif 2.gif
Teraz możemy rozdzielić dwa gify na poszczególne klatki, tak:
convert 1.gif -coalesce a-%04d.gif # split frames of 1.gif into a-0001.gif, a-0002.gif etc
convert 2.gif -coalesce b-%04d.gif # split frames of 2.gif into b-0001.gif, b-0002.gif etc
Teraz dołączy do poszczególnych klatek side-by-side :
for f in a-*.gif; do convert $f ${f/a/b} +append $f; done
Pamiętaj, że ${f/a/b}
to bash-ism meanin g "weź wartość f i zamień literę" a "na" b "".
i umieścić je z powrotem razem znowu:
convert -loop 0 -delay 20 a-*.gif result.gif
To wygląda dłużej i mocniej, niż to dlatego starałem się to wszystko wyjaśnić, ale wygląda to tak naprawdę:
convert 1.gif -coalesce a-%04d.gif # separate frames of 1.gif
convert 2.gif -coalesce b-%04d.gif # separate frames of 2.gif
for f in a-*.gif; do convert $f ${f/a/b} +append $f; done # append frames side-by-side
convert -loop 0 -delay 20 a-*.gif result.gif # rejoin frames
Należy pamiętać, że ten kod koncepcyjny, a nie jakość produkcji. Nie usuwa plików tymczasowych, które tworzy, ani nie przenosi czasu międzyramkowego z oryginalnych plików GIF.Jeśli chcesz uzyskać oryginalną liczbę klatek można dostać je w ten sposób i zapisać je do tablicy i karmić opóźnień powrotem do polecenia ponownego animacji na koniec:
identify -format "%f[%s] %T\n" 1.gif
1.gif[0] 8
1.gif[1] 8
1.gif[2] 8
1.gif[3] 8
1.gif[4] 8
1.gif[5] 8
1.gif[6] 8
1.gif[7] 8
1.gif[8] 8
1.gif[9] 8
1.gif[10] 11
1.gif[11] 11
1.gif[12] 11
1.gif[13] 11
1.gif[14] 11
1.gif[15] 11
1.gif[16] 11
1.gif[17] 26
Również może chcesz przekładkę pomiędzy dwoma animacjami, powiedzmy 10 pikseli, co można zrobić, zastępując komendy convert
wewnątrz pętli for
z tego:
convert $f -size 10x xc:none ${f/a/b} +append $f
używam ImageMagick (v7.0.2) i wszystkie z polecenia działają świetnie, z wyjątkiem 'fo r f w a - *. gif; skonwertuj $ f $ {f/a/b} + dopisz $ f; done' Zgodnie z dokumentacją pętli FOR, zmieniłem ją na: 'FOR% f in (a - *. gif); DO konwersji% f% {f/a/b} + dopisz% f; gotowe, ale nadal mam kłopoty. Jakieś sugestie? Dokumentacja na temat pętli FOR, której używam, znajduje się tutaj (http://www.imagemagick.org/Usage/windows/#for_loops), a polecenie dołączania, którego używam, to: (http://www.imagemagick.org/ discourse-server/viewtopic.php? t = 11320) – AaronJPung
'$ {f/a/b}' oznacza * "weź' f' i zamień wszystkie wystąpienia 'a' w nim przez' b' "* i jest specyficzne na 'bash' (w Linuksie). Aby to zrobić, musisz znaleźć sposób Windows-y. –
Dzięki za potwierdzenie tego. Tak, zauważyłem różnicę w składni w stosunku do linków, które dołączyłem. Myślę, że w Windows, $ ->%. Będę na bieżąco. – AaronJPung