Proč se MP4 nepřehraje a co je vlastně kontejner

Čím se kontejnery jako MP4 a MKV liší od kodeků jako H.264 a AV1 a jak bitrate, klíčové snímky, zvukové stopy a překódování rozhodují o tom, jestli se soubor přehraje a jak bude velký.

MP4, které se nepřehraje, je jen zřídka poškozené. Přípona pojmenovává pouze kontejner, tedy obal, který drží datové proudy a jejich časová razítka. Dekódovat je potřeba kodek uvnitř a totéž .mp4 může obsahovat H.264, který se přehraje na deset let starém telefonu, nebo AV1, na který dva roky stará televize nestačí. Proto se jedno MP4 přehraje a druhé ne.

U každého videosouboru platí dvě otázky: v jaké je krabici a jak je obraz komprimovaný. Změna krabice je obvykle zadarmo; změna komprese nikdy.

Kontejner je krabice, kodek je obraz

KontejnerVideo kodekyZvukPodpora
MP4H.264, H.265, někdy AV1AAC, MP3Všude
WebMVP8, VP9, AV1Opus, VorbisJen prohlížeče
MKVSkoro cokoliAC-3, DTS, cokoliDesktopové přehrávače, ne prohlížeče
MOVH.264, H.265, ProResAAC, PCMApple, střih
AVIDivX, Xvid, MJPEGMP3, PCMStarší Windows

MKV je ten benevolentní, dobrý na archivy a špatný na distribuci: platné MKV může obsahovat kombinaci, kterou žádný prohlížeč neotevře. MOV a MP4 sdílejí většinu své struktury, takže přesun mezi nimi je často jen přepis indexu. Prohlédněte si soubor:

input.mp4
  Stream #0:0  Video  h264 (High)   1920x1080  30 fps  4200 kb/s
  Stream #0:1  Audio  aac  (LC)     48000 Hz   stereo   128 kb/s

Podstatné je slovo za „Video“. Slovo „mp4“ vám neřekne skoro nic.

Který kodek kde hraje

KodekBity při stejné kvalitěLicencováníPodpora
H.264 (AVC)Základ, řekněme 100 %Patentový pool, licencovaný skoro všudeUniverzální
H.265 (HEVC)50 až 65 %Konkurenční pooly, drahé, nedořešenéApple ano, prohlížeče nejednotně
VP9Podobné jako H.265Bez licenčních poplatkůChrome, Firefox, Edge, Android
AV130 až 50 %Bez licenčních poplatkůSoučasné prohlížeče, novější hardware

H.265 je technicky silný a komerčně nepohodlný, takže se podpora dělí spíš podle výrobců než podle techniky. AV1 komprimuje nejlépe a kóduje mnohem pomaleji, někdy o řád, takže se hodí na video, které se zakóduje jednou a sleduje mnohokrát. Pro neznámé publikum zůstává odpovědí H.264 v MP4 a Compress Video na něj cílí.

Bitrate, rozlišení a snímková frekvence

Bitrate je počet bitů na sekundu výstupu a jen on určuje velikost souboru: vynásobte ho délkou a máte soubor.

1920 x 1080 x 30 fps x 3 bytes = about 186 MB per second raw
delivered at 4 Mb/s            = about 0.5 MB per second

Zdvojnásobení rozlišení zčtyřnásobí počet pixelů, ale ne počet potřebných bitů, protože sousední pixely ve větším snímku jsou si podobnější a lépe se komprimují. Počítejte se dvoj až trojnásobkem, takže poloviční šířka i výška patří k nejlevnějším způsobům, jak soubor zmenšit: to dělá Resize Video a Crop Video pixely rovnou zahazuje. Snímková frekvence je mírnější, přechod z 30 na 60 přidá 20 až 40 % místo 100 %, a Change Video Speed místo toho zkracuje časovou osu.

Tři způsoby, jak datový tok řídit:

  • Konstantní bitrate drží po celou dobu jeden datový tok: statické záběry plýtvají bity, rychlý pohyb se rozpadá. Hodí se pro linky s tvrdým stropem.
  • Variabilní bitrate s cílovou hodnotou se průměruje a nechává scény půjčovat si bity navzájem. Velikost je předvídatelná, takže ho použijte, když se výstup musí vejít do limitu.
  • Konstantní kvalita, obvykle hodnota CRF, drží kvalitu a nechá bitrate jít tam, kam potřebuje. Velikost je nepředvídatelná, kvalita rovnoměrná, a je to výchozí volba pro cokoli, co se sleduje spíš než streamuje.

