Dosya Sıkıştırma Nasıl Çalışır?
Yazılım mühendisleri her zaman birçok veriyi küçük bir alana sığdırmanın yeni yollarını geliştirdiler. Sabit disklerimizin küçücük olduğu ve internetin ortaya çıkmasının daha kritik hale geldiği zamanlar doğruydu. Dosya sıkıştırma bize bağlanmamızda büyük rol oynar, böylece daha az veri gönderebiliriz, böylece daha hızlı indirme yapabilir ve yoğun ağlara daha fazla bağlantı kurabiliriz.
Peki nasıl çalışır??
Bu soruyu cevaplamak, bu makalede ele alabileceğimizden kesinlikle çok daha karmaşık bazı matematik açıklamalarını içerir, ancak temelleri anlamak için matematiksel olarak nasıl çalıştığını tam olarak anlamanıza gerek yoktur..
Metni sıkıştırmak için en popüler kitaplıklar, her ikisi de aynı anda çok yüksek sıkıştırma oranları elde etmek için kullanılan iki sıkıştırma algoritmasına dayanır. Bu iki algoritma “LZ77” ve “Huffman kodlaması” dır. Huffman kodlaması oldukça karmaşık ve burada bununla ilgili detaylı bir ayrıntıya girmeyeceğiz. Öncelikle, daha kısa atamak için bazı süslü matematik kullanır ikili kodlar Bireysel harflere, işlem sırasında dosya boyutlarını küçültmek. Bu konuda daha fazla bilgi edinmek istiyorsanız, kodun nasıl çalıştığına dair bu makaleyi veya Computerphile'ın bu açıklayıcısını inceleyin..
LZ77, diğer taraftan, nispeten basittir ve burada konuşacağımız şeydir. Yinelenen sözcükleri kaldırmayı ve bunları sözcüğü temsil eden daha küçük bir "anahtar" ile değiştirmeyi amaçlamaktadır.
Bu kısa metni al, örneğin:
LZ77 algoritması bu metne bakar, “howtogeek” i üç kez tekrarladığını fark eder ve şöyle değiştirir:
Ardından, metni geri okumak istediğinde, (h) 'nin her bir örneğini “howtogeek” ile değiştirir, orijinal ifadeye geri getirir.
Buna "kayıpsız" gibi bir sıkıştırma diyoruz - girdiğiniz veriler çıkardığınız verilerle aynı. Hiçbir şey kaybolmadı.
Gerçekte, LZ77 bir anahtar listesi kullanmaz, fakat bunun yerine ikinci ve üçüncü olayları bellekte bulunan bir bağlantıyla değiştirir:
Şimdi, (h) ye geldiğinde, “howtogeek” e geri dönecek ve bunun yerine okuyacak.
Daha ayrıntılı bir açıklama ile ilgileniyorsanız, Computerphile'dan gelen bu video oldukça faydalıdır..
Şimdi, bu ideal bir örnek. Gerçekte, çoğu metin yalnızca birkaç karakter kadar küçük tuşlarla sıkıştırılır. Örneğin, “o” kelimesi “orada”, “onların” ve “o zaman” gibi sözcüklerde göründüğü halde bile sıkıştırılır. Tekrarlanan metinlerle bazı çılgın sıkıştırma oranları elde edebilirsiniz. Bu metin dosyasını “howtogeek” kelimesi ile 100 kez tekrarladı. Orijinal metin dosyasının boyutu üç kilobayttır. Sıkıştırıldığında, yalnızca 158 bayt alır. Bu neredeyse% 95 sıkıştırma.
Şimdi açıkçası, bu aynı zamanda tekrar tekrar aynı kelimeyi tekrar ettiğimiz için oldukça uç bir örnek. Genel pratikte, çoğunlukla metin içeren bir dosyada ZIP gibi bir sıkıştırma biçimi kullanarak muhtemelen% 30-40 oranında sıkıştırma elde edersiniz.
Bu LZ77 algoritması, tüm metinler için geçerlidir, bu arada, sadece metin için değil, çoğu dilde kaç tane tekrarlanan kelime kullandığından dolayı genellikle metin sıkıştırması daha kolaydır. Çince gibi bir dil, örneğin İngilizceye göre biraz daha zor olabilir..
Görüntü ve Video Sıkıştırma Nasıl Çalışır??
Video ve ses sıkıştırma çok farklı çalışır. Kayıpsız sıkıştırma yapabildiğiniz ve hiçbir veri kaybına uğramayacağınız metinlerin aksine resimlerde, bazı verilerinizi kaybettiğiniz yerde “Kayıp Sıkıştırma” olarak adlandırdığımız şeye sahibiz. Sıkıştırdıkça daha fazla veri kaybedersiniz..
Bu, insanların birçok kez yüklediği, paylaştığı ve ekran görüntüsü aldığı korkunç görünümlü JPEG'lere yol açan şeydir. Görüntü her sıkıştırıldığında, bazı verileri kaybeder.
İşte bir örnek. Bu, sıkıştırılmamış bir ekran görüntüsü..
Daha sonra bu ekran görüntüsünü aldım ve Photoshop'u her seferinde düşük kaliteli bir JPEG olarak dışa aktararak defalarca çalıştım. İşte sonuç.
Oldukça kötü görünüyor?
Eh, bu sadece her zaman% 0 JPEG kalitesinde ihracat, en kötü durum senaryosudur. Karşılaştırma için,% 50 kalite JPEG, kaynak PNG görüntüsünden neredeyse ayırt edilemeyen ve onu havaya uçurup yakından bakmadığınız sürece.
Bu görüntünün PNG boyutu 200 KB, ancak bu% 50 kaliteli JPEG yalnızca 28 KB.
Peki nasıl bu kadar yer kazanıyor? Peki, JPEG algoritması bir mühendislik harikasıdır. Çoğu resim, her biri tek bir pikseli temsil eden bir numara listesi depolar..
JPEG bunların hiçbirini yapmaz. Bunun yerine, görüntüleri değişen yoğunluklarda bir araya getirilen sinüs dalgaları topluluğu olan Ayrık Kosinüs Dönüşümü adı verilen bir şey kullanarak depolar. 64 farklı denklem kullanır, ancak bunların çoğu kullanılmaz. JPEG ve Photoshop'taki diğer görüntü uygulamalarında JPEG için kalite kaydırıcısının yaptığı şey, kaç denklem kullanacağını seçiyor. Uygulamalar daha sonra dosya boyutunu daha da azaltmak için Huffman kodlamasını kullanır.
Bu, JPEG'lere çılgınca yüksek bir sıkıştırma oranı verir; bu, kaliteye bağlı olarak birden fazla megabaytlık bir dosyayı birkaç kilobayta düşürür. Elbette, çok fazla kullanırsanız, bununla sonuçlanırsınız:
Bu görüntü korkunç. Ancak küçük miktarlarda JPEG sıkıştırması dosya boyutu üzerinde önemli bir etkiye sahip olabilir ve bu JPEG'i web sitelerinde görüntü sıkıştırması için çok kullanışlı kılar. Çevrimiçi gördüğünüz çoğu resim, özellikle zayıf veri bağlantısı olan mobil kullanıcılar için indirme süresinden tasarruf etmek için sıkıştırılmıştır. Aslında, Nasıl Yapılır Geek'teki tüm görüntüler, sayfa yüklemeyi daha hızlı yapmak için sıkıştırılmıştır ve muhtemelen hiç fark etmediniz.
Video sıkıştırma
Video görüntülerden biraz farklı çalışır. JPEG’i kullanarak her video karesini yalnızca sıkıştıracağını düşünürdünüz ve kesinlikle bunu yapıyorlar, ancak video için daha iyi bir yöntem var.
Her kare arasındaki değişiklikleri hesaplayan ve sadece bunları depolayan “çerçeveler arası sıkıştırma” denilen bir şey kullanıyoruz. Bu nedenle, örneğin, bir videoda birkaç saniye süren göreceli olarak hala bir çekiminiz varsa, sıkıştırma algoritmasının değişmeyen sahnede saklaması gerekmediğinden çok fazla alan kazanır. Çerçeveler arası sıkıştırma, dijital TV ve web videosumuzun asıl nedeni. Onsuz videolar YouTube’un piyasaya sürüldüğü 2005’teki ortalama sabit sürücü boyutundan daha fazla, yüzlerce gigabayt olacak.
Ayrıca, çerçeveler arası sıkıştırma çoğunlukla sabit videoyla en iyi şekilde çalıştığından, konfeti video kalitesini bozar..
Not: GIF bunu yapmaz; bu nedenle animasyonlu GIF'ler genellikle çok kısa ve küçüktür, ancak yine de oldukça büyük bir dosya boyutuna sahiptir..
Video hakkında akılda tutulması gereken bir başka şey, bit hızı - her saniyede izin verilen veri miktarı. Bit hızınız 200 kb / s ise, örneğin, videonuz oldukça kötü görünecektir. Bit hızı arttıkça kalite artar, ancak saniyede birkaç megabayttan sonra azalan getiriler elde edersiniz.
Bu, bir denizanası videosundan çekilmiş, yakınlaştırılmış bir çerçevedir. Soldaki 3 MB / sn, sağdaki 100Mb / sn'dir..
Dosya boyutunda 30x artış, ancak kalitesinde fazla bir artış yok. Genel olarak, YouTube videoları bağlantınıza bağlı olarak 2-10Mb / s civarında oturur, çünkü daha fazla bir şey farkedilmez.
Bu demo gerçek videoyla daha iyi çalışır, bu yüzden kendiniz incelemek isterseniz, burada kullanılan aynı bit hızı test videolarını indirebilirsiniz..
Ses sıkıştırma
Ses sıkıştırma, metin ve resim sıkıştırmasına çok benzer şekilde çalışır. JPEG'in görmeyeceğiniz bir görüntüdeki ayrıntıları kaldırdığı durumlarda, ses sıkıştırma aynı sesler için de geçerlidir. Eğer gerçek gitar çok, çok daha sesliyse, gitar çalan ipinin ipteki sesini duymanız gerekmeyebilir..
MP3 ayrıca, 48 ve 96 kb / sn (düşük uç) düşük ucundan 128 ve 240kb / sn (oldukça iyi) ile 320kb / sn (üst uç ses) arasında değişen bit hızını kullanır ve bu farkı yalnızca son derece iyi kulaklıklarla duyarsınız ( ve kulaklar).
Tamamen kayıpsız ses sağlamak için LZ77 kodlamasını kullanan FLAC olan ses için kayıpsız sıkıştırma kodeki de vardır. Bazı insanlar FLAC'ın mükemmel ses kalitesine yemin eder, ancak MP3 sıklığı ile çoğu insan farkı söyleyemez veya umursamaz.