12 Ocak 2018 Cuma

iPhoneX - Yeni Veri Sıkıştırma Yöntemleri

Bilgisayar ekranında, daha doğrusu dijital herhangi bir ortamda bir şeyler göstermenin sadece bir tek yolu vardır. Görüntüyü noktalara bölmek, ve her nokta için bir kırmızı, bir yeşil ve bir de mavi değeri hesaplayıp, bunları görüntü kartına yazmak.

Dijital grafik teknolojilerine yabancı okanlara biraz karışık gelmiş olabilir. Bir örnekle açıklayalım.

Ekranın en üst ve en soldaki noktasını kırmızı yapmak için, bu noktanın değerlerini 255,0,0 şeklinde belirlemek yeterlidir. İlk 255 kırmızı, sonraki 0 yeşil ve en son 0 da mavi değerleri olacaktır.

Bu görüntü sistemine RGB derler. İngilizcede Red, Green ve Blue, yani Kırmızı, Yeşil ve Mavi sözcüklerinin baş harfleri.

Ekranda gördüğünüz bütün renkler bu üç rengi karıştırarak elde edilir. Bu üç rengin değerleri arttıkça, ekrandaki noktanın rengi sırasıyla kırmızı, yeşil ve maviye azaldıkça ise sırasıyla cam göbeği (cyan), çingene pembesi (magenta) ve sarıya (yellow) doğru kayar. Bütün değerler en yukardayken beyaz, en aşağıdayken de siyah bir nokta elde ederiz. Ama konumuz renk teorisi değil.

Ekranda ister bir fotoğraf, ister bir video, isterse de bir bilgisayar oyunu görüntülüyor olalım, birilerinin görüntünün RGB değerlerini ekrana yazması gereklidir.

Hepimizin tanıdığı fizikçi Stephen Hawking'in, belki de en ünlü kitabı A Brief History Of Time'ın önsözünde şöyle yazar.

"Bir arkadaş (aklımda Kip Thorne diye kalmış ama yirmi sene geçti aradan, yanılmış olabilirim) kitabına koyduğun her formül okuyucularını yarı yarıya azaltacaktır dedi, ben de bunun üstüne sadece bir formül koydum: e=mc2"

Bu arada kitap best seller olmuş tabi...

Ben de aynı haltı yiyeceğim şimdi. Sizlere bir iki paragraflık matematik var aşağıda. İsteyen okumayıp, atlayabilir tabi...

RGB değerleri her renk başına 8 bit olan sistemlerde 2 üzeri 8, yani 0 ile 255 arasında 256 farklı değer alabilir. Kısaca 256 x 256 x 256 = 16.8 milyon farklı renk demektir bu. Böylece her nokta için de 3 x 8 bit = 3 bayt saklama alanı gerektirir.

4K videonun her karesi 3840 x 2160 çözünürlüğündedir. Bu da 8294400 nokta eder. Her nokta için üç bayt renk bilgisi dersek, 8294400 x 3 = 23.7 mecabayt/resim karesi saklama alamı gerekir.

iPhone X 4K videoyu 60 fps'de kaydediyor dedik, o zaman her saniye için 23.7 mecabayt/resim karesi x 60 kare/saniye = 1.4 cigabayt/saniye saklama alanı gerekir.

Ortalama bir film 1.5 saat diyelim, 1.5 x 60 x 60 = 5400 saniye, o da 5400 saniye x 1.4 cigabayt/saniye = 7.4 terrabayt kadar bir saklama alanı gerekir.

Kağıt kalem silahşörleri için 8 bit = 1 bayt, 1024 bayt = 1 kilobayt, 1024 kilobayt = 1 mecabayt, 1024 mecabayt = 1 cigabayt, 1024 cigabayt = 1 terrabayt. Metrik sistemin aksine kilo, mega, giga 1000, 1000 değil, 1024, 1024, yani iki üzeri on basamaklarıyla artar.

En büyük iPhone X'in kapasitesi 256 cigabayt olduğuna göre, başka hiç bir şey için kullanmadan, bu belleğe ancak üç dakika kadarlık bir 4K video sığar. Benim garip 64 cigabayt iPhone X'im bir dakikalık bir video bile kaydedemez demektir bu.

O zaman nasıl oluyor da oluyor değil mi?

Rahmetli babam emekli olduğunda almıştı ilk PC'mi bana. İşlemcisi anlı şanlı bir 8086 idi, gerçek 16 bit. Ekran monokrom olsa da, kartı renkliydi, bir CGA. Koç gibi 4 bit/piksel renk derinliği vardı, yani aynı anda en çok 16 renk! Bu gün 16 milyon rengi beğenmiyoruz.

