- Published on
Yapay Zeka ile Video Kodlamayı Geliştirme - Bölüm 1/6
Bu yazı serimizde yapay zeka ile video kodlamayı nasıl geliştirebileceğimiz hakkında konuşacağız. İlk olarak internetten video aktarmanın olmazsa olmazı video kodlama hakkkında ufak bir tanıtım ile başlıyoruz.
Miftah-ı Kelam: Video Kodlamaya Giriş
Video'nun Internet'in vazgeçilmez bir parçası haline geldiği hepimizce aşikardır. İstatistiklere baktığımızda da bunu destekleyen verilerle karşılaşıyoruz. 2022 yılına baktığımızda, tüm Internet trafiğinin %82'sini video içeriğinin oluşturduğunu görüyoruz. Üstüne üstelik, bu oranın gün geçtikçe artacağına dair ortak kanı da mevcut. Zaten, hali hazırda videoya maruz kalmadan tek bir gün geçirmek pek de mümkün değil. Twitter ana sayfamızdaki bir kısa videodan, Instagram canlı yayınına, herhangi bir haber sitesindeki günün özeti videosundan, gün sonundaki YouTube keyfimize kadar; video artık günlük Internet kullanımımızın mihenk taşı haline gelmiş durumda.
Temeline baktığımzda, video aslında ardışık resimlerin hızlı bir şekilde gösterilmesidir. Bu sayede görsele hareket ediyormuş hissiyatı verilir. Videoyu oluşturan her bir resme Video karesi (frame) adı verilir.
Bazılarımız hatırlayacaktır, küçüklüğümüzde her bir sayfasına ayrı bir resim çizilmiş ufak defter olurdu. Bu sayfaları parmağımızla hızlıca çevirince defterdeki karakter hareket ediyormuş gibi gözükürdü gözümüze. Dijital dünyaya baktığımızda da video dediğimiz şeyin temel mantığı bununla aynı zaten. Kamerayı alıp birbiri ardına bir sürü resim çekiyoruz ve onları sırayla gösteriyoruz.
Günümüzde tipik bir videoda saniyede yaklaşık 30 video karesi bulunur. Eğer video bir dakika uzunluğundaysa toplam 1800 adet (30 kare * 60 saniye) kareden oluşur. 1920x1080 piksel (1080p) boyutlarına sahip tek bir resmin yaklaşık 4 MB yer kapladığını düşünürsek, aynı şekilde devam edersek 1800 adet kareden oluşan bir 1080p videonun da 7200 MB boyuta sahip olmasını bekleriz. Lakin, günümüzde bir dakikalık 1080p videonun ortalama boyutu 25-30 MB arası oluyor ve görsel olarak da gayet güzel duruyorlar. Peki görsel kaliteyi korurken, bir yandan da boyutunu böylesine azalabilmesini sağlayan nedir? El-cevap, **video kodlama (*video encoding*)**.
Video kodlama, video boyutunu azaltmayı amaçlayan çok adımlı bir sürecin adıdır. Video içeriğini, her bir kareyi ayrı ayrı işlemeye nazaran çok daha az veri kullanarak ifade etmemizi sağlayan temel unsur, videodaki hareket ve kareler arasındaki yüksek benzerliktir. Video kodlamadaki temel amaç da bu benzerlikleri tespit edip onları kullanarak gereken veri boyutunu azaltmaktır.
Kodlama işlemi kareler arasındaki hareketin tespit edilmesiyle başlar. Bu adıma motion compensation (hareket telafisi/tazminatı ??) adı verilir ama direkt tercümesi biraz uçuk olduğundan biz hareket çıkarımı diyelim. Bu adımdaki temel amaç, mevcut video karesini bir referans karesiyle arasında olan fark şeklinden ifade etmektir. Video kareleri, birebir karşılaştırmak için çok büyük olduğundan, daha hassas hareket tespiti yapılabilmesi hasebiyle ilk olarak blok adı verilen ufak parçalara bölünürler. Sonrasında mevcut karedeki bloklar ile referans karedeki benzer bloklar eşleştirilir ve aralarındaki fark hareket vektörleri kullanılarak ifade edilir. Böylelikle, tüm video karesini depolamak yerine, sadece referans video karesi ve hareket vektörleri depolanır ki bunlar da sonradan mevcut video karesini tekrardan oluşturmamız için yeterli olacaktır.
Bu adımı tamamladıktan sonra, videoyu daha küçük boyutta temsil etmek için gereken kilit bilgiye sahip oluyoruz. Ancak, videoda hala daha çok yer kaplayan ama pek de gerekli olmayan bir takım bilgiler mevcut. Bunları da görsel kaliteye pek de zeval getirmeyecek şekilde elemek mümkün.
Burada biraz biyolojiye girmemiz gerekiyor. Gözlerimiz, parlaklık bilgisini renk bilgisinden çok daha hassas bir şekilde algılıyor. Bu demek oluyor ki videodaki bazı piksellerin renkleri değişse muhtemelen fark etmeyiz ancak parlaklıklarında bir oynama olduğu anda çok daha hızlı fark edebiliriz. İşte bu yüzden videoyu dijital ortamda ifade ederken, parlaklık bilgisine daha fazla veri ayırıyoruz. Bu adıma da chroma subsampling (renk alt örneklemesi) adı verilir.
Videoda pikselleri ifade etmek için, dijital dünyadaki klasik RGB (red (kırmızı)- green (yeşil) - blue (mavi)) değerleri yerine parlaklık (luminance) (Y), mavi-renk farkı (blue-difference chroma) (Cb), ve kırmızı renk farkı (red-difference chroma) (Cr) değerleri kullanılır. Renk alt örneklemesi adımında, video kareleri Y ve CbCr kanallarına ayrılır ve a:b:c şeklinde ifade edilir. Burada a, bölgenin genişliğini, b ilk satırdaki bağımsız piksel sayısını, ve c ikinci satırdaki bağımsız piksel sayısını ifade eder. Genelde 4:4:4 (işlenmemiş içerik, sinema), 4:2:2 (yüksek kalite dijital içerik, yayın) ve 4:2:0 (Internet video aktarımı) değerleri kullanılır. Bu adım sayesinde çok daha az veri kullanarak renk bilgisini aktarmış oluyoruz.
Artık bu aşamada videoyu tekrardan oluşturmak için tüm verilere sahibiz. Video karesiyle pek bir işimiz de kalmadı zaten. Ancak, hala daha video boyutunu düşürecek basit adımlarımız mevcut. Geldik video kodlamadaki son aşama olan Niceleme (Quantization) ve Dönüştürme (Transformation) aşamasına. Buradaki temel amaç da veri ifade etmek için kullandığımız bit sayısını azaltmak. Öte yandan, burada videonun görsel kalite seviyesini de kontrol edebiliyoruz. En son da entropi kodlama yöntemiyle bit stream boyutunu daha da azaltıp kodlama tarafındaki işimizi bitiriyoruz.
Peki bu kodladığımız videoyu oynatmak istersen ne yapacağız? İlk olarak videoyu çözmemiz (decode) gerekiyor ve bunun için de video çözücü (decoder) kullanıyoruz. Zaten elinizde hem kodlayıcı (enCODer) hem de çözücü (DECoder) yoksa çalışan bir sistem elde edemezsiniz. Bu yüzden, videoyu kodlamak için kullandığımız sistemlere Video Codec adını veriyoruz. Bu sistemler standardizasyon toplulukları tarafından yönetilen, hem akademiden hem de endüstriden yüzlerce bilim insanı ve mühendisin katkılarıyla ilerleyen süreçler sonucunda tasarlandılar ve hala daha tasarlanılmaya devam ediyorlar.
Artık videonun ne olduğu ve video kodlayıcı kullanılarak nasıl hazırlanıldığı hakkında bir fikir sahibiyiz. Şimdi sırada bu videoların ekranlarımıza nasıl aktarıldığı sorusu var. Bunu da bir sonraki yazımızda cevaplayacağız.