Sitenizdeki resimleri sıkıştırmak için AVIF kullanma

Jay Krishnan'ın üstlendiği yapımlar
Jai Krishnan
Wan-Teh Chang
Wan-Teh Chang

Görsellerdeki web sitelerindeki şişkinlikler hakkında sık sık yazıyoruz ve Lighthouse gibi araçlar, resim yüklemenin kullanıcı deneyimi üzerinde olumsuz bir etkiye sahip olduğu durumları (ör. yükleme süresini artırmak veya bant genişliğini daha önemli kaynaklardan almak) vurguluyor. Bunu düzeltmenin bir yolu, modern sıkıştırma kullanarak resimlerin dosya boyutunu küçültmektir. Web geliştiricileri için yeni bir seçenek de AVIF resim biçimidir. Bu blog yayınında AVIF için açık kaynak araçlarla ilgili son güncellemelerden bahsediliyor, libaom ve libavif kodlama kitaplıkları tanıtılıyor ve bu kitaplıkları kullanarak AVIF görüntülerini verimli bir şekilde kodlamayla ilgili eğitici içerikler yer alıyor.

AVIF, AV1 video codec'ine dayalı ve Alliance for Open Media tarafından standartlaştırılmış bir resim biçimidir. AVIF, JPEG ve WebP gibi diğer resim biçimlerine kıyasla önemli ölçüde sıkıştırma kazançları sunar. Kesin tasarruflar içeriğe, kodlama ayarlarına ve kalite hedefine bağlı olsa da biz ve diğerleri JPEG'e kıyasla% 50'den fazla tasarruf sağladı.

AVIF kullanan resim
18.769 baytta 1120x840 AVIF (büyütmek için tıklayın)
JPEG'yi kullanan resim
20.036 baytta 1.120x840 JPEG (büyütmek için tıklayın)

Ayrıca AVIF; Yüksek Dinamik Aralık ve Geniş Renk Gamutu, film greni sentezi ve progresif kod çözme gibi yeni görüntü özellikleri için codec ve kapsayıcı desteği sunar.

Yenilikler

Chrome M85'te AVIF desteği kullanıma sunulduğundan beri açık kaynak ekosistemdeki AVIF desteği birçok açıdan iyileştirilmiştir.

Libaom

Libaom, Alliance for Open Media'daki şirketler tarafından yönetilen ve Google ile diğer üye şirketlerdeki birçok üretim hizmetinde kullanılan açık kaynaklı bir AV1 kodlayıcı ve kod çözücüdür. Libaom 2.0.0 sürümüyle (Chrome'un AVIF desteğini eklediği zaman) ile en son 3.1.0 sürümü arasında, kod tabanına önemli ölçüde resim kodlama optimizasyonları eklenmiştir. Bunlardan bazıları:

  • Çoklu iş parçacığı işleme ve parçalı kodlama için optimizasyonlar.
  • Bellek kullanımında 5 kat azalma.
  • Aşağıdaki grafikte gösterildiği gibi CPU kullanımında 6, 5 kat azalma.
8, 1 MP resimler için Speed=6, cq-level=18 kullanma

Bu değişiklikler, özellikle de sitenizdeki en sık yüklenen veya en yüksek öncelikli resimler olmak üzere AVIF kodlama maliyetini önemli ölçüde azaltır. AV1'in donanım hızlandırmalı kodlaması sunucularda ve bulut hizmetlerinde daha fazla kullanılabilir hale geldikçe AVIF görüntüsü oluşturma maliyeti düşmeye devam edecektir.

Livav

AVIF'nin referans uygulaması olan Libavif, Chrome'da AVIF görüntülerinin kodunu çözmek için kullanılan açık kaynaklı bir AVIF muxer ve ayrıştırıcıdır. Ayrıca, sıkıştırılmamış mevcut resimlerinizden AVIF görüntüleri oluşturmak veya mevcut web resimlerinden (JPEG, PNG vb.) kod dönüştürme işlemi için libaom ile birlikte kullanılabilir.

Libavif kısa süre önce, daha gelişmiş libaom kodlayıcı ayarlarıyla entegrasyon dahil, daha geniş bir kodlayıcı ayarı yelpazesi için destek ekledi. Libyuv kullanarak işleme ardışık düzenindeki hızlı YUV'den RGB'ye dönüştürme ve önceden çarpılmış alfa desteği gibi optimizasyonlar kod çözme sürecini daha da hızlandırır. Son olarak, libaom 3.1.0'a yeni eklenen all-intra kodlama modu desteği, yukarıda bahsedilen tüm libaom iyileştirmelerini getirir.