Video, mideo gösteremezdi ama resim gösterebiliyordu. 200 x 200 piksel boyunda bir resim ekranı meredeyse tamamen doldururdu. 200 x 200 x 0.5 = 20 kilobaytı hop diye diske yazabiliyorduk o günlerde.

Bu ekranda gösterildiği hali ile diskte saklanan görüntü dosyalarının ismi ilerde, özellikle Windows 3 ile BMP, yani bit map diye anılır olmuştu.

Okulu bitirdim, evlendim, bir işim bile vardı. Finansal Analist olmuştum. İşte tam o aralar, JPEG diye bir takım görüntü dosyaları türedi.

Ekrandaki çözünürlükleri ile disk üzerindeki alanları bir birini tutmuyordu. Dosyaların boyu BMP denklerine göre sadece beşte biri, ya da altıda biri kadarlardı.

Zamanla anladık ki, JPEG formatı, BMP içeriğini alıp, sıkıştırıyormuş.

Bu sıkıştırma elmalı pasta yapıp, arkadaşınıza götürmek yerine pastanın tarifini götürmeye benziyor. Bir kağıt parçası taşımak, pastanın kendisini taşımaktan daha kolay ve az yer istiyor ama gittiğinizde arkadaşınızın çalışmasına, yani o tarife bakıp, pastayı hazırlamak zorunda kalmasına neden oluyor.

Kısaca BMP dosyaları, diskten alınıp cart diye grafik kartına gönderilebilirken, JPEG dosyalarının önce bir açılma sürecinden geçmeleri gerekiyor. Az yer kaplamanın karşılığında ödediğimiz bir bedel bu işte.

Neyse, ben sonrasında analistlikten şefliğe, şeflikten müdürlüğe terfi ettim. Üç ülke değiştirdim, boşandım, yeniden evlendim. On sene sonra bir çocuğum oldu. O çocuk iki buçuk yaşına geldi. İş değiştirdim, emekli olmama az kaldı.

Ama bu anasını sattığımın JPEG'i hala bizle...

Aynı Melih gibi. Gitmiyor abicim.

25 sene öncesinin zayıf bilgisayarlarını düşünerek hazırlanmış bu sıkıştırma usulü hala son sürat, Internet, Photoshop, kameralar, cep telefonları, vs, her yerde! Şu anki cebimdeki telefon, o zamanın bilgisayarlarından hiç abartmadan söylüyorum, binlerce kat daha hızlı. Ama JPEG hala aynı JPEG!

Videolar boyut ve kalite olarak çok çabuk büyüdüler, o yüzden iş başa düştü ve sıkıştırma teknolojileri JPEG'in aksine hemen gelişti. Çünkü sıkıştırma etkili bir şekilde yapılmazsa bilgisayarların hard diskleri bir film bile saklandığında tamamen doluyordu.

AVI ile başlayan video formatları MPEG2, Divx, H.264 gibi sıkıştırma derecesini her adımda artıran yeni türevleriyle günümüze kadar geldi.

Çok severim bu sıkıştırma işini. Amatör bir merakla bayağı da öğrenmiştim içini dışını, o yüzden bıraksanız sayfalarca anlatırım size. Ama konuyu dağıtmadan ana hatlarıyla bu sıkıştırma işi nasıl yapılıyor bakalım.

Elinize bir resim alıp dikkatlice bakın.

Resmi oluşturan milyonlarca noktanın hepsi birbirinden farklı mı?

Tabi ki hayır. Resimde bir masa varsa bu masanın görüntüsünü oluşturan noktaların bir çoğu aynı yada birbirine çok benzerler. Aynı ya da akın renkler, aynı ya da yakın parlaklıklar.

İşte başta JPEG, bir çok sıkıştırma yöntemi her nokta için ayrı ayrı RGB değerlerini saklamak yerine, arka arkaya birbirinin aynı noktaları gördüğünde ilkini yazıp, sonrasında da bu noktanın aynısından bilmem kaç tane daha var der.

Ciddi bir saklama alanı tasarrufu sağlar bu yöntem. Bir noktanın 100 kez arka arkaya kendini tekrarladığını varsayalım. Hiç de abartılı bir varsayım değildir bu. Bazen bir nokta kendisini binlerce kez tekrar eder, bulutsuz bir gökyüzü gibi örneğin.

