Réponses:
première exécution:
convert do.gif -coalesce temporary.gif
ensuite
convert -size <original size> temporary.gif -resize 24x24 smaller.gif
gifsicle --resize 24x24 > do-24.gif
peut à cela aussi
Je cherchais une solution imagemagick car je la connais bien, mais je suis finalement allé avec la suggestion de @ sam gifsicle
. Il a fait juste ce que je voulais, pas de soucis.
Peut optimiser la taille du fichier résultant à bien des égards, mais j’ai simplement choisi de réduire la taille et le nombre de couleurs. Travaillé comme un charme:
gifsicle --resize 48x48 --colors 16 original.gif > smaller.gif
-coalesce
+ -deconstruct
Après -coalesce
, vous voudrez probablement ajouter un -deconstruct
:
convert in.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
La cause première du problème réside dans le fait que votre GIF en entrée a été correctement minimisé: il permet à la prochaine image d'être uniquement le rectangle modifié du précédent par un décalage.
-coalesce
étend ensuite tous les cadres à la taille originale, ce qui facilite le redimensionnement, mais ne recompose pas les cadres à nouveau comme image d'entrée: elle -deconstruct
est nécessaire pour cela!
Utilisation des données de test de cette réponse: Comment créer un gif animé à partir d’images fixes (de préférence avec la ligne de commande)? nous pouvons le voir clairement avec 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
Premièrement, nous voyons comment entrer le fichier, out-convert.gif
était en fait compressé, car l’image 2 n’est que 516x516
décalée 252+257
, alors que l’image 1 de taille normale l’est 1024x1024
.
Ensuite, si nous comparons les trois conversions:
out.gif
: Tous les cadres sont 256x256
ou plus grandes, et énorme à environ 5 Mo, TODO pourquoi?
Visuellement incorrect, car ces 256x256
trames environ ont un décalage non nul, par exemple 125+128
pour la trame 2!
out-coalesce.gif
: toutes les images sont 256x256
et ont le bon décalage 0+0
.
La sortie est visuellement correcte, mais la taille du fichier de sortie est de 2,0 Mo, ce qui est supérieur à out-deconstruct.gif
out-deconstruct.gif
: images compressées, taille de sortie finale de 1,9 Mio.
Pas beaucoup plus petit que out-coalesce.gif
, mais je pense que c'est simplement parce que le sol noir compresse très bien, et cela pourrait être très important en général.
ffmpeg et gifsicle
J'ai aussi essayé les commandes suivantes:
ffmpeg -i out-convert.gif -vf scale=256:-1 out-ffmpeg-small.gif
gifsicle --resize 256x256 out-convert.gif > out-gifsicle.gif
et les deux ont produit une sortie encore plus petite de 1,5 Mio correctement recherchée.
Voir aussi: Comment créer un gif animé à partir d'images fixes (de préférence avec la ligne de commande)?
TODO: pourquoi peuvent-ils le rendre plus petit que convert
? Sont-ils simplement en train de sélectionner des rectangles de diff plus minimes ou mieux?
Testé sous Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8.
-coalesce
"crée une vue complète de l'animation à chaque point, un peu comme une vraie bande de film, plutôt qu'une séquence d'animation. Une telle séquence, appelée Animation coalescée, est beaucoup plus facile à étudier, à éditer, à modifier et à réoptimiser."