GIF'ler çıkarma aşamasında neden yanlış gidiyor?

Kötü GIF'lerin çoğuna herhangi bir GIF yazılımı açılmadan önce karar verilir. Birisi beş saniyelik bir klibin her karesini çıkarıyor, 150 görüntü alıyor, bunları birleştiriyor ve sonunda sohbet uygulamasının yerleştirmeyi reddettiği 14 MB'lık bir dosya elde ediyor. Bu durumda içgüdüsel olarak daha sert sıkıştırma yapılır, bu da onu çok fazla küçültmeden çamurlu hale getirir.

Asıl sorun yukarı akışta. GIF bir video codec bileşeni değildir; hareket telafisi yoktur, adına değecek bir kareler arası tahmin yoktur ve kare başına 256 renkten oluşan sert bir tavana sahiptir. Her kare bağımsız bir görüntüye yakındır. Aşağıdaki her kararı yönlendiren tek gerçek budur.

Öyleyse düşünülmesi gereken sıra şu: önce kare sayısına karar verin, sonra palete karar verin ve ancak ondan sonra sıkıştırma konusunda endişe edin.

1. Adım: Örnekleme aralığını seçin

Soru, "kaynağın kaç kareye sahip olduğu" değil, "hareketin gerçekte kaç kareye ihtiyacı olduğudur". Bazı kaba başlangıç ​​noktaları:

  • 10–12 fps — iş gücü ayarı. Hareketler, kullanıcı arayüzü demoları ve çoğu tepki klibi için yeterince akıcı. 30 fps'lik bir kaynakta her 3. karede bir; her 5'te bir, 60 fps'de.
  • 15 fps — kamera kaydırma veya sıçrayan bir nesne gibi 12'nin yanıp sönmeye başladığı sürekli hareket için.
  • 5–8 fps — slayt benzeri içerik için: oluşturulan bir grafik, öncesi/sonrası, yavaş yakınlaştırma. Çoğu zaman ucuz olmaktan ziyade kasıtlı görünüyor.
  • 24+ fps — nadiren buna değer. Dosya boyutu 12 fps karşısında kabaca iki katına çıkar ve çoğu izleyici küçük bir döngüsel görüntüde bunu anlayamaz.

kare çıkarıcı, "Kare Hızı (FPS)" modunu kullanın ve böleni girin: her üç kare için 3, her beşte bir 5. Kare sayısı siz yazdıkça güncellenir; bu sayı aslında dosya boyutunuzu tahmin eden sayıdır.

Çıkarmadan önce sağlık kontrolü: istediğiniz kare sayısını yaklaşık 30–60 KB ile çarpmanızdır. Bu, palet küçültme sonrasında 480 piksel genişliğinde bir GIF çerçevesi için gerçekçi bir basketbol sahasıdır. Altmış kare 2-3 MB civarında bir yere iniyor. Bu, bütçenizi aşıyorsa kareleri şimdi kesin. Bu, daha sonra sıkıştırmaktan çok daha etkilidir.

2. Adım: Süreyi kısa tutun

GIF'in uzun biçimli bir kullanım durumu yoktur. İki ila dört saniye, döngü olarak çalışan hemen hemen her şeyi kapsar ve döngü noktası uzunluktan daha önemlidir: Başladığı yere yakın bir yerde biten bir klip sürekli olarak okunurken, orta hareketi kesen bir klip her tekrarda dikkati dikişe çeker.

Kareleri daha sonra silmek yerine, çıkarmadan önce kırpmak için zaman aralığı kaydırıcısını kullanın. Zaman damgaları siz sürükledikçe görünür, böylece çıkış noktasını giriş noktasıyla aynı poza getirebilirsiniz.

3. Adım: 256 renk sınırını anlayın

Bu, insanları şaşırtan kısıtlamadır ve mücadele etmek yerine anlamaya değer.

Her GIF karesi, en fazla 256 renkten oluşan bir palete indekslenir. Kaynak videonuzda milyonlarca var. Sonucun nasıl görüneceğine karar veren bir şeyin farkı ortadan kaldırması ve bunun nasıl yapılacağına karar vermesi gerekir.

İki strateji ve doğru olanı tamamen içeriğe bağlıdır:

  • Titreşim eksik olanları taklit etmek için bitişik palet renklerinin piksellerini dağıtır. Gradyanlar (gökyüzü, yumuşak aydınlatma, yüzdeki gölgeler) onunla çok daha iyi hayatta kalır. Maliyet, gözle görülür bir benek deseni ve gözle görülür derecede daha büyük bir dosyadır, çünkü bu gürültü sıkıştırmayı alt eder.
  • Titreşim yok düz, temiz renkli alanlar ve çok daha küçük dosyalar sağlar. Ekran kayıtları, kullanıcı arayüzü demoları, çizgi resimler ve büyük tekdüze bölgelere sahip her şey için idealdir. Fotoğrafik degradelerde sert şeritlenme oluşturur.

Pratik kural: ekran içeriği, renk taklidi yok. Kamera görüntüleri titriyor. Emin değilseniz ikisini de dışa aktarın ve gerçek boyutunda bakın; fark açıktır ve bir dakika sürer.

