Kompresja

Kompresja H.264

Zaawansowany standard kodowania wideo z kompensacją ruchu i predykcją.

Kontekst Powstania H.264

Na początku lat 2000. cyfrowe wideo upowszechniało się między innymi dzięki MPEG-2, używanemu na płytach DVD i we wczesnych transmisjach telewizji cyfrowej. Standard zapewniał jakość odpowiednią dla wielu zastosowań, lecz jego wydajność kompresji ograniczała transmisję internetową przy ówczesnej przepustowości. Film standardowej rozdzielczości na płycie DVD mógł zajmować kilka gigabajtów, a przesyłanie go przez typowe łącze DSL wymagało znacznego bitrate'u. Rosnąca liczba usług wideo zwiększała presję na bardziej wydajne kodowanie.

W odpowiedzi współpracowały dwie grupy standaryzacyjne: ITU-T Video Coding Experts Group oraz ISO/IEC Moving Picture Experts Group. Celem projektowym było uzyskanie porównywalnej jakości przy mniej więcej połowie danych względem MPEG-2, choć rzeczywisty wynik zależy od materiału i ustawień kodera. Standard sfinalizowany w 2003 roku jest znany jako w dokumentach ITU-T oraz MPEG-4 Part 10, Advanced Video Coding (AVC) w ISO/IEC. Znalazł zastosowanie na płytach Blu-ray, w usługach internetowych takich jak YouTube i Netflix, w wideokonferencjach oraz w nagrywaniu mobilnym. Powiązane specyfikacje opisują składnię strumienia i proces dekodowania, co ułatwia zgodne działanie kodeka w pamięci masowej, transmisji i usługach sieciowych.

Zasada Działania: Predykcja Przestrzenna i Czasowa

H.264 wykorzystuje znane zasady redukcji redundancji przestrzennej wewnątrz klatek i czasowej między klatkami. Rozszerza je o większą elastyczność podziału bloków, dokładniejsze wektory ruchu, wiele obrazów referencyjnych, filtrację w pętli oraz kodowanie entropijne. Dobór narzędzia zmniejsza rozmiar predykowanej różnicy, czyli rezydualnej, którą trzeba zakodować. Dekoder wykonuje kroki określone przez strumień, odtwarzając próbki potrzebne do wyświetlenia obrazu i kolejnych predykcji. Wspólna składnia strumienia i zdefiniowane procedury dekodowania zapewniają zgodność w pamięci masowej, transmisji i usługach sieciowych.

Predykcja Wewnątrzklatkowa: Kodowanie Bloków w Klatce

Podobnie jak starsze kodeki, H.264 używa klatek I (Intra) jako punktów odniesienia kodowanych bez odwołania do innych klatek. W obrębie klatki koder stosuje transformację całkowitoliczbową związaną z DCT oraz . Na podstawie zakodowanych sąsiadów powyżej i po lewej stronie wybiera tryb, na przykład pionowy, poziomy lub DC, a następnie koduje różnicę między blokiem i predykcją. Mniejsza rezydualna ogranicza liczbę współczynników wymagających dalszego kodowania także w klatkach kluczowych. Predykcja nie odzyskuje utraconych szczegółów. Po kwantyzacji część informacji może zostać odrzucona w trybie stratnym.

Predykcja Międzyklatkowa: Kompensacja Ruchu

W klatkach P i B H.264 stosuje . Koder wskazuje podobny obszar w obrazie referencyjnym, przekazuje wektor ruchu i koduje rezydualną różnicę. Podział bloków, interpolacja oraz dobór referencji zwiększają dokładność predykcji, więc do zapisania pozostaje mniej danych. Klatki B mogą korzystać z referencji z obu kierunków, co zmniejsza redundancję czasową kosztem pamięci i opóźnienia kodowania. Dekoder odtwarza te obrazy w kolejności wymaganej do wyświetlania i zarządzania referencjami, która może różnić się od kolejności transmisji.

Narzędzia Kodowania H.264