Neyse. Kendini 100 kez tekrar eden bir noktayı saklamak için 3 x 100 = 300 bayt kullanmamız gerekir. JPEG ise ilk noktayı yazar, yani 3 bayt ve 100 kere tekrarladığı için 100 sayısını yazar. Bu 100 sayısı normalde bir bayta sığar ama hadi iki bayt diyelim. Bir iki bayt da bu 100'ün aslında tekrar sayısı, yani resim bilgisi olmadığını belirlemek için kullanılmış olsun, al takke ver külah 300 baytlık bilgi, 7 bayta sığmış olur.

Bazı durumlarda insan gözü iki nokta biraz farklı olsa da aradaki farkı görememe ya da ciddiye almama eğilimindedir. JPEG böyle noktaları da aynı sayar ve sıkıştırma daha etkin hale gelir. Ancak sıkıştırıp, açılan dosya artık orijinalinden farklı bir haldedir. Bu da çoğunlukla önemsiz, abartıldığında ise önemli bir kalite kayıbıma yol açar. Bu yüzden JPEG kayıplı (lossy) bir sıkıştırma yöntemi diye anılır.

Aslında arka arkaya çekilmiş sabit görüntülerden oluşan videoları da JPEG gibi sıkıştırabiliriz. Ama bir videoda o kadar çok resim vardır ki - en az saniyede 25 civarı, her fotoyu diğerleri yokmuş gibi baştan başlayıp sıkıştırsak da ortaya çıkan sıkıştırılmış dosya hala çok büyüktür, akla ziyan boyutlardadır.

İşin aslı videoyu böyle sıkıştıran bir codec (yöntem) var. Adı Motion Jpeg. Bir-iki saniyelik videolar için belki kabul edilebilir ama uzun videolar için facia bir codec'tir. İşte Canon'da bir salak - bu kelimeyi hakaret amaçlı değil, gerçek anlamı ile kullanıyorum, bir kaç bin dolarlık en yeni kameralarından biri olan 5D Mark IV da, 4K videoyu bu yöntemle sıkıştırıyor.

Insanlar videoyu karttan diske taşımak için yarım saat falan bekliyorlar. Editlemesi falan imkansıza yakın, saçma derecede yavaş hızlarda ilerliyor. Herkesin laptop'ları dev boyutlardaki videolar yüzünden doldu. Yani bir nefret yayıldı Canon'a karşı, bu aptalca yöntemi kullandıkları için.

Daha etkili bir sıkıştırma yöntemi ayrı ayrı resimleri değil, resimleri birbirleri ile karşılaştırarak sıkıştırmak.

Saniyede en az 25 kare çekilmiş bir videoda iki kare arasında, yani saniyenin 25'te birinde çok az şey değişir. Atıyorum, jönümüz içkisinden bir yudum alıyorsa, iki kare arasında sadece kolu bir iki milim ilerlemiştir. Bütün yudumlama sahnesi iki saniye sürsün, elli kareyi ayrı ayrı sıkıştırmaktansa, bir kareyi tam olarak sıkıştırıp, sonraki kareleri, ilk karenin görüntülerini kullanarak oluşturabiliriz.

Bu tam olarak sakladığımız karelere Key Frame ya da I-Frame derler. I-Frame'leri kullanarak oluşturduğumuz karelere de P-Frame derler. Bazen kullanacağımız I-Frame geçmişte değil, gelecekte de olabilir. Hem önce, hem sonraki I-Frameleri kullanılarak oluşturulabilen bu esnek karelere de B-Frame derler.

Şöyle bir toparlarsak bir video karesi sıkıştırılırken kendi içinde kare biçiminde parçalara ayrılır, bu parçalar başka karelerde aranır ve eğer bulunursa, görüntü değerleri yerine bulundukları diğer karedeki yerine bir referans şeklinde kodlanır.

Tipik bir parça 16x16 piksel boyunda olsun. Bu parça için her piksele üç bayttan 768 bayt saklama alanı gerekir. Eğer bu parçanın aynısı, ya da çok yakını başka bir karede bulunmuşsa yine atıyorum, 768 yerine 8 baytlık bir kodlama yetecektir.

Yazının başındaki sorumuza dönersek, işte bu sıkıştırma yöntemi sayesinde benim kıytırık 64 cigabayt iPhone X'im bir dakikalık 4K video ile dolmuyor.

Yukarda anlattıklarımı n'olur kelimesi kelimesine almayın. Anlaşılır olsun diye o kadar çok sadeleştirme yaptım ki, söylediklerim eksik ile yanlış arasında gidip geliyorlar. Eğer bu sıkıştırma işlerine ilginiz varsa bir şişe şarap alıp, gelin bana. Saatlerce anlatırım hiç sıkılmadan.

