Respuestas:
primer intento:
convert do.gif -coalesce temporary.gif
entonces
convert -size <original size> temporary.gif -resize 24x24 smaller.gif
gifsicle --resize 24x24 > do-24.gif
puede a esto también
Estaba buscando una solución de imagen mágica, ya que estoy familiarizado con ella, pero al final fui con la sugerencia de @ sam de gifsicle
. Hizo justo lo que quería, sin problemas.
Puede optimizar el tamaño del archivo resultante de muchas maneras, pero solo reduje el tamaño y reduje el número de colores. Trabajado como un encanto:
gifsicle --resize 48x48 --colors 16 original.gif > smaller.gif
-coalesce
+ -deconstruct
Después -coalesce
, es probable que desee agregar un -deconstruct
:
convert in.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
La causa raíz del problema es que su GIF de entrada se minimizó correctamente: GIF permite que el siguiente cuadro sea solo el rectángulo modificado del anterior en un desplazamiento.
-coalesce
luego expande todos los cuadros al tamaño original, lo que hace que el cambio de tamaño funcione, pero no vuelve a comprimir los cuadros nuevamente como su imagen de entrada: ¡ -deconstruct
es necesario para eso!
Usando los datos de prueba de esta respuesta: ¿Cómo creo un gif animado a partir de imágenes fijas (preferiblemente con la línea de comando)? Podemos ver esto claramente con identify
:
$ identify out-convert.gif | head -n 3
out-convert.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.020u 0:00.019
out-convert.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
out-convert.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
$ convert out-convert.gif -resize 256x out.gif
$ identify out.gif | head -n 3
out.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[1] GIF 256x256 256x256+125+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[2] GIF 256x258 256x256+123+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
$ convert out-convert.gif -coalesce -resize 256x out-coalesce.gif
$ identify out-coalesce.gif | head -n 3
out-coalesce.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[1] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[2] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
$ convert out-convert.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
$ identify out-deconstruct.gif | head -n 3
out-deconstruct.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[1] GIF 135x135 256x256+60+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[2] GIF 135x136 256x256+59+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out.gif
out-coalesce.gif
out-deconstruct.gif
Primero, vemos cómo ingresar el archivo, out-convert.gif
de hecho, se comprimió, ya que el fotograma 2 solo está 516x516
en desplazamiento 252+257
, mientras que el fotograma completo 1 lo está 1024x1024
.
Entonces, si comparamos las tres conversiones:
out.gif
: Todos los marcos son 256x256
o más grandes, y enormes a aproximadamente 5MiB, TODO ¿por qué?
Visualmente incorrecto, ya que esos 256x256
cuadros aproximadamente tienen un desplazamiento distinto de cero, por ejemplo, 125+128
para el cuadro 2.
out-coalesce.gif
: todos los marcos son 256x256
y tienen el desplazamiento correcto 0+0
.
La salida parece visualmente correcta, pero el tamaño del archivo de salida es 2.0 MiB, que es más grande que out-deconstruct.gif
out-deconstruct.gif
: cuadros comprimidos, tamaño de salida final 1.9 MiB.
No es considerablemente más pequeño que out-coalesce.gif
, pero creo que esto es solo porque el suelo negro se comprime muy bien, y podría ser muy significativo en general.
ffmpeg y gifsicle
También probé los siguientes comandos:
ffmpeg -i out-convert.gif -vf scale=256:-1 out-ffmpeg-small.gif
gifsicle --resize 256x256 out-convert.gif > out-gifsicle.gif
y ambos produjeron una salida de 1.5 MiB aún más pequeña que se veía correctamente.
Consulte también: ¿Cómo creo un gif animado a partir de imágenes fijas (preferiblemente con la línea de comando)?
TODO: ¿por qué pueden hacerlo más pequeño que convert
? ¿Están simplemente seleccionando mejores rectángulos de diferencia más mínimos, o algo más?
Probado en Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8.
-coalesce
"crea una vista completa de la animación en cada punto, un poco como una tira de película real, en lugar de una secuencia de animación. Dicha secuencia, conocida como Animación fusionada, es mucho más fácil de estudiar, editar, modificar y volver a optimizar".