Yanıtlar:
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.
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 gifsicle
değişiklik (bir lossy
bayrakla) kullanmasıdır apt
. Buradaki sürüm 1.82.1'e bakın ( /usr/bin/gifsicle
sisteminiz 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"
}
--lossy
Bayrağı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
. --batch
Yerinde 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 .
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.