Dlaczego plik MP4 się nie odtwarza i czym naprawdę jest kontener

Czym kontenery takie jak MP4 i MKV różnią się od kodeków takich jak H.264 i AV1 oraz jak przepływność, klatki kluczowe, ścieżki dźwiękowe i ponowne kodowanie decydują o tym, czy plik się odtworzy i jak duży będzie.

Plik MP4, który się nie odtwarza, rzadko bywa uszkodzony. Rozszerzenie nazywa wyłącznie kontener, czyli opakowanie, które mieści strumienie i ich znaczniki czasu. Zdekodować trzeba kodek w środku, a ten sam plik .mp4 może zawierać H.264, który zagra na telefonie sprzed dekady, albo AV1, którego dwuletni telewizor nie ruszy. Właśnie dlatego jeden MP4 się odtwarza, a drugi nie.

Do każdego pliku wideo stosują się dwa pytania: w jakim jest pudełku i jak skompresowany jest obraz. Zmiana pudełka jest zwykle darmowa; zmiana kompresji nigdy nie jest.

Kontener to pudełko, kodek to obraz

KontenerKodeki wideoDźwiękWsparcie
MP4H.264, H.265, częściowo AV1AAC, MP3Wszędzie
WebMVP8, VP9, AV1Opus, VorbisTylko przeglądarki
MKVPrawie wszystkoAC-3, DTS, cokolwiekOdtwarzacze desktopowe, nie przeglądarki
MOVH.264, H.265, ProResAAC, PCMApple, montaż
AVIDivX, Xvid, MJPEGMP3, PCMStare systemy Windows

MKV jest tym pobłażliwym, dobrym do archiwów i słabym do dystrybucji: poprawny plik MKV może zawierać kombinację, której nie otworzy żadna przeglądarka. MOV i MP4 dzielą większość struktury, więc przenoszenie między nimi bywa jedynie przepisaniem indeksu. Sprawdź, co jest w pliku:

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

Znaczenie ma słowo po "Video". Słowo "mp4" nie mówi prawie nic.

Który kodek gdzie się odtworzy

KodekBity dla tej samej jakościLicencjonowanieWsparcie
H.264 (AVC)Punkt odniesienia, przyjmijmy 100%Pula patentowa, licencjonowany niemal wszędziePowszechne
H.265 (HEVC)50 do 65%Konkurujące pule, kosztowny, sprawa nierozstrzygniętaApple tak, przeglądarki nierówno
VP9Podobnie jak H.265Bez opłat licencyjnychChrome, Firefox, Edge, Android
AV130 do 50%Bez opłat licencyjnychBieżące przeglądarki, nowszy sprzęt

H.265 jest technicznie mocny i handlowo niewygodny, więc wsparcie dzieli się według linii producentów, a nie technicznych. AV1 kompresuje najlepiej i koduje znacznie wolniej, czasem o rząd wielkości, więc pasuje do materiału kodowanego raz i oglądanego często. Dla nieznanej publiczności odpowiedzią pozostaje H.264 w kontenerze MP4 i właśnie w to celuje narzędzie do kompresji wideo.

Przepływność, rozdzielczość i liczba klatek

Przepływność to liczba bitów na sekundę materiału wyjściowego i sama w sobie wyznacza rozmiar pliku: pomnóż ją przez czas trwania, a masz plik.

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

Podwojenie rozdzielczości czterokrotnie zwiększa liczbę pikseli, ale nie liczbę potrzebnych bitów, ponieważ sąsiadujące piksele w większej klatce są do siebie bardziej podobne i lepiej się kompresują. Spodziewaj się dwa do trzech razy większej liczby bitów, więc zmniejszenie szerokości i wysokości o połowę należy do najtańszych sposobów na zmniejszenie pliku: robi to zmiana rozmiaru wideo, a kadrowanie wideo po prostu wyrzuca piksele. Liczba klatek działa łagodniej, dodając od 20 do 40% przy przejściu z 30 na 60 zamiast 100%, a zmiana prędkości wideo skraca zamiast tego oś czasu.

Przepływnością steruje się na trzy sposoby:

  • Stała przepływność utrzymuje jedną wartość przez cały czas: ujęcia statyczne marnują bity, a szybki ruch się rozpada. Pasuje do łączy z twardym limitem.
  • Zmienna przepływność z wartością docelową uśrednia się, pozwalając scenom pożyczać od siebie nawzajem. Rozmiar jest przewidywalny, więc używaj jej, gdy wynik musi zmieścić się w limicie.
  • Stała jakość, zwykle wartość CRF, ustala jakość i pozwala przepływności iść tam, gdzie trzeba. Rozmiar jest nieprzewidywalny, jakość jest równa, i jest to ustawienie domyślne dla wszystkiego, co się ogląda, a nie streamuje.

Dla H.264 skala CRF biegnie od 0 do 51, gdzie niżej znaczy lepiej: 18 jest niemal nieodróżnialne od materiału źródłowego, 23 to rozsądna wartość domyślna, a powyżej 28 ruch się rozpada. Skala nie jest wspólna dla różnych kodeków.