Często przywoływana wartość około 50% poprawy względem MPEG-2 jest uśrednionym celem lub wynikiem wybranych porównań, bez gwarancji stałej wartości. Na efektywność wpływają treść, rozdzielczość, bitrate, profil, poziom i ustawienia kodera. Narzędzia opisane poniżej zwiększają dokładność predykcji albo zmniejszają liczbę bitów potrzebnych do zapisania rezydualnej. Zwiększenie jakości przy tym samym bitrate zależy od sposobu kwantyzacji i decyzji kodera, dlatego wynik praktyczny wymaga porównania tych samych scen i parametrów.

  • 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 pozwala dobierać rozmiar partycji do ruchu. Makroblok 16×1616 \times 16 można podzielić na bloki 16×816 \times 8, 8×168 \times 16 lub 8×88 \times 8. Każdy podblok 8×88 \times 8 może zostać dalej podzielony na 8×48 \times 4, 4×84 \times 8 albo 4×44 \times 4. Duże partycje pasują do prostego tła, a małe do ruchu obiektu i drobnej tekstury, dzięki czemu wektor ruchu lepiej opisuje lokalną zmianę. Koder wybiera podział wspólnie z wektorem i kosztem sygnalizacji, dlatego najmniejszy blok nie zawsze daje najkrótszy strumień. Samo sygnalizowanie podziału również zajmuje bity, więc decyzja równoważy błąd predykcji i narzut składni.

  • 2. Precyzja Wektora Ruchu do Ćwierć Piksela

    Kolejnym usprawnieniem jest precyzja wektora ruchu. MPEG-2 mógł odwoływać się do pozycji z dokładnością do pół piksela. H.264 stosuje dla składowej luminancji precyzję .

    Pozycje "podpikselowe" są obliczane przez interpolację próbek z klatki referencyjnej. Nie są dodatkowymi pikselami zapisanymi w obrazie. Dla luminancji pozycje półpikselowe wyznacza filtr, a pozycje ćwierćpikselowe powstają z wartości rzeczywistych i pośrednich. Interpolacja pozwala koderowi lepiej dopasować blok przesunięty o niecałkowitą liczbę pikseli, co zmniejsza błąd predykcji i rezydualną. Współczynniki filtrów oraz dokładność próbek są określone przez standard, więc dekoder może odtworzyć te same wartości. Składowe chrominancji mają własne reguły próbkowania i precyzji, dlatego określenie "ćwierć piksela" odnosi się tutaj do luminancji.

  • 3. Wiele Klatek Referencyjnych

    Wiele starszych kodeków używało głównie bezpośrednio poprzedniej klatki. H.264 pozwala koderowi przechowywać i wybierać wiele poprzednich obrazów referencyjnych, a dla predykcji klatek B również obrazy późniejsze w kolejności wyświetlania. W zależności od poziomu i parametrów bufora może przechowywać do 16 klatek referencyjnych. Większa liczba referencji zwiększa możliwości dopasowania, lecz wymaga pamięci, wyszukiwania i sygnalizowania indeksu.

    Kilka referencji pomaga między innymi w następujących sytuacjach:

    • Okluzja: Gdy obiekt jest chwilowo zasłonięty, koder może odwołać się do obrazu sprzed zasłonięcia i wykorzystać go jako kandydata predykcji po ponownym pojawieniu się obiektu.
    • Ruch Powtarzalny: Przy ruchu oscylacyjnym, takim jak machająca dłoń lub odbijająca się piłka, można wybrać wcześniejszy obraz z podobnym położeniem obiektu.
    • Przenikanie Scen: Podczas przenikania referencje z obrazu odchodzącej i przychodzącej sceny mogą dać dokładniejszą predykcję.
  • 4. Filtr Odblokowujący w Pętli

    Typowym artefaktem kompresji blokowej jest "blokowość". Niezależne przetwarzanie bloków może powodować nieciągłości na ich krawędziach, szczególnie przy niskim bitrate.

    H.264 definiuje w pętli rekonstrukcji. Analizuje on próbki po obu stronach granicy i może je wygładzić zgodnie z parametrami strumienia. Odfiltrowany obraz jest używany jako referencja dla kolejnych predykcji, lecz składnia standardu pozwala sterować działaniem filtra. Zmniejsza to widoczność bloków i ogranicza propagację błędów. W ten sposób filtr wpływa zarówno na obraz bieżący, jak i na obrazy referencyjne używane później.

  • 5. Zaawansowane Kodowanie Entropijne (CABAC)

    Po transformacji i kwantyzacji współczynników H.264 stosuje kodowanie entropijne, które zapisuje je bezstratnie względem wartości przekazanych do tego etapu. Standard obsługuje CAVLC oraz . Dostępność CABAC zależy od profilu.

    CABAC wykorzystuje konteksty zależne od rodzaju kodowanego binu i aktualizuje ich prawdopodobieństwa w trakcie strumienia. Na przykład statystyki sąsiednich bloków mogą wpływać na model współczynników bieżącego bloku. W przeciwieństwie do pojedynczego stałego modelu dla całej klatki pozwala to lepiej dopasować kodowanie do lokalnych danych. Dla sygnałów telewizyjnych typowe porównania wskazują oszczędność rzędu 10 do 20 procent względem CAVLC przy podobnej jakości, lecz wynik zależy od materiału i ustawień. CABAC zwiększa jednak złożoność dekodowania, dlatego dobór profilu uwzględnia możliwości sprzętu i wymagane opóźnienie.

Profile i Poziomy: Ograniczenia Dekodera

H.264 opisuje możliwości dekodera przez oraz ograniczenia przepływności i rozmiaru obrazu przez . Para tych parametrów ułatwia sprawdzenie zgodności strumienia z urządzeniem. Informacja o profilu i poziomie jest przekazywana w parametrach strumienia, więc odtwarzacz może odrzucić konfigurację poza swoimi limitami.

  • Profile: Profil określa zbiór narzędzi, które musi obsługiwać dekoder. Prosty czat wideo może wymagać mniejszego zbioru funkcji niż film wysokiej rozdzielczości na płycie Blu-ray. Przykładowe profile to:
    • Profil Podstawowy (Baseline): Obejmuje prostszy zestaw narzędzi, bez klatek B i CABAC. Był przeznaczony między innymi dla urządzeń o mniejszej mocy i połączeń o małym opóźnieniu.
    • Profil Główny (Main): Dodaje między innymi klatki B i CABAC względem profilu Baseline. Stosowano go w telewizji cyfrowej oraz innych zastosowaniach wymagających większej wydajności.
    • Profil Wysoki (High): Rozszerza możliwości profilu Main o narzędzia przeznaczone dla treści wysokiej rozdzielczości, między innymi macierze kwantyzacji. Jest spotykany w materiałach Blu-ray i usługach internetowych.
  • Poziomy: Poziom ogranicza między innymi liczbę makrobloków na sekundę, maksymalny rozmiar obrazu i bitrate. Poziom 4.1 może obsługiwać 1920×10801920 \times 1080 przy 30 klatkach na sekundę w odpowiednich ograniczeniach. Dla materiału 4K4K potrzebny jest wyższy poziom. Poziom 5.1 pozwala na większe przepływności i częstotliwości niż niższe poziomy, lecz dokładna zgodność zależy od parametrów strumienia. Dekoder musi spełnić limity wybranego profilu i poziomu, a sama etykieta rozdzielczości nie określa jeszcze maksymalnej liczby klatek ani bitrate.

Powiązane artykuły