Gifs animados de mosaico


10

¿Hay alguna forma de usar imagemagic / montage para enlosar gifs animados en bucle (entremezclados con los no animados)?

Es decir, quiero concatenar las animaciones en el espacio, no en el tiempo. Me doy cuenta de que la cantidad de cuadros y su duración en la animación podrían hacer imposible combinar perfectamente dos animaciones. Pero estoy de acuerdo con que el programa haga aproximaciones y conjeturas, y extienda / repita cuadros, siempre que todos los cuadros estén allí de alguna manera.

He intentado

convert *.gif -append output.gif

y

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

pero ambos tratan los gifs animados como múltiples no animados individuales.

Supongo que probablemente podría escribir un guión para separar los animados por fotogramas, repetir / extender bucles más cortos según sea necesario para que coincida con el bucle más largo, repetir los gifs no animados para la mayor cantidad de fotogramas en el más largo animado, unir los fotogramas correspondientes en marcos grandes individuales con -append, y luego combine esos marcos grandes en un gif grande. Pero no quiero reinventar la rueda si esto ya es posible mediante algún comando simple.

Por supuesto, estoy abierto a otras opciones gratuitas además de imagemagick.



2
Voy a tomar eso porque probablemente no fue intencionado; como un comentario serio Sí, quiero mosaico de GIF. Pero permanentemente, no en HTML. Gracias por el enlace. Guardaré ese GIF en particular para su uso posterior.
tsbertalan

1
@tsbertalan ¿Finalmente te diste cuenta de esto?
Seb Barre

Respuestas:


1

Parece que desea hacer coincidir varias animaciones a lo largo del tiempo, pero eso requerirá un programa para leer cada fotograma y su retraso, luego emitirá ese fotograma con cierta frecuencia periódica hasta que se cumpla el retraso. por ejemplo: 1 fotograma, retraso de 1 segundo, y su 'frecuencia' es de 100 ms, por lo que querrá escribir 10 fotogramas a 100 ms ¿Y luego convertido a un montaje lineal?

Eso necesitaría un programa o un script fuerte para realizar ese tipo de procesamiento, y tendría que definir su 'frecuencia' (100ms aquí).

Pero esto funciona bien: (gifsicle es un paquete, el montaje es parte del paquete imagemagick)

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

(línea interrumpida para facilitar la lectura)

La primera línea separa el gif entrante en cuadros individuales (para stdout), pero con las capas rellenas. inicialmente, sin la opción --unoptimize, daría el primer cuadro, pero los cuadros siguientes solo contenían lo que cambiaba cada vez. Hecho para montajes extraños!

La segunda línea construye la salida lineal, toma cada imagen de cuadro (de stdin) y las organiza en el orden que especifique. 'x1' para organizarlos a lo largo de una línea horizontal.

Puede reemplazar el nombre de archivo único (cool_animation.gif) con varios, o incluso un comodín * .gif.

Sin embargo, no estoy seguro de que esto sea lo que estás buscando.


Cuando se modifica gifsicle --colors=255 DATA.gif | gifsicle --unoptimize | montage -tile x1 - linear_frames.pngpara la imagen de prueba de Ƭᴇcʜιᴇ007, esto me da imgur.com/a/Likr9 ; No es exactamente lo que estoy buscando. No recuerdo el propósito original; Supongo que probablemente solo escribí un guión para explicarlo explícitamente.
tsbertalan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.