U H.264 jde stupnice CRF od 0 do 51, kde nižší je lepší: 18 je od zdroje téměř k nerozeznání, 23 je rozumná výchozí hodnota a nad 28 se pohyb rozpadá. Stupnice není mezi kodeky společná.

Klíčové snímky a proč je ořez někdy zdarma

Snímek I, tedy klíčový snímek, je úplný obraz, který se dekóduje sám o sobě. Snímek P ukládá jen to, co se změnilo oproti dřívějšímu snímku. Snímek B předpovídá z dřívějšího i pozdějšího snímku, což komprimuje nejlépe, a proto dekodéry někdy snímky před zobrazením zadržují.

Klíčový snímek se snímky, které na něm závisí, tvoří skupinu obrazů a webové kodéry ji zakládají zhruba každé dvě sekundy. Když střihnete uprostřed skupiny, budou přeživší snímky odkazovat na obraz, který už v souboru není, a proto má ořezávání dva režimy. Kopírování proudů je okamžité a bezeztrátové, ale padne jen na klíčový snímek, takže se začátek může posunout až o délku skupiny; překódování umístí klíčový snímek tam, kam jste chtěli, za cenu času a kvality. Trim Video nabízí obojí; kopírujte, pokud vám nejde o přesný snímek.

Překódování stojí kvalitu, protože každý ztrátový průchod zahodí to, co model považuje za nejméně viditelné. Zakódujte znovu a druhý průchod bude s artefakty prvního zacházet jako se skutečným detailem, uchová je a přidá vlastní, takže se chyba přes generace kumuluje. Kopírujte proudy, když se mění jen kontejner, a kopírujte obraz, když odchází jen zvuk, což dělá Mute Video. Rotate Video umí místo otáčení pixelů nastavit příznak rotace, i když přehrávače, které ho ignorují, ukážou původní orientaci. Když se pixely změnit musí, změňte všechno jedním průchodem.

Zvuková stopa je ta druhá polovina

Zvuk je samostatný proud s vlastním kodekem, vzorkovací frekvencí a rozložením kanálů a je běžnou příčinou toho, že se soubor nepřehraje. Prohlížeč, který obraz v H.264 dekóduje bez problémů, nemusí zvládnout prostorový AC-3 nebo DTS, což skončí tichem nebo tvrdým selháním celého souboru. Ripy z disků v MKV takhle selhávají neustále.

Vzorkovací frekvence říká, jak často se průběh měřil: 44100 Hz z CD, 48000 Hz je standard u videa. Bezpečnou volbou pro distribuci je AAC v 48000 Hz stereo, kolem 128 kb/s pro mluvené slovo a 192 kb/s pro hudbu. Extract Audio stopu vytáhne jako MP3, WAV, AAC nebo Opus.

Převod videa na GIF

GIF je formát statického obrázku z roku 1987, ke kterému byla přišroubována animace, a bez skutečné kompenzace pohybu. Každý snímek se komprimuje převážně sám o sobě, takže pět sekund může narůst na několik megabajtů tam, kde tentýž klip jako němé MP4 zabere pár set kilobajtů. Je omezený na 256 barev na snímek, má jeden bit průhlednosti a žádný zvuk.

Barevný limit je místo, kde se kvalita vyhrává nebo prohrává. Obecná pevná paleta rozdělí přechody do pruhů a vynutí si silný dithering, přičemž ten šum je blízký náhodnému, takže se špatně komprimuje a soubor nafukuje. Sestavit paletu z klipu samotného a pak na ni snímky namapovat dá lepší obraz a často i menší soubor; Video to GIF tento průchod dělá. Držte GIFy krátké a úzké: dvě nebo tři sekundy, 480 až 640 pixelů na šířku, 10 až 15 snímků za sekundu. Pokud cíl přijímá video, pošlete němé MP4.

Nastavení, která fungují na webu

  • H.264 v MP4 se zvukem AAC pro cokoli, co se prostě musí přehrát.
  • CRF kolem 23, dolů na 20 u záznamů obrazovky s drobným textem, nahoru na 26 u záběrů do pozadí.
  • Změňte velikost na šířku, ve které se video zobrazí, a to před kompresí, ne po ní.
  • Zapněte faststart, aby index seděl na začátku a přehrávání začalo dřív, než stahování skončí.

Všechno tohle běží v prohlížeči na vašem stroji, takže se nic nenahrává a limitem je paměť, ne serverová kvóta. Dekódovací buffery dlouhého souboru ve 4K dokážou kartu vyčerpat, takže nejdřív ořezávejte a až pak měňte velikost.