Ayrıca bu nedenle ayıklama PNG son GIF'in 256 rengi olmasına rağmen doğru çağrıdır. Kaynaktaki her JPEG eseri, paletin üzerinde bir giriş yapması gereken bir renk haline gelir. Temiz, kayıpsız karelerin palet adımına beslenmesi, niceleyiciye daha iyi bir başlangıç ​​noktası sağlar.

4. Adım: Kare gecikmesini çıkardığınız aralıkla eşleştirin

GIF'ler kare hızını saklamaz. Kare başına gecikmeyi saniyenin yüzde biri kadar bir sürede depolarlar ve bu, birçok GIF'in yanlış hızda oynatıldığı yerdir.

Aritmetik basittir: gecikme = 100 ÷ hedef fps'niz.

  • 12 fps → gecikme 8 (0,08 sn)
  • 10 fps → gecikme 10 (0,10 sn)
  • 15 fps → gecikme 7 (6,67'ye yuvarlanır)
  • 5 fps → gecikme 20 (0,20s)

Bilmeniz gereken iki şey. Birincisi, yuvarlama gerçektir: 15 fps tam olarak ifade edilemez, dolayısıyla döngü biraz sapar. Zamanlamanın önemli olduğu herhangi bir şey için, temiz bir şekilde bölünen 10, 12,5, 20 veya 25 fps'yi tercih edin. İkincisi, çoğu tarayıcı gecikmeleri 2'den (0,02 saniye) 10'a kadar sessizce sıkıştırır; yani 50 fps'de yazılan bir GIF, çoğu izleyici için 10 fps'de, beş kat daha büyük dosya boyutunda ve hiçbir pürüzsüzlükte oynatılmaz.

5. Adım: Boyutu, işe yarayan sırayla kesin

Dosya hala çok büyükse bunları sırayla uygulayın. Her birinin maliyeti, kaydedilen bayt başına, kendisinden sonrakine göre daha düşük kaliteye sahiptir.

  1. Boyutları azaltın. Genişliğin yarıya indirilmesi piksel sayısının dörtte birine eşittir. 480 piksel genişliğinde bir GIF, çoğu yerleştirme bağlamı için uygundur; 800+ nadiren gereklidir.
  2. Çerçeveleri bırakın. 15'ten 10 fps'ye geçmek, çoğu izleyicinin kaydedemeyeceği bir değişiklik için verilerin üçte birini kaldırır.
  3. Klibi kısaltın. Acımasızca. Hemen hemen her GIF'in başında veya sonunda hiçbir şey yapmayan bir saniye vardır.
  4. Paleti 256'nın altına düşürün. 128 veya hatta 64 renk genellikle ekrandaki içerikte görünmez ve anlamlı derecede küçüktür.
  5. Titremeyi kapatın eğer açıksa ve içerik bunu kaldırabilirse.

"Daha sert sıkıştır"ın listede olmadığına dikkat edin. GIF'in sıkıştırması kayıpsız LZW'dir; kaliteli arama yoktur. Yapabileceğiniz tek şey, ilk etapta hangi verileri dahil edeceğinize karar vermektir.

Hiç GIF oluşturmamanız gerektiğinde

Çok fazla çaba tasarrufu sağladığı için açıkça belirtmekte fayda var:

  • Yaklaşık beş saniyeden uzun olan her şey. MP4 veya WebM, daha iyi kalitede, boyutun çok küçük bir kısmı olacaktır. "GIF'leri" kabul eden çoğu platform artık bunları dahili olarak videoya dönüştürüyor.
  • Çok fazla degrade içeren fotoğraf içeriği. 256 renk kesinlikle yeterli değildir ve palet hilesi yoktur sorunu düzeltir.
  • Ses gerektiren her şey. GIF'te yoktur ve kaynağın bir ritmi varsa döngü yanlış hissedilir.
  • 800 pikselin üzerindeki genişlikteki her şey. O zamana kadar boyut cezası, videonun doğru cevap olmasını sağlayacak kadar şiddetli olur.

GIF tam olarak tek bir durumda yerini alır: oynatıcı olmadan her yerde çalışması gereken kısa, sessiz, otomatik oynatma döngüsü. Bu bakımdan, içeri giren karelerin bilinçli olarak seçilmesi koşuluyla hala yenilmezdir.

Çalışılmış bir örnek

Örneklemeden önce bir GIF istediğinizi söyleyin: 1 MB'ın altında, 60 fps ekran kaydından üç saniyelik bir kullanıcı arayüzü etkileşimi.

  1. Kırp son kare ilkine yakın olacak şekilde etkileşimi içeren 3,2 saniyeye kadar.
  2. Çıkarın N = 5 ile FPS modunda — 60 fps'nin her beşinci karesi 12 fps, yani yaklaşık 38 kare verir. PNG çıktısı.
  3. Birleştirin gecikme 8'de, renk taklidi kesilir (düz renkli ekran içeriğidir).
  4. Ölçeklendir kaynak daha büyükse 600 piksel genişliğe.
  5. Sonucu kontrol edin. Yaklaşık 38 karelik düz kullanıcı arayüzü içeriği genellikle 1 MB'ın oldukça altına ulaşır. Değilse, başka bir şeye dokunmadan önce paleti 128 renge bırakın.

Her şey birkaç dakika sürer ve her adım, devraldığınız varsayılan bir karardan ziyade sizin verdiğiniz bir karardır.