Bu yazdıklarımın iPhone X ile ne ilgisi var diye sorarsanız...

iPhone X, ya da daha doğru bir deyişle iOS 11, 25 yıl sonra JPEG'e bir alternatif getirdi, çok şükür!

Bu yeni sistemin ismi HEIF. High Efficiency Image Format kelimelerinin baş harfleri. Bazen Image ile Format kerimelerinin arasına bir de File sokuyorlar.

JPEG den üç kat daha etkin sıkıştırıyor, JPEG'in 24 bitlik renk derinlik sınırını çöpe atıp 30 bit, yani 2 üzeri 30, yani bir milyar renk seçeceği sunuyor. Bu aşamada çüş deyip oturuyoruz hep beraber.

Benzeri biçimde videolar da HEVC, yani High Efficiency Video Coding dedikleri bir sistemle sıkıştırılıyor. Bu sistem bir önceki MPEG-4 ya da H.264'e göre iki kat daha iyi sıkıştırıyor.

Hattızatında hem HEIF, hem de HEVC, H.265 isimli sistemin parçaları.

Yeni bir sistem her zaman yeni sorunları beraberinde getirir. HEIF ile gelen en ciddi sorun da HEIF'in nasıl telaffuz edileceği 😛

Bu sıkıştırma sistemlerini isimlendiren sadist bir merci var bence. Böyle ucubik isimler bulup insanları kavga ettiriyorlar.

JPEG uzun süre bizim memlekette "Jii-peg" diye telaffuz edildi. Tahmin edeceğiniz üzere bunlar hep cigabaytçıların babalarının işi. Doğrusu "ceypeg", vesiyle ile yazmış olalım.

GIF diye başka bir popüler format bulunur. Bizde Avanak Avni gibi "gıf" derler, halbuki İngilizcedeki I harfinin i harfinin büyük yazılışı olduğunu bilselerdi "gif" diyecekler, ve en azından yüzde elli doğrusunu tutturacaklardı.

GIF Graphics Interchange Format'ın baş harfleridir.

İşin acı tarafı, kendisi de çalıntı bir dil olan İngilizce'de G harfinin okunuşu için kesin bir kural bulunmaz.

İçinde G'nin geçtiği sözcük Yunancadan çalınmışsa "g", Latinceden çalınıp, e, i gibi harflerden önce yazılmışsa "c" gibi okunur, ama yüzlerce istisnası ile...

Böylece dünyada GIF'ı görenlerin kimi "gif", kimi "cif" diye okur. Cif biraz daha dilin fonetiğine yakın, ama gif de g'nin kaynağı olan Graphics'n telaffuzuna bakınca daha doğru gibi görünüyor?. Bu arada Graphics Gırafiks diye okunuyor, Cırafiks değil (cigabaytçılar nasıl korkuttuysa gözümü).

Bu HEIF de çıktı çıkalı, “Hayf”, “Heyf”, “Eyf” başta, bir dolu varyasyonunu duydum. Bu codec’i yazan adamlar “Hiif” diye söylüyor. Doğrusu bu dersek yanılmış olmayız herhalde.

Resimlerin üç, video'ların iki kat küçüleceği bu yeni sistemi bayağı merak etmiştim. İlk iş bir iki fotoğraf çekip, bilgisayara aktardım. Boylarına bir baktım, hiç de öyle küçük durmuyorlar. Bir de dosya isimlerine baktım, hepsi JPEG!

Lan ben bir setting'le mi oynadım? Yanlış bir şey mi yaptım! Nerede benim "Hayk" dosyalarım (HEIF formatımdaki dosyalar HEIC dosya tipi ile saklanıyor. Sonundaki C, Container'ın baş harfi)?


İki saat gugıllayıp çözdüm olayı.

Bu HEIF formatı şu sıralar sadece Apple tarafından destekleniyor. Örneğin web sitenize koyduğunuz bir HEIC dosyasını tarayıcılar henüz gösteremiyor, Facebook'a, Instagram'a post edemiyorsunuz, Photoshop ya da Lightroom'la açamıyorsunuz (ancak Photoshop Touch ve Lightroom Mobile - ya da bugün Adobe onları hangi isim ile çağırıyorsa artık, bu dosyalarla çalışabiliyor).

Böylece hep beraber bu yeni format tamamen desteklenene kadar bir geçiş dönemi yaşamamız gerekiyor.

Apple bu işi çok elegant bir biçimde çözmüş. Apple ekosisteminde kaldığınız sürece bu HEIF formatının az yer kaplama, yüksek renk derinliği fakan gibi nimetlerinden faydalanıyorsunuz. Ancak Apple sisteminin dışına çıktığınız an sistem hemen bu dosyaları cart diye JPEG'e çeviriyor.

