Yanıtlar:
ilk çalıştırma:
convert do.gif -coalesce temporary.gif
sonra
convert -size <original size> temporary.gif -resize 24x24 smaller.gif
gifsicle --resize 24x24 > do-24.gif
bu da olabilir
-coalesce
+ -deconstruct
Sonra -coalesce
, muhtemelen aşağıdakileri eklemek istersiniz -deconstruct
:
convert in.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
Sorunun kök nedeni, GIF girişinizin uygun şekilde en aza indirilmiş olmasıdır: GIF, bir sonraki karenin ofsetteki bir önceki karenin sadece değiştirilmiş bir dikdörtgen olmasına izin verir.
-coalesce
daha sonra tüm çerçeveleri orijinal boyutuna genişletir, bu da yeniden boyutlandırmanın çalışmasını sağlar, ancak çerçeveleri yeniden giriş resminiz olarak yeniden sıkıştırmaz: -deconstruct
bunun için gereklidir!
Bu cevaptaki test verilerini kullanarak: Hareketsiz görüntülerden nasıl hareketli bir gif oluşturabilirim (tercihen komut satırında)? Bunu açıkça görebiliyoruz identify
:
$ identify out-convert.gif | head -n 3
out-convert.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.020u 0:00.019
out-convert.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
out-convert.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
$ convert out-convert.gif -resize 256x out.gif
$ identify out.gif | head -n 3
out.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[1] GIF 256x256 256x256+125+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[2] GIF 256x258 256x256+123+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
$ convert out-convert.gif -coalesce -resize 256x out-coalesce.gif
$ identify out-coalesce.gif | head -n 3
out-coalesce.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[1] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[2] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
$ convert out-convert.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
$ identify out-deconstruct.gif | head -n 3
out-deconstruct.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[1] GIF 135x135 256x256+60+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[2] GIF 135x136 256x256+59+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out.gif
out-coalesce.gif
out-deconstruct.gif
İlk olarak, dosyanın nasıl girileceğini görüyoruz out-convert.gif
, gerçekte sıkıştırılmış, çünkü kare 2 sadece 516x516
ofsette 252+257
iken, tam boyutlu kare 1 ise 1024x1024
.
Ardından, üç dönüşümü karşılaştırırsak:
out.gif
: Tüm kareler büyük 256x256
veya daha büyük ve yaklaşık 5MiB büyük, TODO neden?
Görsel olarak yanlış, çünkü yaklaşık 256x256
kareler sıfır olmayan bir kaymaya sahip, örneğin 125+128
kare 2!
out-coalesce.gif
: tüm çerçeveler 256x256
doğru ve doğru ofset 0+0
.
Çıktı görsel olarak doğru gözüküyor, ancak çıktı dosya boyutu 2.0 MiB out-deconstruct.gif
out-deconstruct.gif
: sıkıştırılmış çerçeveler, son çıktı boyutu 1.9 MiB.
Çok daha küçük değil out-coalesce.gif
, ama bence bu sadece siyah zeminin çok iyi sıkıştığı ve genel olarak çok önemli olabileceği içindir.
ffmpeg ve gifsicle
Ayrıca aşağıdaki komutları da denedim:
ffmpeg -i out-convert.gif -vf scale=256:-1 out-ffmpeg-small.gif
gifsicle --resize 256x256 out-convert.gif > out-gifsicle.gif
ve her ikisi de, daha küçük, doğru görünen bir 1,5 MiB çıkış üretti.
Ayrıca bakınız: Hareketsiz görüntülerden nasıl animasyonlu bir gif oluşturabilirim (tercihen komut satırıyla)?
TODO: Neden daha küçük hale getirebilirler convert
? Onlar sadece daha iyi daha az farksal dikdörtgenler mi seçiyorlar?
Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8'de test edilmiştir.
Bildiğim kadarıyla imagemagick çözümü arıyordum, ama sonunda @ sam'ın önerisine gittim gifsicle
. Tam istediğimi yaptım, güçlük yok.
Elde edilen dosya boyutunu birçok yönden optimize edebilir, ancak ben sadece boyutunu küçülterek ve renk sayısını azaltarak gittim. Bir cazibe gibi çalıştı:
gifsicle --resize 48x48 --colors 16 original.gif > smaller.gif
-coalesce
"Her noktada, bir animasyon dizisinden ziyade, gerçek bir film şeridi gibi, tam bir görünüm oluşturur. Birleştirilmiş Animasyon olarak bilinen böyle bir dizinin incelenmesi, düzenlenmesi, değiştirilmesi ve yeniden optimize edilmesi çok daha kolaydır."