Bazı ana tanımlar:
- Bir kodek (örneğin, H.264, HEVC, VP9) yalnızca video veya ses bölümünden sorumludur ve bir veya daha fazla kodek bir kaba birleştirilebilir.
- Bir kapsayıcı (örneğin, MP4, MKV) onları bir arada tutmaktan sorumludur ve bu genellikle seçtiğiniz medya oynatıcınızda açtığınız şeydir.
- Belirli bir kodlayıcı (örneğin, x264, libvpx), bir giriş akımını kodek uyumlu bir bit akışına dönüştürmekle sorumludur. Belirli bir kodek için genellikle çoklu kodlayıcılar vardır.
Görebileceğiniz gibi burada birkaç şeyi açıklamamız gerekecek.
Kodek nedir?
Bir codec kodlayıcı / kod çözücü için kısadır, bu temelde sadece aşağıdakileri ifade eder: Bir kodlayıcı tarafından üretilen veri her zaman uygun bir kod çözücü tarafından kodlanabilir. Bu, video, ses için geçerli olur, ancak kriptografi hakkında da düşünebilirsiniz (bir kodlayıcının şifreli bir mesajı görüntülemek için uygun bir kod çözücüye ihtiyacı vardır).
Günümüzde, bir video codec'i belirtildiğinde, içinde yer alan kurumlar genellikle sadece standardın sözdizimini belirler . Örneğin şöyle diyecekler: "Bit akımı biçimi şöyle olmalıdır", " 0x810429AAB
Burada buna çevrilecek", vb. Sık sık, bir referans kodlayıcı ve kod çözücü sağlarlar, ancak kodlayıcının böyle bir eşleşmeye uyması için nasıl yazılır? format tamamen üreticilere aittir.
Aynı codec bileşeni için bu kadar çok kodlayıcı bulabilmenizin nedeni budur, bazıları da ticaridir.
Bir vaka örneği - H.264
Terminolojiyi karıştırmadan önce, bir örnek alalım. H.264'ün durumunu düşünün . Standardın adı H.264 - gerçek kodlayıcının adı değil. Ana fikir çok iyi bir ticari kodlayıcıdır, oysa ki x264 serbest ve açık kaynak kodludur. Her ikisi de elbette iyi kalitede olduğunu iddia ediyor.
Şifrelemeyi optimize edebileceğiniz tek gerçek, burada bir rekabet yaratıyor. Her iki kodlayıcı, her zaman H.264 uyumlu bir kod çözücü tarafından kodu çözülebilen standart bir bit akışı sunar.
Özetlemek
Yani, sonuçta, diyelim ki enkoder şöyle olacaktır:
- video kareleri al
- geçerli bir bit akımı üret
Bit akımı daha sonra bir kaba çoğaltılır.
Kod çözücü:
- bu geçerli bit akışını al
- video kareleri ondan yeniden
Her ikisi de bir codec standardına uygundur. Bu kadar!
Mevcut Codec'ler
Bugünlerde muhtemelen yalnızca aşağıda bahsettiğim kodekler ile kodlanmış videoları bulacaksınız. İlginçtir ki, neredeyse tamamı Motion Picture Experts Group (MPEG) tarafından yaratılmıştır . Ancak, Google veya MPEG standartlarına rakip olan, örneğin Google veya Open Media için İttifak tarafından oluşturulanlar gibi telif hakkı olmayan diğer kodlayıcılar da vardır.
"MPEG" in, aşağıda göreceğiniz gibi hem kodeklere hem de konteynerlere başvurabileceğini unutmayın. Bu kargaşaya katkıda bulunur, ancak yalnızca "MPEG" in tek başına bir şey ifade etmediğini biliyorum, örneğin "MPEG formatında bir dosyam var" çok belirsizdir ".
MPEG-2 oldukça eski. İlk halka açık olan 1996'dan beri. MPEG-2 videosu çoğunlukla DVD'ler ve TV yayınları için kullanılıyor, örneğin DVB-T veya uydu ve uyumluluğun önemli olduğu eski uygulamalar. MPEG-2 videoları çoğunlukla bir .MPG kabında bulunur.
Muhtemelen 2000'lerin ortalarında web için videoları kodlamak için kullanılan muhtemelen bu, ancak bu arada yerini aldı. Pratik dosya boyutlarında iyi bir kalite sunar, bu da 90 dakikalık bir filmi 600 MB'lık bir CD'ye yazabileceğiniz anlamına gelir (MPEG-2 ile bir DVD'ye ihtiyacınız olacaktı, cevabımı burada görün ). Artık HD veya 4K içerik için çok iyi çalışmıyor.
MPEG-4 Part 2 videosu çıkaran bazı kodlayıcılar DivX , açık kaynaklı XviD ve Nero Digital .
MPEG-4 Part 2 videoları çoğunlukla bir AVI kabında gelir, ancak MP4 de sıklıkla görülür.
Bu aynı zamanda MPEG-4 Gelişmiş Video Kodlaması (AVC) veya H.264 olarak da bilinir ; bugün en çok kullanılan codec bileşeni. Küçük dosya boyutlarında iyi kalite sunar ve bu nedenle Internet veya mobil aygıtlar için her türlü video için mükemmeldir. Telefonlardan video kameralara kadar hemen hemen her modern uygulamada H.264'ü bulacaksınız. Blu-ray disklerde, video şimdi H.264'te kodlanmıştır.
Bunun için bazı kodlayıcılar şunlardır: x264 , NVENC (NVIDIA'nın), Mainconcept . Videolar çoğunlukla MP4 , MKV veya MOV konteynerlerinde geliyor.
Ayrıca MPEG-H Bölüm 2 olarak da bilinir, bu MPEG-4 Bölüm 10 / AVC / H.264'ün halefidir. Daha yüksek çözünürlüklerde ( 8K'ye kadar ) hedeflenir ve H.264'e kıyasla% 50'ye kadar daha yüksek kodlama performansı (kalite veya bit hızı açısından) sunabilir ( örneğin bu makaleye bakın ).
Standart 2013 yılında yayınlandı ve yavaş yavaş kodek daha fazla kullanılmaya başlandı, örneğin IPTV veya çevrimiçi video yayınları için. HEVC, Apple tarafından videoları ve görüntüleri ( HEIF kullanarak ) iOS'ta depolamak için de kullanılır . Bununla birlikte, HEVC ile ilişkili çoklu patent havuzlarının mevcut olması, telifsiz alternatiflere geçiş yapan pek çok şirkete (neredeyse tümü Apple hariç) sahiptir. HEVC ayrıca tüm tarayıcılar tarafından yerel olarak desteklenmez ve web akışı için kullanılamaz hale getirir.
En iyi bilinen kodlayıcı x265'tir . NVENC de var . Videolar genellikle MP4 kaplarda gelir.
VP9 ( VP8'in halefi), esas olarak Google tarafından geliştirilen bir codec bileşenidir. Açık ve telif ücretsiz ve birçok tarayıcıda uygulandı . Neredeyse HEVC kadar iyidir ve bazen daha da iyidir ( bu makaleye Netflix tarafından bakınız ). VP9, YouTube'u destekleyen bir tarayıcıda izlerken elde ettiğiniz şeydir.
VP9, libvpx kodlayıcı ile kodlanabilir ve genellikle WebM veya MKV kaplarında gelir .
Bazı şirketler HEVC'ye daha da güçlü bir rakip oluşturmak için bir araya geldi - ancak telifsiz bir alternatif olarak. AV1 VP9'un halefi olacak ve VP10 olması gerekenlere dayanıyor. Açık Medya İttifakı (Amazon, Cisco, Google, Intel, Microsoft, Mozilla ve Netflix tarafından kurulmuştur) tarafından desteklenmektedir. Oku buradan daha fazla .
Libaom kodlayıcı AV1 bit akışlarını oluşturmak için kullanılabilir, ama yine de deneyseldir.
Bir format (konteyner) nedir?
Şimdiye kadar sadece gerçekten ham video verisi olan ham "bit akışını" açıkladık. Gerçekten devam edebilir ve böyle ham bir bit akımı kullanarak videoyu izleyebilirsiniz. Ancak çoğu durumda bu yeterli değil ya da pratik değildir.
Bu nedenle, videoyu bir kaba sarmanız gerekir. Bunun birkaç nedeni vardır:
- Belki video ile birlikte biraz ses istiyorum
- Belki de videoda belirli bir bölüme atlamak istersiniz ("1: 32: 20.12'ye gidin" gibi)
- Hem ses hem de video mükemmel senkronize edilmelidir
- Videonun güvenilir bir ağ üzerinden iletilmesi ve önce paketlere bölünmesi gerekebilir.
- Video kayıp bir ağ üzerinden (3G gibi) gönderilebilir ve daha önce paketlere ayrılabilir.
Bütün bu nedenlerden dolayı, konteyner formatları icat edildi, bazıları basit, bazıları daha gelişmiş. Tüm yaptıkları, video bit akışını başka bir bit akışına "sarmak".
Bir kapsayıcı, video ve ses karelerini , aynı anda görüntülenmelerini sağlayan Sunum Zaman Damganına (PTS) göre senkronize eder. Ayrıca, gerektiğinde akış sunucularına bilgi eklemek için de dikkat eder, böylece akış sunucusu dosyanın ne zaman gönderileceğini bilir.
Bazı popüler konteynerlere bir göz atalım.
Popüler konteynerler
Çoğunlukla aşağıdaki kaplara sarılmış videoları bulacaksınız. Daha az popüler olanlar da var, ama dediğim gibi, çoğunlukla, bunlar:
Audio Video Interleave - bu en temel kapsayıcıdır, sadece ses ve videoyu birleştirmek için oradadır. 1992'de yazılmıştır ve bugün hala kullanılmaktadır, ancak eski olarak kabul edilir, bu yüzden artık kullanmayın.
MPEG-4 Part 14 olarak da bilinir ve QuickTime dosya formatını temel alır. Bu, H.264 video için go-to formatıdır, ancak HEVC, MPEG-4 Part 2 ve MPEG-2'yi de sarar.
Bu kapsayıcı yalnızca sesi de sarabilir, bu yüzden video olmayan çok fazla .mp4 dosyası bulursunuz, bunun yerine AAC kodlu ses de .m4a dosyalarında (yalnızca farklı bir uzantıda) bulunur. .M4v uzantısı genellikle video bit akışları için alınır.
Matroska Video (MKV), günümüzde sıkça bulunan açık kaynaklı ve ücretsiz bir dosya formatıdır, çünkü temelde H.264'ten VP9'a ve tabii ki pek çok ses çözücüsünü de içerir.
WebM, MKV'ye dayanır ve öncelikle VP9 video ve Opus ses için kullanılır - bu codec'ler kullanıldığında web akış videosu için tercih edilen kaptır.
Ogg kabı, Xiph.Org Vakfı tarafından oluşturulan Theora video kodeki (ve Vorbis ses kodeki ) için de tercih edilen kaptır . Aynı zamanda ücretsiz ve açık kaynaktır (sadece codec bileşeni gibi).
Flash video formatı, Adobe tarafından akış uygulamalarında kullanılmak üzere oluşturuldu. Artık bu kadar kullanılmaz, çünkü akışın yapılma şekli son yıllarda önemli ölçüde değişmiştir.
Popüler kodekler ve biçimler
Ayrıca, aşağıdakilerden hangisi codec, hangileri dosya formatı ve hangileri değil?
- Quicktime MOV : .mov , Apple tarafından oluşturulan bir kapsayıcı olan QuickTime Dosya Biçimi'nin dosya uzantısıdır . Bu kap daha sonra MP4 için uyarlandı. Her türlü codec'i taşıyabilir. Quicktime aslında tüm bir medya çerçevesidir, ilgilendiğim kadarıyla herhangi bir codec bileşenini gerçekten belirtmez.
- MPEG (1, 2, 3, 4) : Motion Picture Experts Group tarafından tanımlanan standartlar. Ayrıntılar için yukarıdaki yazıma bakın.
- WMV : Windows Media Video. Aslında yine .wmv uzantısını kullanan bir Gelişmiş Sistem Formatı kapsayıcısına sarılmış bir codec bileşeni . Garip, ama bu böyle.
- FFmpeg : Bu ne codec, ne de bir konteyner değil. Ayrıca, farklı codec'ler ve kaplar arasında dönüşüm sağlayan bir video araçları kütüphanesidir. FFmpeg , sırasıyla kodlayıcı ve kaplar oluşturmak için açık kaynağa
libavcodec
ve libavformat
kütüphanelere dayanır . Bugün bulduğunuz video araçlarının çoğu buna dayanıyor.
- AVC : MPEG-4 Part 10 veya H.264 için eşanlamlı.
- DivX : MPEG-4 Part 2 videosu için başka bir enkoder tipi.
- Xvid : MPEG-4 Part 2 videosu için bir tür kodlayıcı. Tabii ki bazı tartışmalara yol açan, açık kaynak kodlu, DivX'in ücretsiz versiyonu.
- H.264 : MPEG-4 Part 10 veya AVC için eşanlamlı.
Bir yandan not:
Doğru terminolojiyi kullanıyorum bile mi?
Bir zamanlar, yanlış anlamaları önlemek için özel olarak "format" yerine "kodek" ve "kapsayıcı" kullanmayı tercih edersiniz. Her iki codec çünkü biçim teorik şey olabilir ve konteynerler bir biçim belirtin (yani veri temsil edilmelidir nasıl).
Olduğu söyleniyor, FFmpeg terminoloji konteyner için "format" kullanmak olacaktır. Bu aynı zamanda şu arasındaki farktan da kaynaklanmaktadır:
libavcodec
kodlama / kod çözme kütüphanesi
libavformat
, konteynerler için kütüphane