Varför en MP4 inte spelas upp, och vad en container egentligen är

Hur containrar som MP4 och MKV skiljer sig från codecar som H.264 och AV1, och hur bithastighet, nyckelbildrutor, ljudspår och omkodning avgör om en fil spelas upp och hur stor den blir.

En MP4 som inte spelas upp är sällan trasig. Filändelsen namnger bara containern, omslaget som håller strömmarna och deras tidsstämplar. Det som måste avkodas är codecen inuti, och samma .mp4 kan innehålla H.264 som spelas på en tio år gammal telefon eller AV1 som en två år gammal tv inte kan röra. Det är därför en MP4 spelas upp och en annan inte gör det.

Två frågor gäller för varje videofil: vilken låda ligger den i, och hur är bilden komprimerad. Att byta låda är oftast gratis; att byta komprimering är det aldrig.

En container är en låda, en codec är bilden

ContainerVideocodecarLjudStöd
MP4H.264, H.265, viss AV1AAC, MP3Överallt
WebMVP8, VP9, AV1Opus, VorbisEndast webbläsare
MKVNästan vad som helstAC-3, DTS, vad som helstSkrivbordsspelare, inte webbläsare
MOVH.264, H.265, ProResAAC, PCMApple, redigering
AVIDivX, Xvid, MJPEGMP3, PCMÄldre Windows

MKV är den tillåtande, utmärkt för arkiv och dålig för leverans: en giltig MKV kan innehålla en kombination som ingen webbläsare öppnar. MOV och MP4 delar det mesta av sin struktur, så att flytta mellan de två är ofta bara en omskrivning av indexet. Inspektera filen:

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

Ordet efter "Video" är det som spelar roll. Ordet "mp4" säger dig nästan ingenting.

Vilken codec som spelas var

CodecBitar för samma kvalitetLicensieringStöd
H.264 (AVC)Referens, säg 100 %Patentpool, licensierad nästan överalltUniversellt
H.265 (HEVC)50 till 65 %Konkurrerande pooler, dyrt, ouppklaratApple ja, webbläsare ojämnt
VP9Liknar H.265RoyaltyfriChrome, Firefox, Edge, Android
AV130 till 50 %RoyaltyfriAktuella webbläsare, ny hårdvara

H.265 är tekniskt stark och kommersiellt besvärlig, så stödet delar sig längs tillverkarnas linjer snarare än längs tekniska. AV1 komprimerar bäst och kodar långt långsammare, ibland en tiopotens långsammare, så den passar video som kodas en gång och ses ofta. För en okänd publik är H.264 i MP4 fortfarande svaret, och Compress Video siktar på just det.

Bithastighet, upplösning och bildfrekvens

Bithastigheten är bitar per sekund utdata, och den ensam bestämmer filstorleken: multiplicera med speltiden så har du filen.

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

Att fördubbla upplösningen fyrdubblar antalet pixlar men inte antalet bitar som behövs, eftersom grannpixlar i en större bildruta liknar varandra mer och komprimerar bättre. Räkna med två till tre gånger så många, så att halvera bredd och höjd är bland de billigaste sätten att krympa en fil: det är Resize Video, och Crop Video kastar bort pixlar rakt av. Bildfrekvensen är mildare och lägger på 20 till 40 % från 30 till 60 i stället för 100 %, och Change Video Speed kortar tidslinjen i stället.

Tre sätt att styra hastigheten:

  • Konstant bithastighet håller en enda hastighet hela vägen: stillsamma tagningar slösar bitar, snabb rörelse faller isär. Den passar förbindelser med ett hårt tak.
  • Variabel bithastighet med ett målvärde jämnar ut, så att scener kan låna av varandra. Storleken är förutsägbar, så använd den när utdata måste rymmas inom en gräns.
  • Konstant kvalitet, oftast ett CRF-värde, låser kvaliteten och låter bithastigheten gå dit den behöver. Storleken är oförutsägbar, kvaliteten är jämn, och det är standardvalet för allt som ses snarare än strömmas.

För H.264 löper CRF-skalan från 0 till 51, där lägre är bättre: 18 är nästan omöjligt att skilja från källan, 23 är ett förnuftigt standardval, och bortom 28 faller rörelsen isär. Skalan är inte gemensam mellan codecar.

