Saya memiliki 2.0 mb gif yang ingin saya buat lebih kecil, lebih disukai dengan menjatuhkan beberapa frame.
Apakah ada utilitas baris perintah atau program yang akan melakukannya untuk saya secara otomatis?
Terima kasih.
Saya memiliki 2.0 mb gif yang ingin saya buat lebih kecil, lebih disukai dengan menjatuhkan beberapa frame.
Apakah ada utilitas baris perintah atau program yang akan melakukannya untuk saya secara otomatis?
Terima kasih.
Jawaban:
ImageOptim menggunakan Gifsicle untuk kompresi Gif-nya. Sejauh yang saya tahu, ini berfungsi dengan baik (saya biasanya tidak menggunakan Gif hari ini). Dari situs mereka:
Optimalkan animasi Anda! Ini hanya menyimpan bagian yang diubah dari setiap frame, dan secara radikal dapat menyusutkan GIF Anda. Anda juga dapat menggunakan transparansi untuk membuatnya lebih kecil. Pengoptimal Gifsicle cukup kuat, dan biasanya mengurangi animasi hingga beberapa byte dari pengoptimal komersial terbaik.
Saya menggunakan ezgif.com/optimize , karena GIMP dan alat lain tidak bagus dalam pekerjaan ini. Perbedaannya adalah bahwa ezgif menggunakan gifsicle
modifikasi (dengan lossy
bendera), tidak tersedia pada apt
versi. Lihat rilis 1.82.1 di sini (ganti /usr/bin/gifsicle
dengan yang sesuai untuk sistem Anda (biner diakhiri dengan -static
).
Catatan saya tentang alur kerja optimasi gif lengkap ada di sini .
Sunting : skrip saat ini yang sedang digunakan akan diperbarui di GitHub di sini
Saya tidak akan menjelaskan bagaimana saya melakukan semuanya di sini, ide umumnya adalah beberapa fungsi bash / alias:
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"
}
The --lossy
bendera mengambil integer dari 30 sampai 200, jadi untuk kualitas terbaik:
gifsicle -O3 --lossy=30 -o output.gif input.gif
Dengan fungsi di atas, gifopt
Anda dapat menyederhanakan masalah, karena defaultnya adalah 30
gifopt input.gif
... output akan dinamai secara otomatis input-opt.gif
. Anda dapat mengubah fungsi untuk menggunakan --batch
bendera untuk pengeditan di tempat tetapi saya tidak akan merekomendasikan untuk menimpa materi awal Anda.
Fungsi itu juga berfungsi untuk menghapus _reduced_x
akhiran apa pun yang ditambahkan oleh fungsi pengurangan jumlah frame, yaitu Anda bisa memiliki file perantara input_reduced_x2.gif
(langkah yang akan ~ membagi dua ukuran file dengan menjatuhkan setiap frame lainnya).
Jika Anda melakukannya, kecepatan mungkin berubah, diperbaiki dengan gifspeedchange input-opt.gif 5
misalnya, untuk menggunakan penundaan bingkai 50 ms.
Anda dapat mengoptimalkan file .gif Anda di Gimp dengan mudah.
Cukup Simpan sebagai .gif lalu kompres atau Anda dapat menyimpan di ekstensi lain sebagai .jpeg atau lainnya.