Video formatları ve kodekler
Konteyner ile kodek iki ayrı şeydir: MP4 kutunun adıdır, H.264 ise görüntünün sıkıştırıldığı yöntemin adı. Bu tek ayrım, «bu dosya neden açılmıyor» sorunlarının çoğunu çözer; çünkü bir oynatıcının hem kutuyu hem de içindeki kodeki tanıması gerekir.
- Ders 3 / 10
- Başlangıç
- Ücretsiz, kayıt yok
Tek video dosyası, dört katman
Gördüğünüz şeyden diskteki dosyaya kadar. Her katman ayrı bir karardır ve alttaki ikisi insanların karıştırdıklarıdır.
- Çözünürlük ve kare hızıKare başına kaç piksel ve saniyede kaç kare. Gözün gördüğü şey budur. 1080p ya da 4K
- Bit hızıSaniyede ne kadar veri harcandığı. Daha yüksek bit hızı olmadan daha yüksek çözünürlük, daha kötü görüntü demektir. sabit ya da sabit kalite
- KodekSıkıştırma yöntemi. Lisans ve donanım desteği tam burada belirlenir. H.264, H.265, VP9, AV1
- KonteynerHer şeyi bir arada tutan, diskteki dosya. Onu değiştirmek genelde yeniden kodlama gerektirmez. MP4, MKV, WebM
Bu dört katman dosya boyutunu ve uyumluluğu açıklar, görüntünün kalitesini değil. Kötü ışıklandırılmış bir sahneyi bunların hiçbir bileşimi düzeltmez.
Son kontrol: Bu dersteki bilgiler ve araç adları bu tarihte kaynaklarıyla yeniden doğrulanır.
Konteyner mi kodek mi: hangisi hangisi
Kodek, görüntü ve sesin sıkıştırılıp yeniden açıldığı yöntemdir; konteyner ise o sıkıştırılmış akışları bir arada tutan dosyadır: görüntü, bir ya da birden çok ses parçası, altyazılar ve süre, kare hızı gibi bilgiler. MDN'in konteyner rehberi bunu daha ilk cümlesinde söylüyor: bir konteyner, bir ya da daha fazla medya akışını meta verilerle birlikte kapsüller, böylece birlikte saklanıp oynatılabilirler.
Yani MP4 bir kutunun adı, H.264 ise bir kodeğin adıdır. Birinden «bana bir MP4 gönder» demek dosya hakkında neredeyse hiçbir şey söylemez; çünkü aynı kutu H.264 da taşıyabilir AV1 de, ve bu ikisinin dünyadaki cihazların yarısında kaderi çok farklıdır.
Pratik sonuç şu: bir dosyanın oynaması için oynatıcının ikisini de bilmesi gerekir. MP4'ü açan ama içindeki kodeği tanımayan bir tarayıcı dosyayı açar ve size siyah bir kare gösterir. Tersi de olur: tarayıcının bildiği bir kodek, oynatmadığı bir kutunun içinde oturuyorsa aynı ölçüde işe yaramaz. Bunu bildiğinizde bozuk dosyayı teşhis etmek tek bir tahmin yerine iki basit soruya döner.

