.Gif dosyasını otomatik olarak sıkıştırmanın herhangi bir yolu var mı?


11

Tercihen bazı çerçeveleri bırakarak, daha küçük yapmak istiyorum 2.0 mb gif var.

Otomatik olarak benim için yapacak bir komut satırı yardımcı programı veya programı var mı?

Teşekkürler.


Webm formatına bakmak isteyebilirsiniz: daha optimize bir gif gibi!

Yanıtlar:


8

ImageOptim Gif sıkıştırması için Gifsicle kullanıyor . Bildiğim kadarıyla, oldukça iyi çalışıyor (bu günlerde genellikle Gif kullanmıyorum). Sitelerinden:

Animasyonlarınızı optimize edin! Bu, her çerçevenin yalnızca değişen bölümünü depolar ve GIF'lerinizi radikal bir şekilde küçültebilir. Saydamlığı, daha da küçük yapmak için de kullanabilirsiniz. Gifsicle'ın optimize edici oldukça güçlüdür ve genellikle animasyonları en iyi ticari optimize edicilerin birkaç baytı içinde azaltır.


6

Sen kullanabilirsiniz GimpGimp yükle yanı tekrar bir GIF kaydederek dosyayı yeniden optimize olarak GIF bazı kareleri kaldırmak için.


Gimp'e kaydederken dosyayı nasıl yeniden optimize edersiniz?
orschiro

2

GIMP ve diğer araçlar bu işte iyi olmadığından ezgif.com/optimize kullanıyorum . Fark, ezgif'in sürümde bulunmayan bir gifsicledeğişiklik (bir lossybayrakla) kullanmasıdır apt. Buradaki sürüm 1.82.1'e bakın ( /usr/bin/gifsiclesisteminiz için uygun olanla değiştirin (ikili bitiş ile -static).

Tam gif optimizasyon iş akışıyla ilgili notlarım burada .

Düzenleme : GitHub'dan güncellenecektir kullanımda tutulması gibi güncel komut burada

Hepsini burada nasıl yaptığımı açıklamayacağım, genel fikir birkaç bash işlevi / takma adıdır:

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"
}

--lossyBayrağın, iyi kalite için, 200 30 ile bir tamsayı alır:

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

Yukarıdaki işlevle gifopt, konuları basitleştirebilirsiniz, çünkü varsayılan değer 30'dur.

gifopt input.gif

... çıktı otomatik olarak adlandırılır input-opt.gif. --batchYerinde düzenleme için bayrağı kullanmak üzere işlevi değiştirebilirsiniz, ancak başlangıç ​​malzemenizin üzerine yazılmasını önermem.

Bu işlev _reduced_x, kare sayısı azaltma işlevi tarafından eklenen tüm sonekleri kaldırmak için de çalışır; başka bir deyişle, bir ara dosyaya input_reduced_x2.gif(diğer her kareyi bırakarak dosya boyutunu yarıya indirecek bir adım) sahip olabilirsiniz.

Bunu yaptıysanız, gifspeedchange input-opt.gif 5örneğin 50 ms'lik bir çerçeve gecikmesi kullanmak için hız ile sabitlenebilir .


1

Gimp'deki .gif dosyanızı kolayca optimize edebilirsiniz.

Sadece .gif olarak kaydedin ve sonra sıkıştırın veya başka bir uzantıda .jpeg veya diğer olarak kaydedebilirsiniz.


1
Gimp'te nasıl sıkıştırıyorsun?
orschiro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.