HEIC dosyalarını görmek istiyorsanız, USB ile bilgisayara bağlanın, Photos aplikasyonu ile fotoları import edin. Last Import modunda bütün resimleri seçip, Export Original File seçeneği ile bir folder'a resimleri bu yeni format ile saklayabilirsiniz.

Tabi burada asıl soru, HEIF ve HEVC gerçekten söylendiği kadar etkin bir sıkıştırma yapabiliyor mu?

Ben sadece resimleri karşılaştırdım. Bire bir JPEG dosyaların üçte biri kadar küçük dosyaları gözümle gördüm.

Peki bu küçük dosyaların JPEG denklerine göre bir kalite kaybı var mı?

Apple yok diyor.

Ben bir iki resmi iki formatta da çekip, piksel peeping yaptım. Çok derine inerseniz iki resim arasında çok az bir görüntü farkı var, ancak hangisi daha kaliteli, en azından ben söyleyemedim.

Web üzerinde üç beş Çinli piksel piksel karşılaştırınca JPEG çok az biraz daha kaliteli diye video koymuşlar. Açıkçası ben aynı sonucu teyit edemiyorum. Apple'ın bizi kandırıp, üç beş uyanık Çinlinin de bunu bulması pek gerçekçi gelmiyor bana.

Kim bilir, biraz zaman geçsin bakalım.

iPhone X'in kamerası 10 bit per channel çekebiliyor. HEIF de JPEG'in aksine 10 bit per channel saklayabiliyor. Apple eğer 10 bit saklayabilecekken 8 bit'e cripple etmemişse HEIF'in JPEG'den daha bile kaliteli olması gerekir.

HEIF'nin yada HEIC'nin başka bir güzelliği bir container olması. Yani içine birden fazla farklı şeyler koyabiliyor olmanız.

Örneğin portre modundaki derinlik haritası da ayrı bir dosyaya gerek kalmadan HEIC içinde saklanıyor, hem de sıkıştırılmış olarak.

HEIC'in Apple'ı mutlu eden başka bir uygulama alanı Live Photo denilen resimlerin de tek bir dosyada toplanabilmesi.

Bu Live Photo özelliği, bende nefret ve şiddet duyguları oluşturan, bir iPhone ya da iPad alır almaz kapadığım bir özellik. Ne hangi an fotoğraf çektiğinizi bilirsiniz, ne şimdiye kadar temiz çıkan bir örneğini gördüm. 🐝Mezzy🐝 'nin gülüşünü yakalarım eğer ve cırt, çekerim resmi. Live açıksa ya kızım kafasını çevirirken çıkar, ya kolunu kaldırırken.

Eyy Apple!

Hareketli bir şey istesem video çekerim. Sabit istediğimde de çektiğim anı görmek. Kaldırın şu saçmalığı kurban olayım. Kapasam da birinin burnu, kolu, parmağı çarpıyor, istemeden yeniden aktif oluyor.

Yazımızı sonlandırmadan bir beyanım daha olacak.

Dikkat ettiyseniz bu yeni sıkıştırma yöntemlerinin telefonunuzun kapasitesinin düşünerek size rahatlatabileceği konusuna hiç değinmedim.

Çünkü daha az yer kaplayan dosyaların telefonda yer sorununu çözeceğini düşünmüyorum.

İki olasılık vardır sevgili arkadaşlar.

Ya düzenli olarak resimlerinizi, videolarınızı bilgisayara aktarıp, telefonunuzun belleğini rahatlatan birisinizdir, ya da her şeyi telefonda bırakıp, bellek dolana kadar hiç bir şeyi silmeyen biri.

İlk guruptakiler zaten sıkıştırma formatı ne olursa olsun bellek sorunu çekmezler. İkinci guruptakiler de sıkıştırma formatı ne olursa olsun her daim bellek sıkıntısı çekerler. HEIF, HEVC ikinci guruptakilere belki bir kaç ay daha rahat etme imkanı sunar, o kadar.

Yeni sıkıştırma formatımız işte böyle.

Bir sonraki yazımızda toparlayıp, otuz iki kısım tekmili birden sagamızı bitireceğiz.

Sevgi ile kalın.

Hiç yorum yok:

Yorum Gönder

Sadece bir "Hayır" sözcüğü

1959 yılında El Comandante, yani yoldaş Fidel, Küba’da ABD’nin kankası diktatör Fulgencio Batista’ta karşı gerçekleştirdiği devrim sonrasınd...