Réponses:
ImageOptim utilise Gifsicle pour sa compression Gif. Pour autant que je sache, cela fonctionne assez bien (je n'utilise généralement pas Gif de nos jours). Depuis leur site:
Optimisez vos animations! Cela ne stocke que la partie modifiée de chaque cadre et peut réduire considérablement vos GIF. Vous pouvez également utiliser la transparence pour les rendre encore plus petits. L'optimiseur de Gifsicle est assez puissant et réduit généralement les animations à quelques octets des meilleurs optimiseurs commerciaux.
J'utilise ezgif.com/optimize , car GIMP et d'autres outils ne sont pas bons pour ce travail. La différence est qu'ezgif utilise une gifsicle
modification (avec un lossy
drapeau), non disponible sur la apt
version. Voir la version 1.82.1 ici (remplacez-la /usr/bin/gifsicle
par celle appropriée à votre système (le binaire se terminant par -static
).
Mes notes sur un workflow d'optimisation GIF complet sont ici .
Edit : le script actuel tel qu'il est conservé sera mis à jour sur GitHub ici
Je ne décrirai pas comment je fais tout ici, l'idée générale est quelques fonctions / alias bash:
function gifopt() {
# args: $input_file ($loss_level)
if [ -z "$2" ]
then
# use default of 30
local loss_level=30
elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ]
then
local loss_level=$2
else
echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2
exit 1
fi
local inputgif="${1?'Missing input file parameter'}"
local gifname="$(basename $inputgif .gif)"
local basegifname=$(echo "$gifname" | sed 's/_reduced_x[0-9]//g')
local outputgif="$basegifname-opt.gif"
gifsicle -O3 --lossy="$loss_level" -o "$outputgif" "$inputgif";
local oldfilesize=$(du -h $inputgif | cut -f1)
local newfilesize=$(du -h $outputgif | cut -f1)
echo "File reduced from $oldfilesize to $newfilesize as $outputgif"
}
function gifopt() {
# args: $input_file ($loss_level)
if [ -z "$2" ]
then
# use default of 30
loss_level=30
elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ]
then
loss_level=$2
else
echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2
exit 1
fi
local inputgif="${1?'Missing input file parameter'}"
local gifname="$(basename $inputgif .gif)"
local basegifname=$(echo "$gifname" | sed 's/_reduced_x[0-9]//g')
local outputgif="$basegifname-opt.gif"
gifsicle -O3 --lossy="$loss_level" -o "$outputgif" "$inputgif";
local oldfilesize=$(du -h $inputgif | cut -f1)
local newfilesize=$(du -h $outputgif | cut -f1)
echo "File reduced from $oldfilesize to $newfilesize as $outputgif"
}
function gifspeedchange() {
# args: $gif_path $frame_delay (1 = 0.1s)
local orig_gif="${1?'Missing GIF filename parameter'}"
local frame_delay=${2?'Missing frame delay parameter'}
gifsicle --batch --delay $frame_delay $orig_gif
local newframerate=$(echo "$frame_delay*10" | bc)
echo "new GIF frame rate: $newframerate ms"
}
Le --lossy
drapeau prend un entier de 30 à 200, donc pour une meilleure qualité:
gifsicle -O3 --lossy=30 -o output.gif input.gif
Avec la fonction ci-dessus, gifopt
vous pouvez simplifier les choses, car elle est par défaut de 30
gifopt input.gif
... la sortie serait automatiquement nommée input-opt.gif
. Vous pouvez changer la fonction pour utiliser l' --batch
indicateur pour l'édition sur place, mais je ne recommanderais pas d'écraser votre matériel de départ.
Cette fonction fonctionne également pour supprimer tout _reduced_x
suffixe ajouté par la fonction de réduction du nombre d'images, c'est-à-dire que vous pourriez avoir un fichier intermédiaire input_reduced_x2.gif
(une étape qui réduirait de moitié la taille du fichier en supprimant toutes les autres images).
Si vous le faites, la vitesse peut changer, fixée par gifspeedchange input-opt.gif 5
exemple pour utiliser un délai de 50 ms.
Vous pouvez facilement optimiser votre fichier .gif sur Gimp.
Enregistrez simplement au format .gif, puis compressez ou vous pouvez enregistrer dans une autre extension au format .jpeg ou autre.