Oynatma neden ikisine birden bağlı
Konteyner
Kutu: MP4, MKV, WebM
- Görüntüyü, sesi ve altyazıyı bir arada tutar
- Süre ve kare hızını meta verisinde taşır
- Her kutu yalnızca kısa bir kodek listesini kabul eder
Kodek
Yöntem: H.264, H.265, VP9, AV1
- Görüntüyü sıkıştırır ve yeniden açar
- Lisans ve telif bu katmana aittir
- Donanım çözücü de bunu ya bilir ya bilmez
Oynatıcının ikisini de bilmesi gerekir; biri yetmez.
Oynatıcı ya da tarayıcı
Gerçek kararın verildiği yer
- Kutuyu bilmiyor: dosya hiç açılmaz
- Kodeki bilmiyor: dosya açılır, görüntü siyahtır
- İkisini de biliyor ama donanımı yok: oynar ve takılır
Bu şema dosyanın oynayıp oynamayacağını söyler. İyi görünüp görünmediği hakkında hiçbir şey söylemez.
Pratikte karşılaştığınız üç kutu
MP4 teslim kutusudur. Neredeyse her cihaz, her tarayıcı ve her platform kabul eder; müşteriye verdiğiniz ve sosyal medyaya yüklediğiniz şey bu yüzden odur. MDN de aynısını yazıyor: yalnızca tek bir format verebiliyorsanız MP4 verin.
MKV çalışma kutusudur. Neredeyse her kodeki kabul eder, birkaç ses parçasını ve birkaç altyazıyı sorunsuz taşır; arşiv ve indirme tarafında bu yüzden yaygındır. Tarayıcılar onu oynatmaz ve bu MKV'nin kusuru değildir; MKV web için yapılmadı.
WebM web kutusudur ve bilerek az taleplidir: MDN'in listesi görüntü için ona yalnızca AV1, VP8 ve VP9'u, ses için de Opus ve Vorbis'i verir. Bu kısıt tam olarak dersin ilerisinde işinize yarayacak şeydir.
Bir de MOV var, Apple'ın kutusu; kurguda sürekli karşınıza çıkar. Dış dünyaya teslim için genelde önce MP4'e çevrilir ve o çevirme neredeyse her zaman yeniden kodlama değil, sadece kutu değişimidir. Bu ayrımın sayısını kendi deneyimimiz bölümünde koyduk.
Her yerde gördüğünüz dört kodek
Aşağıdaki sütunlar kişisel deneyimden değil, MDN'in web video kodek rehberinden okunmuştur; çünkü bunlar olgudur ve raf ömürleri vardır.
| Kodek | Lisans | Tarayıcı desteği | Alışılmış konteyner | Sıkıştırma iddiası |
|---|---|---|---|---|
| H.264 (AVC) | Tescilli ve patentli; ticari kullanım lisans ister | Tüm tarayıcılar | MP4, 3GP | Karşılaştırma tabanı |
| H.265 (HEVC) | Tescilli, birden çok patent havuzu; ücretler içerik üreticisinden değil geliştiriciden alınır | İşletim sistemine ve donanım çözücüye bağlı | MP4, MPEG-TS, QuickTime | Teorik olarak benzer kalitede AVC'nin yarısı boyut |
| VP9 | Açık ve telifsiz | Tüm tarayıcılar, Safari'de alfa saydamlığı yok | WebM, MP4, Ogg | Benzer bit hızlarında HEVC'ye yakın kalite |
| AV1 | Telifsiz açık standart | Tüm tarayıcılar; Safari'de yalnızca donanım çözücüsü olan cihazlarda | WebM, MP4, MPEG-TS | VP9 ve HEVC'den iyi, AVC'den %50'ye varan oranda iyi |
Son sütunla ilgili kolayca yanlış okunan bir nokta: bunlar sıkıştırma oranı iddialarıdır, dosyanızın yarıya ineceği sözü değil. Gerçek sonuç görüntünün kendisine, kodlayıcı ayarlarına ve ne kadar beklemeye razı olduğunuza bağlıdır.
Gerçek bir projede canınızı yakan hücre ise AV1'in Safari hücresidir. MDN, Safari desteğinin donanım çözücüsü bulunan cihazlarla sınırlı olduğunu yazıyor: M3 ve sonrası MacBook'lar, iPhone 15 Pro ve iPhone 16 ile sonrası. «AV1 her tarayıcıda var» ile «AV1 müşterimin telefonunda oynuyor» iki ayrı cümledir.
Bit hızı ile çözünürlük nasıl ayrılır
Çözünürlük her karedeki piksel sayısıdır: 1080p ya da 4K gibi. Bit hızı ise kodeğin saniyede harcamasına izin verilen veri miktarıdır. İkisi birbirinden bağımsızdır ve kötü dışa aktarımların çoğu tam burada üretilir.
Çözünürlüğü yükseltip bit hızını sabit tutarsanız görüntü iyileşmez, kötüleşir: aynı miktar veri artık daha çok piksele yayılmak zorundadır. 1080p için ayarlanmış bir bit hızıyla alınan 4K çıktı, daha yumuşak ve lekeli bir görüntüye sahip daha büyük bir dosyadır. Bunu her yerde, en çok da bir şeyin hızlı hareket ettiği sahnelerde görürsünüz.
Pratikte bit hızını iki türlü belirlersiniz. Biri sabit bir sayı vermek; hedefin bir tavanı olduğunda bunu yaparsınız. Diğeri sabit kalite, ffmpeg'de CRF ile ayarlanır: kodlayıcıya kaliteyi koru ve bunun için gereken biti harca dersiniz. Bir siteye yerleşecek dosya için sabit kalite neredeyse her zaman daha iyi seçimdir; çünkü durgun sahne daha az bit, kalabalık sahne daha çok bit alır ve göz de tam bunu bekler.
Bu dosya müşterinin telefonunda neden açılmıyor
Bu sorunun cevabını üç şey verir ve üçü de kutuya değil kodeğe çıkar.
Birincisi donanım. Çoğu cihaz H.264'ü ayrı bir yongada çözer; oynatmanın serin ve ucuz kalmasının sebebi budur. Daha yeni kodekler daha yeni yonga ister ve eski bir cihazda yazılıma düşerler, yani işi işlemci yapar: pil daha hızlı biter ve zayıf bir cihazda kareler düşer. MDN aynı donanım kaydını hem AV1'e hem HEVC'ye koyuyor.
İkincisi lisans. H.264 ile H.265 patentlidir, AV1 ile VP9 değildir; her tarayıcının neyi gönderdiğini tek başına bu açıklar. MDN, Via LA patent havuzunun, video son kullanıcıya ücretsiz olduğu sürece AVC formatında internet videosu yayınlamak için lisans ücreti istemediğini, HEVC ücretlerinin ise içerik üreticileri ve dağıtıcıları yerine geliştiricilerden alındığını ekliyor. Tarayıcılarda HEVC desteğinin bu kadar parçalı olmasının sebebi budur.
Üçüncüsü kutunun kendisi. Bir tarayıcı, içindeki kodeki bilse bile MKV oynatmaz. Ve burada gerçek bir tuzak var: WebM bir H.264 akışını hiç kabul etmez, dolayısıyla «MP4'ü WebM'e çevir» kodeki değiştirmeden mümkün değildir. Bunu test edebilirsiniz; kendi deneyimimiz bölümünde biz de ettik.
Yani teşhis sırası şu: dosyanın içinde hangi kodek var öğrenin, hedef o kodeki kabul ediyor mu bakın, ancak ondan sonra konteynere göz atın. Dosya uzantısını değiştirmek hiçbir zaman cevap olmadı, hâlâ da değil.
Dışa aktarırken hangi bileşimi seçmeli
Üç hedef var ve her birinin kendi cevabı. Cevaplar keyfi bir listeden değil, buraya kadar okuduklarınızdan çıkıyor.
Müşteriye teslim ya da sosyal medyaya yükleme: MP4 içinde AAC sesli H.264. Burada karşı tarafı siz kontrol etmiyorsunuz, dolayısıyla uyumluluk boyutu yener. MDN de tam bu bileşimi güvenli seçenek olarak adlandırıyor, lisans şartlarına uygunluğu doğrulamanın sizin işiniz olduğunu hatırlatarak.
Kendi sitenizde oynatma: WebM içinde Opus sesli AV1 ya da VP9, artı yedek olarak bir MP4. video etiketi birkaç kaynak sıralamanıza izin verir ve tarayıcı tanıdığı ilkini alır. MDN'in kendi tavsiyesi de bu iki kaynak, bu sırayla: önce AV1 ve Opus ile WebM, sonra MP4.
Arşiv ve master: kameradan ya da kurgudan ne çıktıysa, dokunulmamış hâliyle. Her yeni çıktıyı önceki çıktıdan değil master'dan alın. Kayıplı bir dosyayı yeniden sıkıştırırsanız atma adımı ikinci kez çalışır, bu sefer zaten bir kez atılmış bir şeyin üzerinde. Bu dersin istisnasız tek kuralı budur.
Ve bu sayfada görmeyeceğiniz bir şey: AV1'e çevirmenin ne kadar kazandırdığını söyleyen bir sayı. O testi bu sunucuda çalıştırdık, ama test klibimiz sentetik bir desendi ve sentetik desen üzerinde ölçülen sıkıştırma oranı gerçek görüntüye taşınmaz. Sizde tutmayacak bir sayıyı basmaktansa hiç basmamak daha iyidir.
Dışa aktarımı belirleyen tek soru
Bu dosyanın nerede oynatılacağına siz mi karar veriyorsunuz, başkası mı?
Önce uyumluluk: MP4 içinde H.264 ve AAC
- Müşteriye teslim, sosyal medyaya yükleme, e-posta eki
- Her cihaz çözer, çoğunlukla donanımda
- Dosya daha büyüktür; kesinliğin bedeli budur
Daha küçük: WebM içinde AV1 ya da VP9 ve Opus
- Kendi sitenizde video, video etiketi ve birkaç kaynakla
- Yedek olarak her zaman bir de MP4 koyun
- Kodlama daha yavaştır; bunu takvime yazın
Bu çatal teslimle ilgilidir, arşivle değil. Master her zaman dokunulmadan kalır ve her yeni çıktı master'ın kendisinden alınır.
Yapay zekayla hızlı yol
Alışılmış yol, dosyayı bir programda açıp yeniden dışa aktarmaktır. Hızlı yol ise başka bir soruyla başlar: herhangi bir şeyin yeniden kodlanması gerekiyor mu? «Video dönüştürme» denen işlerin yarısı sadece kutu değişimidir ve kutuyu değiştirmek ne kaliteye ne zamana mal olur. Bir dil modeli burada iki şeyi iyi yapar: ham ffprobe çıktısını okumak ve insanların kaçmasına yetecek kadar sevimsiz olan ffmpeg komut satırını yazmak. Bunun için Flash sınıfı hızlı ve ucuz bir model yeter; güncel tercihimiz bu sitenin yapay zeka bölümünde listelidir.
- Önce uzantısının söylediğini değil, dosyanın içinde ne olduğunu öğrenin. Tek satır yeter: ffprobe -v error -show_entries stream=codec_type,codec_name,profile,width,height,r_frame_rate,bit_rate:format=format_name,duration,size -of default=nw=1 input.mp4
- Hedefi ve kısıtlarını açıkça yazın. Bunlar olmadan model kodekler hakkında fikir beyan eder ama boyut tavanını ya da kabul edilen çözünürlüğü bilmez ve cevabı genelleşir.
- Aşağıdaki tarifi doldurup çalıştırın. Bütün mesele ikinci maddesidir: yalnızca kutu yanlışsa cevap c copy içeren tek bir komut olmalı ve orada bitmeli.
- Çalıştırdıktan sonra iki şeyi kontrol edin. Yalnızca kutunun değişmesini bekliyorduysanız görüntü akışı bayt bayt aynı olmalı; her iki dosyada ffmpeg -i out -map 0:v -c copy -f md5 - bunu kanıtlar. Gerçekten yeniden kodlandıysa çıktıyı, onu oynatacak cihazın kendisinde izleyin.
Kopyalamaya hazır şablon
Rol: video mühendisi. İşin konteyner ve kodek kararını vermek, genel tavsiye vermek değil. ffprobe çıktısında ya da hedefin şartnamesinde olmayan hiçbir sayı üretme.
Bu dosyanın hedefi:
{örn. kendi sitemizde video etiketiyle oynatma | Instagram'a yükleme | müşteriye teslim | arşiv}
Hedefin yayımladığı kısıtlar:
{örn. boyut tavanı, azami çözünürlük, kabul edilen kodekler. Yayımlanmamış olan her şey için «yayımlanmamış» yaz}
ffprobe çıktısı:
{çıktıyı buraya yapıştır}
Şu sırayla cevapla:
1. Bu dosyanın içinde ne var: konteyner, video kodeği, ses kodeği, çözünürlük, kare hızı, süre.
2. Bu hedef için yeniden kodlama gerekiyor mu? Yalnızca konteyner yanlışsa c copy ile kutu değiştirme komutunu ver ve orada dur.
3. Kodek değişmeliyse tam olarak tek bir ffmpeg komutu ver ve altına tek satırda her seçeneğin ne yaptığını yaz.
4. Hedef bir şeyi yayımlamamışsa «yayımlanmamış» yaz ve güvenli seçeneği öner. Tahmin etme.
5. Sonunda, çalıştırdıktan sonra kendi gözümle neyi kontrol etmem gerektiğini yaz.
Çıktıya güvenmeden önce: Model sizin görüntünüzü görmez. Dosyanın MP4 içinde H.264 olduğunu söyleyebilir; çıktının kötü göründüğünü söyleyemez. Yani tarifin beşinci maddesi bir formalite değildir: kaliteyi her zaman kendiniz, hedef cihazda kontrol edin. Ve ona asla verilmemesi gereken bir iş var, aşağıdaki risk bölümünde anlatılıyor.
Bu işte yapay zeka
Kodek seçmek, yapay zekanın yeni bir şey kattığı bir iş değildir; kuralları yazılıdır ve bu sayfadadır. Bir modelin gerçekten zaman kazandırdığı yer komut satırıdır: ffmpeg'in yüzden fazla seçeneği var ve kimse ezberlemiyor. Her şeyin bozulduğu yer ise «yapay zeka ile iyileştirme» araçlarıdır.
Gerçekten işe yarayan araçlar
- Claude ffmpeg komut satırını yazmak ve her seçeneği açıklamak için; çünkü açıklamaya itiraz edilebilir ve belgelerle karşılaştırılabilir. İran, Anthropic'in desteklenen ülkeler listesinde değil ve İran'dan resmi bir ödeme yolu yok.
- Gemini Bir klasörün tamamının ffprobe çıktısı üzerinde mekanik geçiş için, hızlı ve ucuz modeliyle. Google'ın kendi sayfası Gemini web uygulamasının 230'dan fazla ülke ve bölgede çalıştığını, İran'ın o listede olmadığını söylüyor.
- FFmpeg Yapay zeka aracı değil ve bu listede bilerek yer alıyor. Bu dersin gerçekten tekrar eden kısmını tek bir komut satırı yapar ve hiçbir model gerektirmez. Model karar verip önerir, araç uygular.
- RGB İran için erişim ve ödeme katmanı, araçlardan ayrı tutulmuş.
Nerede geri teper
Üç risk var ve ilki ciddi olanı. Video iyileştirme araçları dosyada hiç kaydedilmemiş ayrıntıyı geri getirmez; olası ayrıntı uydurur. Bir tanıtım filmi ya da dekoratif iş için bunun pek önemi yoktur, ama video kanıt olacaksa, yani bir röportaj, bir müşteri referansı, bir güvenlik kamerası karesi ise, «iyileştirilmiş» sürüm artık kaydedilen şey değildir ve onu kaynağın yerine sunmak bir çarpıtmadır. İkinci risk: yeniden kodlama yapay zeka filigranını silmez. Google, SynthID için filigranın kırpmaya, filtrelere, kare hızı değişimine ve kayıplı sıkıştırmaya dayanacak şekilde tasarlandığını ve kendi tespit aracını çalıştırdığını yazıyor. Üçüncü risk daha küçük ama günlük: bir modele bugün hangi tarayıcının hangi kodeki desteklediğini sormayın. Cevap verir, cevap kendinden emin görünür ve tarihini size söylemediği bir eğitim verisinden gelir. Bunu MDN'den ya da caniuse'dan okuyun; bir modelden değil, okuduğunuz bu sayfadan da değil.
Kaynaklar: MDN: Web video codec guide MDN: Media container formats Google DeepMind: SynthID
Bu tavsiyenin sınırı
Kodek küçük bir kaldıraçtır. Oynadığı yuvanın dört katı çözünürlükteki bir dosya, hangi kodekle ürettiyseniz üretin yanlış dosyadır; süre ve çözünürlük neredeyse her seferinde kodek seçimini yener. Tarayıcı desteği sütununun da raf ömrü var: bu sayfadaki tablodaki her şey, üstte basılı tarihte MDN'den okundu ve bugün için doğru yol, bu sayfaya güvenmek değil o rehberi ya da caniuse'ı açmaktır. Ve hiçbir sayfanın size söyleyemeyeceği bir şey var: müşterinizin donanım çözücüsünün gerçekte neyi tanıdığı. Tek gerçek test, o dosyayı o cihazda oynatmaktır.
Kendi işimizden
«Konteyner yalnızca bir kutudur» iddiasını bu sunucuda, ffmpeg 6.1.1 ile, bu sayfanın üstünde basılı tarihte ölçtük. On saniyelik 1280x720 bir H.264 klip ürettik ve sonra hiçbir şeyi yeniden kodlamadan onu iki başka kutuya döktük. Üç dosya 3776719, 3775504 ve 3776666 bayt çıktı; yani üçü de birbirinden bir kilobayttan az farkla duruyor ve işin tamamı onda bir saniyeden kısa sürdü. Boyuttan daha anlamlısı şu: görüntü akışının kendisinin md5'i üç dosyada da tıpatıp aynı, 93dc8bd0df89a3adff8aa9233b8bbb46. Görüntünün tek baytı değişmedi, yalnızca ambalaj değişti. Ardından aynı akışı aynı komutla WebM'e döktük ve ffmpeg reddetti: Could not write header (incorrect codec parameters ?). Bu iki sonuç birlikte, bu dersin açılışını yaptığı şeyin ta kendisidir.
Gerçek devam soruları
MP4 mü MKV mi daha iyi?
İkisi iki ayrı iştir. MKV neredeyse her kodeki ve istediğiniz kadar ses ile altyazı parçasını taşır; arşiv ve indirme için iyidir, tarayıcılar oynatmaz. MP4 teslim formatıdır, çünkü her yerde açılır. Birini diğerine çevirmek de genelde sadece kutu değişimidir ve kaliteye mal olmaz.
Videom dönüştürdükten sonra neden büyüdü?
Çünkü zaten sıkıştırılmış bir dosya bu kez daha yüksek bit hızıyla yeniden kodlandı. Kodlayıcı girdinin ne kadar kaliteli olduğunu bilmez; yalnızca verdiğiniz sayıya uyar. Çözüm, önceki çıktıdan değil master'dan dışa aktarmaktır.
Şimdi AV1 kullanmalı mıyım?
Kendi sitenizde evet, yanına yedek olarak bir de MP4 koymanız şartıyla. Bilmeye değer iki maliyeti var: kodlaması gözle görülür biçimde daha yavaştır ve Safari'de yalnızca AV1 donanım çözücüsü olan cihazlarda çalışır. Müşteriye verdiğiniz dosya içinse H.264 hâlâ daha az sorunlu seçimdir.