Je souhaite redimensionner un tel fichier GIF animé faire.gif
Si je le fais convert do.gif -resize 24x24\! do-24.gif
Je le redimensionne en do-24.gif mais pas animée
Comment le redimensionner correctement pour obtenir la même animation ?
Je souhaite redimensionner un tel fichier GIF animé faire.gif
Si je le fais convert do.gif -resize 24x24\! do-24.gif
Je le redimensionne en do-24.gif mais pas animée
Comment le redimensionner correctement pour obtenir la même animation ?
Je cherchais la solution d'imagemagick car je la connais bien, mais j'ai finalement opté pour la suggestion de @sam, à savoir gifsicle
. Il a fait exactement ce que je voulais, sans problème.
Il est possible d'optimiser la taille du fichier résultant de bien des façons, mais j'ai choisi de réduire la taille et le nombre de couleurs. Cela a fonctionné comme un charme :
gifsicle --resize 48x48 --colors 16 original.gif > smaller.gif
-coalesce
+ -deconstruct
Après -coalesce
il est probable que vous souhaitiez ajouter un -deconstruct
:
convert in.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
La cause première du problème est que votre GIF d'entrée a été correctement minimisé : Le GIF permet à l'image suivante d'être juste le rectangle modifié de l'image précédente avec un décalage.
-coalesce
étend ensuite toutes les images à la taille d'origine, ce qui permet le redimensionnement, mais ne recompresse pas les images comme votre image d'entrée : -deconstruct
est nécessaire pour cela !
En utilisant les 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
Tout d'abord, nous verrons comment introduire un fichier, out-convert.gif
a en fait été compressée, puisque la trame 2 n'est que 516x516
à l'offset 252+257
tandis que le cadre de taille normale 1 est 1024x1024
.
Ensuite, si l'on compare les trois conversions :
out.gif
: Tous les cadres sont 256x256
ou plus grand, et énorme à environ 5MiB, TODO pourquoi ?
Visuellement incorrecte, puisque ces environ 256x256
ont un décalage non nul, par exemple 125+128
pour le cadre 2 !
out-coalesce.gif
: tous les cadres sont 256x256
et avoir le bon décalage 0+0
.
La sortie semble visuellement correcte, mais la taille du fichier de sortie est de 2,0 MiB, ce qui est supérieur à la taille du fichier de sortie. out-deconstruct.gif
out-deconstruct.gif
: images compressées, taille de la sortie finale 1.9 MiB.
Pas beaucoup plus petit que out-coalesce.gif
mais je pense que c'est simplement parce que le sol noir se comprime très bien, et que cela pourrait être très significatif en général.
ffmpeg et gifsicle
J'ai également 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 un résultat encore plus petit et correct de 1,5 MiB.
Voir aussi Comment créer un gif animé à partir d'images fixes (de préférence avec la ligne de commande) ?
TODO : pourquoi ne peuvent-ils pas le rendre plus petit que convert
? Sélectionnent-ils simplement de meilleurs rectangles de diff plus minimes, ou autre chose ?
Testé sur Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.