FLAC Sıkıştırması Nasıl Kayıpsız Olabiliyor? Sezgiye Aykırı Bir Açıklama
5 dk okuma
Sezgiye aykırı gelen soru
"Dosya yarı yarıya küçülüyor ama hiçbir şey kaybolmuyor" cümlesi ilk duyulduğunda mantıksız gelir. Bir şeyi yarıya indirdiğinizde bir şeyler gitmiş olmalı, değil mi?
Aslında hayır. Ve bunu anlamak için önce sıkıştırmasız verinin ne kadar savurgan olduğunu görmek gerekiyor.
WAV neden bu kadar savurgan?
Bir WAV dosyası, ses dalgasının saniyede 44.100 kez ölçülmüş anlık genlik değerlerini içerir. Her ölçüm 16 bitlik bir sayı olarak yazılır — yani -32768 ile +32767 arasında bir değer.
Şimdi kritik nokta: komşu ölçümler birbirinden çok farklı değildir.
Ses dalgası fiziksel bir olgudur; hava basıncı bir anda -30000'den +30000'e sıçramaz. Ardışık örnekler genellikle birbirine yakındır. Ama WAV bunu umursamaz — her örneği tam 16 bitle, sanki tamamen bağımsız bir sayıymış gibi yazar.
İşte sıkıştırılabilir alan burada. Veri, taşıdığı bilgiden çok daha fazla yer kaplıyor.
FLAC'ın temel fikri: farkı kaydet
Basit bir örnekle başlayalım. Elinizde şu ardışık örnekler olsun:
1000, 1005, 1009, 1012, 1014, 1015
Bunları olduğu gibi yazarsanız, her biri için tam bir 16 bitlik alan harcamanız gerekir. Ama aralarındaki farkları yazarsanız:
1000, +5, +4, +3, +2, +1
İlk değer dışında hepsi tek haneli. Bu sayıları yazmak için 16 bit gerekmiyor — 4-5 bit fazlasıyla yeter. Ve hiçbir bilgi kaybolmadı: ilk değeri ve farkları biliyorsanız orijinal diziyi tam olarak geri hesaplarsınız.
FLAC'ın yaptığı şey, bunun çok daha gelişmiş bir versiyonudur.
Doğrusal öngörü: tahmin et, farkı yaz
FLAC basitçe komşu farkı almaz. Bunun yerine her ses bloğu için bir tahmin modeli kurar.
Model şu soruyu yanıtlar: "önceki birkaç örneğe bakarak bir sonraki örneğin ne olacağını en iyi nasıl tahmin ederim?" Buna doğrusal öngörü (linear prediction) denir. Kodlayıcı, o blok için en iyi çalışan katsayıları hesaplar.
Sonra şunu kaydeder:
- Model katsayıları (blok başına birkaç sayı — çok az yer kaplar).
- Artık değerler (residual): Modelin tahmini ile gerçek örnek arasındaki fark.
Model iyi çalışıyorsa artıklar küçük sayılardır. Ve küçük sayılar az bit ister.
Kayıp neden olmuyor?
Bu sorunun cevabı, işlemin tam aritmetikle yapılmasıdır.
Çözücü, dosyada saklanan model katsayılarını okur ve kodlayıcının yaptığı tam olarak aynı tahmini yapar. Sonra kaydedilmiş artığı bu tahminin üzerine ekler:
gerçek örnek = tahmin + artık
Hiçbir yuvarlama, hiçbir yaklaşım, hiçbir "yeterince yakın" yok. Tam sayı aritmetiği kullanıldığı için sonuç, orijinal örneğin kendisidir. Her seferinde, her örnek için.
Kayıplı formatlarla arasındaki fark tam olarak budur. MP3, "bu bilgiyi atarsam kimse fark etmez" der ve gerçekten atar. FLAC ise "bu bilgiyi daha kısa yazabilirim" der ve hiçbir şey atmaz.
Artıkları verimli kodlamak
Son adımda FLAC, artık değerleri bir entropi kodlamasıyla yazar. Bu kodlama, küçük değerlerin sık, büyük değerlerin nadir olduğu bir dağılım için optimize edilmiştir — ki ses artıkları tam olarak böyle dağılır.
Yani sık görülen küçük değerler çok az bitle, nadir görülen büyük değerler daha fazla bitle yazılır. Ortalama bit sayısı ciddi biçimde düşer.
Sıkıştırma seviyesi ne yapıyor?
FLAC'ın 0-8 arası sıkıştırma seviyesi, kodlayıcının ne kadar çaba harcayacağını belirler:
- Kaç farklı tahmin modeli deneyecek?
- Blok boyutlarını nasıl seçecek?
- Kanallar arasındaki ilişkiden yararlanacak mı (stereo kayıtlarda sol-sağ yerine orta-yan kodlaması genelde daha iyi sıkışır)?
Yüksek seviyede kodlayıcı daha fazla seçenek dener ve en iyisini seçer. Bu daha uzun sürer ve biraz daha küçük dosya üretir.
Ama kalite hiç değişmez. Seviye 0 ile seviye 8 arasında üretilen dosyalar açıldığında birebir aynı PCM verisini verir. Seviye bir kalite ayarı değil, bir hesaplama bütçesi ayarıdır.
Çözme tarafında ise seviye farkı neredeyse hiç hissedilmez; her seviyedeki dosya hızla açılır.
Sıkışma oranı neden değişiyor?
Artık cevabı biliyorsunuz: öngörülebilirlik.
- Konuşma, akustik solo, sessiz pasajlar: Dalga yapısı düzgün, tahmin isabetli, artıklar küçük. Çok iyi sıkışır.
- Klasik müzik, oda kaydı: Dinamik geniş ama yapı düzenli. İyi sıkışır.
- Yoğun rock/elektronik mix, ağır mastering: Sinyal doygun ve karmaşık, tahmin zorlanır. Kazanç düşer.
- Beyaz gürültü: Tanım gereği öngörülemez. Neredeyse hiç sıkışmaz.
Kaydınız az sıkıştıysa yanlış bir ayar seçtiğiniz anlamına gelmez — kaydın doğası öyledir.
Kayıplı sıkıştırmayla arasındaki temel ayrım
Buraya kadar anlatılanı bir kez de karşılaştırmalı olarak koymakta fayda var, çünkü karışıklığın kaynağı genelde burasıdır.
MP3 gibi kayıplı bir kodlayıcı şu soruyu sorar: "Bu bilgiyi atarsam dinleyici fark eder mi?" İnsan işitmesinin modellerini kullanarak, duyulma olasılığı düşük bileşenleri tespit eder ve gerçekten siler. Kazanç büyüktür — dosya birkaç kat küçülür — ama silinen veri dosyanın içinde hiçbir yerde kalmaz. Bir MP3'ü daha sonra FLAC'a çevirseniz bile o bilgi geri gelmez, çünkü geri getirilecek bir şey yoktur.
FLAC gibi kayıpsız bir kodlayıcı ise farklı bir soru sorar: "Bu bilgiyi daha kısa nasıl yazabilirim?" Hiçbir şey atmaz, sadece anlatımı verimleştirir. Kazanç daha mütevazıdır — kabaca yarı boyut — ama geri dönüş tamdır.
İki yaklaşım da meşrudur, sadece farklı amaçlara hizmet eder. Taşınabilir dinleme için kayıplı format mantıklıdır; arşiv ve prodüksiyon için kayıpsız format gerekir. Karıştırılmaması gereken nokta şudur: kayıpsız bir formata geçmek, daha önce kayıplı bir formatta kaybedilmiş veriyi geri getirmez. Sadece bundan sonrasını korur.
FLAC ile ZIP arasındaki fark
Bir WAV dosyasını ZIP'lerseniz de kayıpsız sıkıştırma yapmış olursunuz. Ama kazanç genelde çok düşüktür.
Sebep: ZIP genel amaçlıdır, tekrar eden bayt dizileri arar. Bir metin dosyasında "the" kelimesi yüzlerce kez geçtiği için harika çalışır. Ses verisinde ise birebir tekrar eden bayt dizileri neredeyse hiç bulunmaz.
FLAC ise verinin ne olduğunu bilir. Bayt kalıbı değil, dalga yapısı arar. Bu alan bilgisi, aradaki büyük performans farkını açıklar.
Bir bonus: bütünlük doğrulaması
FLAC her bloğa ve dosyanın tamamına sağlama değerleri yazar. Bu, WAV'da olmayan gerçek bir avantajdır.
Yıllar sonra bir arşiv diskini açtığınızda FLAC dosyalarınızın hâlâ sağlam olup olmadığını kesin olarak doğrulayabilirsiniz. WAV'da bozulan bir bölge sessizce yanlış ses üretir; bunu fark etmeniz için dosyayı baştan sona dinlemeniz gerekir.
Özetle
FLAC, ses verisinden hiçbir şey atmadan yer kazanır çünkü sıkıştırmasız PCM zaten savurgandır: her örneği bağımsızmış gibi tam boyutta yazar, oysa komşu örnekler birbirine sıkı sıkıya bağlıdır. FLAC bu bağlantıyı bir tahmin modeliyle yakalar ve yalnızca tahmin hatasını kaydeder. Çözerken aynı tahmin tekrarlanıp hata geri eklendiğinde orijinal veri tam olarak geri gelir. Bu yüzden WAV FLAC dönüştürme aracımızı gönül rahatlığıyla kullanabilirsiniz: kaybettiğiniz tek şey disk alanı olur.
Sıkça Sorulan Sorular
Sıkıştırma seviyesi 8 seçersem ses kalitesi seviye 0'dan farklı olur mu?
Hayır, ses tamamen aynı olur. Sıkıştırma seviyesi yalnızca kodlayıcının kaç farklı tahmin modeli deneyeceğini ve blok boyutlarını nasıl seçeceğini belirler. Hangi seviyeyi seçerseniz seçin, dosyayı açtığınızda elde ettiğiniz PCM verisi orijinaliyle bit bit aynıdır. Tek fark dosya boyutunda ve kodlama süresindedir.
Neden bazı dosyalar çok az sıkışıyor?
FLAC, ses dalgasının öngörülebilir kısmından kazanç sağlar. Bir kayıt ne kadar düzenli ve tahmin edilebilir bir yapıya sahipse, tahmin modeli o kadar isabetli olur ve kaydedilecek fark değerleri o kadar küçük kalır. Gürültü içeren, çok yoğun veya aşırı sıkıştırılmış mastering yapılmış kayıtlarda tahmin zorlaşır ve kazanç düşer. Beyaz gürültü pratikte hiç sıkışmaz çünkü tanımı gereği öngörülemezdir.
FLAC ile ZIP arasındaki fark ne?
İkisi de kayıpsızdır ama farklı veri türleri için optimize edilmiştir. ZIP genel amaçlıdır ve tekrar eden bayt dizilerini arar; ses verisinde bu tür tekrarlar nadirdir, bu yüzden bir WAV'ı ZIP'lemek genellikle çok az kazanç sağlar. FLAC ise ses sinyalinin dalga yapısını bilir, komşu örnekler arasındaki matematiksel ilişkiyi modelleyerek çok daha yüksek sıkışma elde eder.
FLAC dosyamın bozulup bozulmadığını nasıl anlarım?
FLAC her bloğa ve dosyanın tamamına sağlama değerleri yazar, bu yüzden bütünlük doğrulaması yapan araçlarla dosyanızın sağlam olup olmadığını kesin biçimde kontrol edebilirsiniz. Bu, uzun süreli arşivlemede WAV'a göre önemli bir avantajdır çünkü WAV'da bozulan bir bölge sessizce yanlış ses üretir ve fark etmeniz için baştan sona dinlemeniz gerekir.
Bu konuyu WAV → FLAC Dönüştür aracıyla hemen deneyin.
WAV → FLAC Dönüştür aracını dene