Klatki kluczowe i dlaczego przycięcie bywa darmowe

Klatka I, czyli klatka kluczowa, to kompletny obraz, który dekoduje się samodzielnie. Klatka P zapisuje tylko to, co zmieniło się względem klatki wcześniejszej. Klatka B przewiduje zarówno z klatki wcześniejszej, jak i późniejszej, przez co kompresuje się najlepiej, i dlatego dekodery czasem wstrzymują klatki przed wyświetleniem.

Klatka kluczowa razem ze wszystkim, co od niej zależy, tworzy grupę obrazów, a kodery webowe umieszczają jedną mniej więcej co dwie sekundy. Utnij w środku grupy, a ocalałe klatki będą odwoływać się do obrazu, którego już nie ma w pliku, i dlatego przycinanie ma dwa tryby. Kopiowanie strumieni jest natychmiastowe i bezstratne, ale trafia wyłącznie w klatkę kluczową, więc początek może przesunąć się nawet o długość grupy; ponowne kodowanie umieszcza klatkę kluczową tam, gdzie poprosiłeś, kosztem czasu i jakości. Narzędzie do przycinania wideo oferuje oba; kopiuj, chyba że liczy się dokładna klatka.

Ponowne kodowanie kosztuje jakość, ponieważ każdy przebieg stratny odrzuca to, co model uznaje za najmniej widoczne. Zakoduj jeszcze raz, a drugi przebieg potraktuje artefakty pierwszego jak prawdziwe szczegóły, zachowa je i doda własne, więc błąd narasta z pokolenia na pokolenie. Kopiuj strumienie, gdy zmienia się tylko kontener, i kopiuj obraz, gdy usuwasz sam dźwięk, co robi wyciszanie wideo. Obracanie wideo potrafi zamiast obracać piksele ustawić znacznik obrotu, choć odtwarzacze, które go ignorują, pokażą pierwotną orientację. Kiedy piksele muszą się zmienić, zmieniaj wszystko w jednym przebiegu.

Ścieżka dźwiękowa to druga połowa

Dźwięk to osobny strumień z własnym kodekiem, częstotliwością próbkowania i układem kanałów, a także częsta przyczyna tego, że plik się nie odtwarza. Przeglądarka, która bez trudu dekoduje obraz H.264, może nie zdekodować dźwięku przestrzennego AC-3 albo DTS, co kończy się ciszą albo twardą awarią całego pliku. Zgrania płyt w kontenerze MKV wywracają się na tym bez przerwy.

Częstotliwość próbkowania to liczba pomiarów przebiegu na sekundę: 44100 Hz z płyty CD, 48000 Hz jako standard wideo. AAC przy 48000 Hz w stereo jest bezpiecznym wyborem do dystrybucji, w okolicach 128 kb/s dla mowy i 192 kb/s dla muzyki. Wyodrębnianie dźwięku wyciąga ścieżkę jako MP3, WAV, AAC albo Opus.

Zamiana wideo w GIF

GIF to format obrazu nieruchomego z 1987 roku z doczepioną animacją i bez prawdziwej kompensacji ruchu. Każda klatka jest w dużej mierze kompresowana samodzielnie, więc pięć sekund potrafi urosnąć do kilku megabajtów tam, gdzie ten sam materiał jako niemy MP4 zajmuje dwieście kilka kilobajtów. Format jest ograniczony do 256 kolorów na klatkę, ma jeden bit przezroczystości i nie ma dźwięku.

To właśnie na limicie kolorów wygrywa się albo przegrywa jakość. Ogólna, stała paleta powoduje pasma na gradientach i wymusza mocny dithering, a ten szum jest bliski losowemu, więc kompresuje się źle i rozdyma plik. Zbudowanie palety z samego materiału, a potem odwzorowanie na nią klatek, daje lepszy obraz i często mniejszy plik; konwerter wideo na GIF wykonuje ten przebieg. Trzymaj pliki GIF krótkie i wąskie: dwie albo trzy sekundy, od 480 do 640 pikseli szerokości, od 10 do 15 klatek na sekundę. Jeśli miejsce docelowe przyjmuje wideo, wyślij wyciszony plik MP4.

Ustawienia, które sprawdzają się w sieci

  • H.264 w kontenerze MP4 z dźwiękiem AAC do wszystkiego, co ma się po prostu odtworzyć.
  • CRF w okolicach 23, w dół do 20 przy nagraniach ekranu z drobnym tekstem, w górę do 26 przy materiale tła.
  • Zmień rozmiar do szerokości, w jakiej materiał będzie wyświetlany, przed kompresją, a nie po niej.
  • Włącz faststart, żeby indeks leżał na początku, a odtwarzanie zaczynało się przed zakończeniem pobierania.

Wszystko to działa w przeglądarce na twojej własnej maszynie, więc nic nie jest wysyłane, a granicą jest pamięć, a nie limit serwera. Bufory dekodowania długiego pliku 4K potrafią wyczerpać kartę przeglądarki, więc najpierw przytnij, a dopiero potem zmieniaj rozmiar.