Saya ingin mengubah ukuran file GIF animasi do.gif
Jika saya melakukannya convert do.gif -resize 24x24\! do-24.gif
saya mendapatkannya diubah ukurannya di do-24.gif tetapi tidak animasi
Bagaimana mengubah ukurannya dengan cara yang benar untuk mendapatkan animasi yang sama?
imagemagick
zuba
sumber
sumber
-coalesce
"Membuat tampilan lengkap animasi di setiap titik, sedikit seperti strip film sejati, daripada urutan animasi. Urutan seperti itu, yang dikenal sebagai Animasi Penggabungan jauh lebih mudah untuk dipelajari, diedit, dimodifikasi, dan dioptimalkan kembali."gifsicle --resize 24x24 > do-24.gif
bisa untuk ini jugaSaya sedang mencari solusi imagemagick karena saya sudah terbiasa dengan itu, tetapi pada akhirnya saya pergi dengan saran @ sam
gifsicle
. Itu melakukan apa yang saya inginkan, tidak ada kerumitan.Dapat mengoptimalkan ukuran file yang dihasilkan dalam banyak cara, tapi saya pergi dengan hanya mengurangi ukuran dan mengurangi jumlah warna. Bekerja seperti pesona:
sumber
-coalesce
+-deconstruct
Setelah itu
-coalesce
, Anda mungkin ingin menambahkan-deconstruct
:Akar penyebab masalahnya adalah bahwa input GIF Anda diperkecil dengan benar: GIF memungkinkan frame berikutnya menjadi hanya persegi panjang yang dimodifikasi dari yang sebelumnya di offset.
-coalesce
kemudian perluas semua frame ke ukuran asli, yang membuat ukurannya berfungsi, tetapi itu tidak mengkompres ulang frame lagi seperti gambar input Anda:-deconstruct
diperlukan untuk itu!Menggunakan data uji dari jawaban ini: Bagaimana cara membuat animasi gif dari gambar foto (lebih disukai dengan baris perintah)? kita bisa melihat ini dengan jelas dengan
identify
:out.gif
out-coalesce.gif
out-deconstruct.gif
Pertama, kita melihat cara memasukkan file,,
out-convert.gif
sebenarnya dikompresi, karena frame 2 hanya516x516
diimbangi252+257
, sedangkan frame 1 berukuran penuh adalah1024x1024
.Lalu, jika kita membandingkan ketiga konversi:
out.gif
: Semua frame256x256
atau lebih besar, dan besar sekitar 5MiB, TODO mengapa?Secara visual salah, karena kira-kira
256x256
frame memiliki offset non-nol, misalnya125+128
untuk frame 2!out-coalesce.gif
: semua frame256x256
dan memiliki offset yang benar0+0
.Output terlihat benar secara visual, tetapi ukuran file output adalah 2,0 MiB, yang lebih besar dari
out-deconstruct.gif
out-deconstruct.gif
: frame terkompresi, ukuran keluaran akhir 1,9 MiB.Tidak jauh lebih kecil daripada
out-coalesce.gif
, tapi saya pikir ini hanya karena tanah hitam kompres dengan sangat baik, dan itu bisa sangat signifikan secara umum.ffmpeg dan gifsicle
Saya juga mencoba perintah berikut:
dan keduanya menghasilkan output 1,5 MiB yang tampak lebih kecil dengan benar.
Lihat juga: Bagaimana cara membuat animasi gif dari gambar foto (lebih disukai dengan baris perintah)?
TODO: mengapa mereka membuatnya lebih kecil dari
convert
? Apakah mereka hanya memilih lebih baik persegi panjang diff minimal, atau sesuatu yang lain?Diuji di Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8.
sumber