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óbkowania
Rzeczywisty wektor:
(0.75, 0.50) px
Przesunięcie poziome0.75 px

Przesunięcia w pikselach. Tryb ćwierćpikselowy odblokowuje kroki co 0,25.

Przesunięcie pionowe0.50 px

Przesunięcia w pikselach. Tryb ćwierćpikselowy odblokowuje kroki co 0,25.

Fragment klatki referencyjnej
58
60
61
63
64
64
60
63
66
69
71
72
63
67
74
80
84
85
65
71
79
88
95
98
67
75
85
97
108
113
68
78
90
104
118
123
Prawdziwy blok klatki
70
74
76
78
75
82
87
90
80
90
99
104
86
98
110
117
Blok przewidziany
69
73
77
78
75
82
88
91
80
90
99
105
85
97
110
117
Jakość predykcji
Średni błąd kwadratowy
0.50
PSNR
51.1 dB
Wariancja rezyduum
0.50
ΔMSE vs half
-4.25

Porównanie do wektora ruchu (0,75, 0,5) piksela.

Predykcja Wewnątrzklatkowa: Inteligentniejsze Obrazy Statyczne

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 16×1616 \times 16 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 16×1616 \times 16 można podzielić na mniejsze bloki dla bardziej precyzyjnej kompensacji ruchu. Może być podzielony na bloki 16×816 \times 8, 8×168 \times 16 lub 8×88 \times 8. Każdy z tych podbloków 8×88 \times 8 może być dalej dzielony na bloki 8×48 \times 4, 4×84 \times 8, a nawet malutkie bloki 4×44 \times 4. 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łu

    Cztery podbloki z kompaktowym zestawem wektorów śledzą już umiarkowane detale.

    16×16
    8×8 (ćwiartki)
    8×8
    8×8
    8×8
    8×8
    Ziarnistość bloków
    Grube bloki

    Jeden wektor ruchu, najmniejszy narzut

    Średnie bloki

    Kompromis między detalem a sygnalizacją

    Drobne bloki

    Śledzi drobne tekstury i cienki ruch

    Szacowany koszt kodowania
    Bity nagłówka + ruchu
    28 bits
    Energia rezyduum
    18
    Symbole CABAC
    42
    Kiedy koder wybiera ten tryb

    Sylwetki 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ć 1920×10801920 \times 1080 przy 30 klatkach na sekundę, podczas gdy wyższy Poziom 5.1 byłby potrzebny do rozdzielczości 4K4K. 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ść.
    Kompresja H.264 | Teleinf Edu