AVIF görüntülerini avifenc ile kodlama

Squoosh.app ile AVIF denemesi yapmanın hızlı bir yolu vardır. Squoosh, libavif'in WebAssembly sürümünü çalıştırır ve komut satırı araçlarıyla aynı özelliklerin çoğunu sunar. AVIF'i diğer eski ve yeni biçimlerle kolayca karşılaştırmanızı sağlar. Ayrıca Squoosh'un Düğüm uygulamalarına yönelik bir KSA sürümü de vardır.

Ancak WebAssembly'nin henüz CPU'ların tüm temel performans öğelerine erişimi yoktur. Bu nedenle libavif'i en hızlı şekilde çalıştırmak istiyorsanız avifenc komut satırı kodlayıcısını öneririz.

AVIF görüntülerinin nasıl kodlanacağını anlamak için yukarıdaki örnekte kullanılan aynı kaynak resmi kullanan bir eğitici sunacağız. Başlamak için şunlara ihtiyacınız vardır:

Ayrıca zlib, libpng, ve libjpeg için geliştirme paketlerini yüklemeniz gerekir. Debian ve Ubuntu Linux dağıtımları için komutlar şunlardır:

sudo apt-get install zlib1g-dev
sudo apt-get install libpng-dev
sudo apt-get install libjpeg-dev

Komut satırı kodlayıcı avifenc oluşturma

1. Kodu alın

Libavif'in yayın etiketine göz atın.

git clone -b v0.9.1 https://github.com/AOMediaCodec/libavif.git

2. Dizini libavif olarak değiştirin

cd libavif

Derleme için avifenc ve libavif'i yapılandırmanın birçok farklı yolu vardır. libavif adresinde daha fazla bilgi bulabilirsiniz. Avifenc'i, AV1 kodlayıcı ve kod çözücü kitaplığı olan libaom'a statik olarak bağlı olacak şekilde derleyeceğiz.

3. Libaom alın ve derleyin

Libavif harici bağımlılıklar dizinine geçin.

cd ext

Bir sonraki komut, libaom kaynak kodunu çeker ve libaom'u statik olarak oluşturur.

./aom.cmd

Dizini libavif olarak değiştirin.

cd ..

4. Komut satırı kodlama aracı olan avifenc'i oluşturun

Avifenc için bir derleme dizini oluşturmak iyi bir fikirdir.

mkdir build

Derleme dizinine geçin.

cd build

Avifenc için derleme dosyalarını oluşturun.

cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 -DAVIF_CODEC_AOM=1 -DAVIF_LOCAL_AOM=1 -DAVIF_BUILD_APPS=1 ..

Avifenc geliştirin.

make

Avfenc'i başarıyla inşa ettiniz!

Avifenc komut satırı parametrelerini anlama

avifenc, şu komut satırı yapısını kullanır:

./avifenc [options] input.file output.avif

Bu eğiticide kullanılan avifenc için temel parametreler şunlardır:

Avifenc
--min. 0Renk için minimum miktar belirleyiciyi 0'a ayarla
--maks. 63Renk için maksimum miktar belirleyiciyi 63 olarak ayarla
--minalpha 0Alfa için minimum miktar belirleyiciyi 0'a ayarla
--maxalpha 63Alfa için maksimum miktar belirleyiciyi 63'e ayarla
-a end-usage=qOran kontrol modunu Sabit Kalite (Q) moduna ayarla
-a cq-level=QHem renk hem de alfa için nicelik seviyesini Q olarak ayarla
-a color:cq-level=QRenk için nicelik düzeyini Q olarak ayarla
-a alpha:cq-level=QAlfa için nicelik seviyesini Q olarak ayarla
-bir ayar=ssimSSIM için ayarla (varsayılan ayar PSNR'ye göre yapılır)
--iş fırsatları JJ çalışan iş parçacıklarını kullan (varsayılan: 1)
--speed SKodlayıcı hızını 0-10 arasında ayarlayın (en yavaş-en hızlı. varsayılan: 6)

cq düzeyi seçeneği, renk veya alfa kalitesini kontrol etmek için nicelik düzeyi (0-63) ayarlar.

Varsayılan ayarlarla AVIF görüntüsü oluşturma

Avifenc'in çalışması için en temel parametreler, giriş ve çıkış dosyalarının ayarlanmasıdır.

./avifenc happy_dog.jpg happy_dog.avif

Bir resmi kodlamak için, örneğin 18. düzeyde:

./avifenc --min 0 --max 63 -a end-usage=q -a cq-level=18 -a tune=ssim happy_dog.jpg happy_dog.avif

Avifenc'te hem kaliteyi hem de hızı etkileyen birçok seçenek var. Seçenekleri görmek ve bunlar hakkında daha fazla bilgi edinmek için ./avifenc uygulamasını çalıştırmanız yeterlidir.

Artık size ait bir AVIF resmi var!

Kodlayıcıyı hızlandırma

Makinenizde kaç tane çekirdeğin bulunduğuna bağlı olarak değiştirilmesi iyi olabilecek parametrelerden biri --jobs parametresidir. Bu parametre, avifenc'in AVIF görüntüleri oluşturmak için kaç iş parçacığı kullanacağını belirler. Bu komutu komut satırında çalıştırmayı deneyin.

./avifenc --min 0 --max 63 -a end-usage=q -a cq-level=18 -a tune=ssim --jobs 8 happy_dog.jpg happy_dog.avif

Bu işlem, avifenc'e AVIF görüntüsünü oluştururken 8 iş parçacığı kullanmasını bildirir. Bu işlem, AVIF kodlamasını yaklaşık 5 kat hızlandırır.

Largest Contentful Paint (LCP) üzerindeki etkiler

Resimler, Largest Contentful Paint (LCP) metriği için yaygın bir adaydır. LCP resimlerin yükleme hızını iyileştirmek için yaygın bir öneri, resmin optimize edildiğinden emin olmaktır. Bir kaynağın aktarım boyutunu küçülterek, resim biçimindeki LCP adaylarıyla çalışırken hedeflenecek dört temel aşamadan biri olan kaynak yükleme süresini iyileştirmiş olursunuz.

Web sitenizin derleme sürecinde görüntü optimizasyonu ardışık düzenleri oluşturmaktan veya resimleri elle optimize etmek için kodlayıcı ikili programlarını manuel olarak kullanmaktan çok daha az çaba gerektirdiği için resimleri optimize ederken resim CDN'si kullanmanız önemle tavsiye edilir. Ancak görüntü CDN'leri bazı projeler için maliyetli olabilir. Bu durumda, avifenc kodlayıcıyla optimizasyon yaparken aşağıdakileri göz önünde bulundurun:

  • Kodlayıcının sunduğu seçenekler hakkında bilgi edinin. Yeterli resim kalitesini korurken AVIF'in kullanılabilir kodlama özelliklerinden bazılarını deneyerek ek tasarruflar elde edebilirsiniz.
  • AVIF, hem kayıplı hem de kayıpsız kodlama sağlar. Bir resmin içeriğine bağlı olarak, bir kodlama türü diğerinden daha iyi performans gösterebilir. Örneğin, normalde JPEG olarak sunulan fotoğraflar muhtemelen kayıplı kodlamayla en iyi performans gösterirken kayıpsız kodlama, genellikle basit ayrıntılar veya normalde PNG olarak sunulan çizgi sanatı içeren resimler için en iyi seçenektir.
  • Imagemin için topluluk destekli bir paketleyici kullanıyorsanız paketleyicinizin AVIF resim varyantlarının çıktısını vermesini sağlamak için imagemin-avif paketini kullanmayı düşünün.

AVIF ile deneyler yaparak, LCP adayının bir resim olduğu durumlarda web sitenizin LCP sürelerinde bir iyileşme görebilirsiniz. LCP'yi optimize etme hakkında daha fazla bilgi için LCP'yi optimize etme rehberini okuyun.

Sonuç

Libaom, libavif ve diğer açık kaynak araçları kullanarak AVIF ile web siteniz için en iyi görüntü kalitesini ve performansını elde edebilirsiniz. Bu biçim hâlâ nispeten yeni ve optimizasyonlar ve araç entegrasyonları da aktif olarak geliştiriliyor. Sorularınız, yorumlarınız ve özellik istekleriniz için av1-discuss posta listesi, AOM GitHub topluluğu ve AVIF wiki üzerinden bize ulaşabilirsiniz.