Qualquer forma de compactar automaticamente um arquivo .gif?

10

Eu tenho um gif de 2.0 mb que quero tornar menor, de preferência colocando alguns quadros.

Existe um utilitário de linha de comando ou um programa que faz isso automaticamente?

Obrigado.

    
por chiba 15.06.2011 / 07:31

4 respostas

8

O ImageOptim usa o Gifsicle para a sua compressão Gif. Tanto quanto eu sei, funciona muito bem (eu geralmente não uso o Gif nos dias de hoje). De seu site:

  

Otimize suas animações! Isso armazena   apenas a parte alterada de cada   quadro, e pode reduzir radicalmente o seu   Gifs. Você também pode usar transparência para   torná-los ainda menores. Gifsicle's   otimizador é muito poderoso, e   geralmente reduz animações dentro de um   casal bytes do melhor comercial   otimizadores.

    
por Shauna 15.06.2011 / 14:30
6

Você pode usar o o Gimp para remover alguns quadros do GIF, além de otimizar novamente o arquivo, salvando-o novamente em um GIF.

    
por MrMassiveManMeat 15.06.2011 / 07:34
2

Eu uso ezgif.com/optimize , pois o GIMP e outras ferramentas não são boas neste trabalho. A diferença é que o ezgif usa uma modificação gifsicle (com um sinal lossy ), não disponível na versão apt . Veja o release 1.82.1 aqui (substitua /usr/bin/gifsicle pelo apropriado para o seu sistema (o final binário com -static ).

Minhas notas sobre um fluxo de trabalho de otimização de gif completo são aqui .

Editar : o script atual mantido em uso será atualizado no GitHub aqui

Não vou descrever como faço tudo aqui, a ideia geral é de algumas funções / aliases bash:

function gifopt() {
    # args: $input_file ($loss_level)
    if [ -z "" ]
    then
        # use default of 30
        local loss_level=30
    elif [[ "" =~ ^[0-9]+$ ]] && [ "" -ge 30 -a "" -le 200 ]
    then
        local loss_level=
    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 "" ]
    then
        # use default of 30
        loss_level=30
    elif [[ "" =~ ^[0-9]+$ ]] && [ "" -ge 30 -a "" -le 200 ]
    then
        loss_level=
    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"
}

O sinalizador --lossy usa um número inteiro de 30 a 200, portanto, para melhor qualidade:

gifsicle -O3 --lossy=30 -o output.gif input.gif

Com a função acima gifopt você pode simplificar, já que o padrão é 30

gifopt input.gif

... a saída seria automaticamente denominada input-opt.gif . Você poderia alterar a função para usar o sinal --batch para edição no local, mas eu não recomendaria substituir seu material inicial.

Essa função também funciona para remover qualquer sufixo _reduced_x adicionado pela função de redução da contagem de quadros, ou seja, você pode ter um arquivo intermediário input_reduced_x2.gif (uma etapa que reduziria o tamanho do arquivo descartando todos os outros quadros). p>

Se você fez isso, a velocidade pode mudar, fixada com gifspeedchange input-opt.gif 5 , por exemplo, para usar um atraso de 50 ms.

    
por Louis Maddox 29.07.2015 / 19:42
1

Você pode otimizar seu arquivo .gif no Gimp facilmente.

Basta salvar como .gif e depois compactar ou salvar em outra extensão como .jpeg ou outro.

    
por Jorge Pinho 15.06.2011 / 14:39

Tags