Nyckelbildrutor, och varför en beskärning ibland är gratis

En I-bildruta, eller nyckelbildruta, är en komplett bild som avkodas på egen hand. En P-bildruta lagrar bara det som ändrats sedan en tidigare bildruta. En B-bildruta förutsäger utifrån både en tidigare och en senare bildruta, vilket komprimerar bäst och är anledningen till att avkodare ibland håller tillbaka bildrutor före visning.

En nyckelbildruta plus dess beroende bildrutor är en bildgrupp, och webbkodare placerar en ungefär varannan sekund. Klipp mitt i en grupp och de överlevande bildrutorna hänvisar till en bild som inte längre finns i filen, vilket är varför beskärning har två lägen. Att kopiera strömmarna går ögonblickligen och förlustfritt men landar bara på en nyckelbildruta, så starten kan glida med upp till gruppens längd; omkodning lägger en nyckelbildruta där du bad om den, till priset av tid och kvalitet. Trim Video erbjuder båda; kopiera om inte den exakta bildrutan spelar roll.

Omkodning kostar kvalitet eftersom varje förlustbehäftat pass kastar bort det som modellen anser minst synligt. Koda igen och det andra passet behandlar det första passets artefakter som verklig detalj, bevarar dem och lägger till sina egna, så felen ackumuleras genom generationerna. Kopiera strömmarna när bara containern ändras, och kopiera bilden när bara ljudet försvinner, vilket är vad Mute Video gör. Rotate Video kan sätta en rotationsflagga i stället för att vrida pixlar, även om spelare som ignorerar den visar den ursprungliga orienteringen. När pixlarna måste ändras, ändra allt i ett enda pass.

Ljudspåret är den andra halvan

Ljud är en separat ström med egen codec, samplingsfrekvens och kanaluppsättning, och en vanlig anledning till att en fil inte spelas upp. En webbläsare som gladeligen avkodar H.264-bilden kanske inte avkodar AC-3- eller DTS-surround, vilket ger tystnad eller ett rakt misslyckande för hela filen. Skivrippningar i MKV faller ständigt på detta.

Samplingsfrekvensen är hur ofta vågformen mättes: 44100 Hz från CD, 48000 Hz som videostandard. AAC i stereo vid 48000 Hz är det säkra leveransvalet, kring 128 kb/s för tal och 192 kb/s för musik. Extract Audio drar ut ett spår som MP3, WAV, AAC eller Opus.

Att göra en GIF av video

GIF är ett stillbildsformat från 1987 med animering påskruvad och utan verklig rörelsekompensation. Varje bildruta komprimeras i stort sett för sig, så fem sekunder kan svälla till flera megabyte där samma klipp som en stum MP4 är ett par hundra kilobyte. Det är begränsat till 256 färger per bildruta, har en bit transparens och inget ljud.

Färggränsen är där kvaliteten vinns eller förloras. En generisk fast palett ger bandning i övergångar och tvingar fram kraftig dithering, och det bruset ligger nära slumpmässigt, så det komprimerar dåligt och blåser upp filen. Att bygga en palett ur själva klippet och sedan mappa bildrutorna på den ger en bättre bild och ofta en mindre fil; Video to GIF gör det passet. Håll GIF-filer korta och smala: två eller tre sekunder, 480 till 640 pixlar breda, 10 till 15 bildrutor per sekund. Om destinationen accepterar video, skicka en ljudlös MP4.

Inställningar som fungerar för webben

  • H.264 i MP4 med AAC-ljud för allt som helt enkelt måste spelas upp.
  • CRF kring 23, ner till 20 för skärminspelningar med finstilt text, upp till 26 för bakgrundsmaterial.
  • Skala om till den bredd den kommer att visas i, före komprimeringen snarare än efter.
  • Slå på faststart, så att indexet ligger först och uppspelningen börjar innan nedladdningen är klar.

Allt detta körs i webbläsaren på din egen maskin, så ingenting laddas upp och gränsen är minnet, inte en serverkvot. Avkodningsbuffertar för en lång 4K-fil kan tömma en flik, så beskär först och skala om sedan.