Est-il possible de compresser automatiquement un fichier .gif?

11

J'ai un gif de 2,0 Mo que je veux réduire, de préférence en supprimant quelques images.

Existe-t-il un utilitaire de ligne de commande ou un programme qui le fera automatiquement pour moi?

Merci.

chiba
la source
Vous voudrez peut-être regarder dans le format webm: c'est comme un gif plus optimisé!

Réponses:

8

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.

Shauna
la source
6

Vous pouvez utiliser GimpInstaller gimp pour supprimer certaines images du GIF ainsi que pour ré-optimiser le fichier en le réenregistrant dans un GIF.

MrMassiveManMeat
la source
Comment ré-optimisez-vous le fichier lors de l'enregistrement dans Gimp?
orschiro
2

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 gifsiclemodification (avec un lossydrapeau), non disponible sur la aptversion. Voir la version 1.82.1 ici (remplacez-la /usr/bin/gifsiclepar 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 --lossydrapeau 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, gifoptvous 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' --batchindicateur 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_xsuffixe 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 5exemple pour utiliser un délai de 50 ms.

Louis Maddox
la source
1

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.

Jorge Pinho
la source
1
Comment compressez-vous dans Gimp?
orschiro