Kompresja H.264
Zaawansowany standard kodowania wideo z kompensacją ruchu i predykcją.
Nowa Era dla Wideo: Potrzeba Stworzenia H.264
Na początku lat 2000., cyfrowe wideo stało się powszechne, w dużej mierze dzięki standardowi MPEG-2, technologii, która napędzała płyty DVD i wczesne transmisje telewizji cyfrowej. Choć rewolucyjny jak na swoje czasy, MPEG-2 miał swoje ograniczenia. Jego wydajność kompresji nie była wystarczająca dla rodzącego się świata internetu, gdzie przepustowość była ograniczona, a zapotrzebowanie na streaming wideo rosło w postępie geometrycznym. Film w standardowej rozdzielczości na płycie DVD mógł zajmować kilka gigabajtów; strumieniowanie tego przez typowe łącze DSL z tamtej epoki było po prostu niewykonalne.
To wyzwanie skłoniło do współpracy dwie główne organizacje standaryzacyjne: Grupę Ekspertów ds. Kodowania Wideo ITU-T oraz Grupę Ekspertów ds. Ruchomych Obrazów ISO/IEC. Ich cel był ambitny: stworzyć nowy standard kompresji wideo, który mógłby dostarczyć tę samą jakość wizualną co MPEG-2, ale przy użyciu zaledwie połowy danych. Rezultatem tego projektu, sfinalizowanego w 2003 roku, był przełomowy nowy standard znany pod dwiema nazwami: według ITU-T oraz MPEG-4 Part 10, Advanced Video Coding (lub AVC), według ISO/IEC. Ten standard odniósł tak wielki sukces, że stał się jedyną dominującą technologią dystrybucji wideo, stanowiąc podstawę wszystkiego, od płyt Blu-ray i streamingu online (YouTube, Netflix) po wideokonferencje i nagrywanie wideo na urządzeniach mobilnych.
Filozofia Rdzenia: Ewolucyjny Skok
H.264 nie wymyślił kompresji wideo od nowa. Zamiast tego, wziął sprawdzone koncepcje swoich poprzedników i wzbogacił je o zestaw zaawansowanych nowych narzędzi i znacznie większy stopień elastyczności. Fundamentalne zasady redukcji redundancji przestrzennej wewnątrz klatek i redundancji czasowej między klatkami pozostały, ale H.264 realizował je z o wiele większą precyzją i inteligencją.
Eksplorator ruchu ćwierćpikselowego
Przesuwaj wektor ruchu i sprawdź, jak próbkowanie subpikselowe zmniejsza rezyduum.
Precyzja próbkowaniaRzeczywisty wektor:(0.75, 0.50) pxPrzesunięcie poziome0.75 pxPrzesunięcia w pikselach. Tryb ćwierćpikselowy odblokowuje kroki co 0,25.
Przesunięcie pionowe0.50 pxPrzesunięcia w pikselach. Tryb ćwierćpikselowy odblokowuje kroki co 0,25.
Fragment klatki referencyjnej58606163646460636669717263677480848565717988959867758597108113687890104118123Prawdziwy blok klatki70747678758287908090991048698110117Blok przewidziany69737778758288918090991058597110117Jakość predykcjiŚredni błąd kwadratowy0.50PSNR51.1 dBWariancja rezyduum0.50ΔMSE vs half-4.25Porównanie do wektora ruchu (0,75, 0,5) piksela.
Predykcja Wewnątrzklatkowa: Inteligentniejsze Obrazy Statyczne
Eksplorator ruchu ćwierćpikselowego
Przesuwaj wektor ruchu i sprawdź, jak próbkowanie subpikselowe zmniejsza rezyduum.
Przesunięcia w pikselach. Tryb ćwierćpikselowy odblokowuje kroki co 0,25.
Przesunięcia w pikselach. Tryb ćwierćpikselowy odblokowuje kroki co 0,25.
Porównanie do wektora ruchu (0,75, 0,5) piksela.
Podobnie jak starsze kodeki, H.264 używa klatek I (klatek Intra) jako okresowych punktów odniesienia, które są kompresowane bez odwoływania się do innych klatek. Jednak klatki I w H.264 są kompresowane znacznie wydajniej. Zamiast po prostu stosować kompresję DCT podobną do JPEG do bloku, H.264 używa sprytnej techniki zwanej . Koder przewiduje zawartość bloku na podstawie jego już zakodowanych sąsiadów powyżej i po lewej stronie. Może wybierać spośród kilku trybów predykcji (np. przewidywanie wzoru pionowego, poziomego lub po prostu średniego koloru) i koduje tylko niewielką różnicę między rzeczywistym blokiem a jego przewidywaniem. Znacznie to zmniejsza ilość danych potrzebnych nawet dla klatek kluczowych.
Predykcja Międzyklatkowa: Kompensacja Ruchu na Sterydach
Największe postępy w H.264 dotyczą sposobu obsługi klatek P i B. Opiera się on na idei , ale dodaje kilka potężnych ulepszeń, które sprawiają, że jego przewidywania są znacznie dokładniejsze. Dokładniejsze przewidywania oznaczają, że rezydualna (różnica, którą należy zakodować) jest znacznie mniejsza, co prowadzi do lepszej kompresji. Te ulepszenia tworzą "zestaw narzędzi", który daje H.264 jego moc.
Zestaw Narzędzi H.264: Dogłębne Spojrzenie na Innowacje
Około 50% wzrost wydajności H.264 w porównaniu z MPEG-2 wynika z kolekcji potężnych nowych funkcji. Każda z nich zapewnia sposób na dokonywanie dokładniejszych predykcji i wydajniejsze kodowanie wynikowych danych.
1. Kompensacja Ruchu ze Zmiennym Rozmiarem Bloku
Starsze standardy, takie jak MPEG-2, były sztywne. Dzieliły obraz na makrobloki o stałym rozmiarze, zazwyczaj pikseli, i przeprowadzały kompensację ruchu dla całego tego bloku za pomocą jednego wektora ruchu. Działało to dobrze dla dużych, jednolitych, poruszających się obszarów, ale było nieefektywne dla obszarów o złożonym ruchu lub drobnych detalach.
H.264 wprowadził rewolucyjną koncepcję zmiennych rozmiarów bloków. Makroblok można podzielić na mniejsze bloki dla bardziej precyzyjnej kompensacji ruchu. Może być podzielony na bloki , lub . Każdy z tych podbloków może być dalej dzielony na bloki , , a nawet malutkie bloki . Pozwala to koderowi używać dużych bloków dla prostych teł i bardzo małych bloków do śledzenia skomplikowanego ruchu małych obiektów lub szczegółowych tekstur. Ta adaptacyjność skutkuje znacznie dokładniejszymi przewidywaniami.
Adaptacyjny podział makrobloku
Zobacz jak H.264 dzieli makroblok 16×16 w zależności od szczegółów i ruchu.
Tryby podziałuCztery podbloki z kompaktowym zestawem wektorów śledzą już umiarkowane detale.
16×168×8 (ćwiartki)8×88×88×88×8Ziarnistość blokówGrube blokiJeden wektor ruchu, najmniejszy narzut
Średnie blokiKompromis między detalem a sygnalizacją
Drobne blokiŚledzi drobne tekstury i cienki ruch
Szacowany koszt kodowaniaBity nagłówka + ruchu28 bitsEnergia rezyduum18Symbole CABAC42Kiedy koder wybiera ten trybSylwetki na tle ruchomym, krawędzie okien, animacje logotypów.
Im drobniejszy podział, tym większa szansa na minimalne rezyduum – lecz liczba nagłówków i symboli CABAC rośnie.
2. Precyzja Wektora Ruchu do Ćwierć Piksela
Kolejnym skokiem w dokładności była precyzja wektora ruchu. MPEG-2 mógł odwoływać się do pozycji z dokładnością do pół piksela. H.264 podnosi to do precyzji .
Nie oznacza to, że koder widzi wyimaginowane piksele. Zamiast tego tworzy te pozycje "podpikselowe" poprzez matematyczną interpolację między rzeczywistymi pikselami klatki referencyjnej. Na przykład pozycja półpikselowa jest obliczana przez uśrednienie sąsiednich pikseli, a pozycja ćwierćpikselowa jest następnie obliczana przez uśrednienie między rzeczywistym pikselem a obliczoną pozycją półpikselową. Dzięki możliwości odwoływania się do tych znacznie drobniejszych, interpolowanych pozycji, koder może znaleźć znacznie lepsze dopasowanie dla bloku, który poruszył się o bardzo małą, niecałkowitą odległość. Prowadzi to do mniejszego błędu predykcji (rezydualnej), a tym samym do lepszej kompresji.
3. Wiele Klatek Referencyjnych
Starsze kodeki były ograniczone do odwoływania się tylko do bezpośrednio poprzedzającej klatki w celu predykcji ruchu. H.264 przełamuje to ograniczenie, pozwalając koderowi na przechowywanie i odwoływanie się do wielu poprzednich (a w przypadku klatek B, również przyszłych) klatek. Koder może być skonfigurowany do przechowywania w pamięci nawet do 16 klatek referencyjnych.
Jest to niezwykle potężne w kilku scenariuszach:
- Okluzja: Jeśli obiekt jest tymczasowo ukryty za innym obiektem, a następnie pojawia się ponownie, koder może odwołać się do klatki sprzed ukrycia, aby znaleźć idealne dopasowanie.
- Ruch Powtarzalny: W przypadku ruchów oscylacyjnych, takich jak machająca dłoń lub odbijająca się piłka, koder może odwołać się do wcześniejszej klatki, w której obiekt był w tej samej pozycji.
- Przenikanie Scen: Podczas przenikania, odwoływanie się do klatek z odchodzącej i przychodzącej sceny może stworzyć bardziej wydajną predykcję.
4. Filtr Odblokowujący w Pętli
Powszechnym i wizualnie irytującym artefaktem kompresji opartej na blokach (jak DCT) jest "blokowość". Ponieważ każdy blok jest kompresowany niezależnie, na krawędziach bloków mogą pojawić się subtelne nieciągłości, sprawiając, że obraz wygląda jak złożony z widocznej siatki, zwłaszcza przy niskich przepływnościach.
H.264 rozwiązuje ten problem, włączając jako obowiązkową część procesu dekodowania. Filtr ten inteligentnie analizuje piksele na granicach bloków i stosuje algorytm wygładzający, aby zmniejszyć widoczność tych krawędzi. Co kluczowe, filtrowanie to odbywa się "w pętli", co oznacza, że wyczyszczona, odblokowana klatka jest następnie używana jako referencja do przewidywania przyszłych klatek. To nie tylko poprawia jakość wizualną bieżącej klatki, ale także zapewnia wyższej jakości referencję dla następnych klatek, poprawiając ogólną wydajność kompresji i zapobiegając kumulacji artefaktów.
5. Zaawansowane Kodowanie Entropijne (CABAC)
Ostatnim etapem kompresji jest kodowanie entropijne, które bezstratnie pakuje skwantyzowane dane. Chociaż H.264 obsługuje prostszą metodę (CAVLC) dla mniej wymagających zastosowań, jego tryb wysokiej wydajności używa .
W przeciwieństwie do kodowania Huffmana, które używa stałego modelu statystycznego dla całej klatki, CABAC jest adaptacyjny. Rozumie on, że prawdopodobieństwo wystąpienia symbolu zależy od jego kontekstu, czyli wartości jego sąsiadów. Na przykład, jeśli współczynniki sąsiednich bloków były duże, jest bardziej prawdopodobne, że współczynniki bieżącego bloku również będą duże. CABAC dynamicznie aktualizuje swoje modele prawdopodobieństwa w trakcie przetwarzania danych, używając najbardziej odpowiedniego kontekstu do przewidywania i kodowania każdego bitu. Ta adaptacja kontekstowa pozwala mu wycisnąć więcej redundancji, zapewniając zysk kompresji na poziomie 10 do 15 procent w porównaniu ze starszymi metodami kodowania entropijnego przy tej samej jakości wizualnej.
Profile i Poziomy: Standard na Każdą Potrzebę
H.264 nie jest pojedynczym, monolitycznym standardem. Jest to elastyczna platforma z różnymi poziomami złożoności, zdefiniowanymi przez i .
- Profile: Profil definiuje, które części "zestawu narzędzi" H.264 są używane. Różne zastosowania mają różne potrzeby. Prosty czat wideo na telefonie nie potrzebuje tych samych złożonych funkcji, co film w wysokiej rozdzielczości na płycie Blu-ray. Popularne profile to:
- Profil Podstawowy (Baseline): Używa najprostszych funkcji. Nie używa klatek B ani CABAC. Zaprojektowany dla urządzeń o niskiej mocy i zastosowań o niskim opóźnieniu, jak wideokonferencje.
- Profil Główny (Main): Pośrednie rozwiązanie używane w standardowej telewizji cyfrowej. Dodaje wsparcie dla klatek B i bardziej zaawansowanych technik kodowania.
- Profil Wysoki (High): Najpopularniejszy profil dla nowoczesnych treści w wysokiej rozdzielczości. Obejmuje wszystkie zaawansowane funkcje, takie jak elastyczniejsza predykcja wewnątrzklatkowa i macierze kwantyzacji, i jest używany na płytach Blu-ray oraz w większości serwisów streamingowych.
- Poziomy: Poziom definiuje ograniczenia wydajności dla danego profilu. Ustawia on limity na parametry takie jak maksymalna rozdzielczość, liczba klatek na sekundę i bitrate. Na przykład Poziom 4.1 może obsługiwać przy 30 klatkach na sekundę, podczas gdy wyższy Poziom 5.1 byłby potrzebny do rozdzielczości . Ten system zapewnia, że urządzenie, takie jak smartfon czy smart TV, musi być wystarczająco wydajne tylko do obsługi treści, do których zostało zaprojektowane, gwarantując kompatybilność.