Kompresja

Kompresja Wideo

Kompresja międzyklatkowa i wewnątrzklatkowa oraz rola klatek I, P i B w kodekach wideo.

Dlaczego potrzebna jest kompresja wideo

Kompresja obrazów statycznych zmniejsza dane jednej ilustracji. Wideo jest sekwencją obrazów wyświetlanych w określonym tempie, więc oprócz informacji przestrzennej trzeba opisać zmiany w czasie. Liczba klatek, ich rozdzielczość i format próbek powodują, że zapis surowych danych szybko osiąga duży rozmiar. Liczba klatek na sekundę określa też ilość danych przetwarzanych w każdej sekundzie.

Rozważmy surowy rozmiar krótkiego, nieskompresowanego klipu. Poniższy przykład zakłada obraz Full HD (1920×10801920 \times 1080 pikseli) i 24-bitowy zapis RGB, czyli 8 bitów na każdy kanał czerwony, zielony i niebieski. Wartości są zapisane bez próbkowania chrominancji. Pojedyncza klatka wymaga:

1920×1080 pikseli×24 bity/piksel≈49.8 milionoˊw bitoˊw1920 \times 1080 \text{ pikseli} \times 24 \text{ bity/piksel} \approx 49.8 \text{ milionów bitów}

Przy dziesiętnym przeliczniku jest to około 6.2 megabajtoˊw (MB)6.2 \text{ megabajtów (MB)} na klatkę.

Przy 30 klatkach na sekundę jedna sekunda nieskompresowanego wideo wymagałaby:

6.2 MB/klatkę×30 klatek/sekundę=186 MB/sekundę6.2 \text{ MB/klatkę} \times 30 \text{ klatek/sekundę} = 186 \text{ MB/sekundę}

W tym modelu minuta zajmowałaby ponad 11 gigabajtów, a dwugodzinny film ponad terabajt danych. Obliczenie dotyczy nieskompresowanego obrazu RGB, więc nie opisuje bitrate'u kodeka. Praktyczne kodeki często konwertują RGB do YCbCr i stosują próbkowanie chrominancji, dlatego ich rozmiar zależy także od formatu próbek. umożliwia transmisję i przechowywanie materiałów w usługach takich jak Netflix, Zoom oraz aplikacje udostępniające nagrania ze smartfona.

Algorytmy kompresji wideo wykorzystują dwa podstawowe rodzaje redundancji:

  1. Redundancja przestrzenna (wewnątrzklatkowa): Dotyczy podobnych próbek w obrębie pojedynczej klatki, podobnie jak w obrazie statycznym. Przykładami są obszary nieba albo ściany o zbliżonej barwie.
  2. Redundancja czasowa (międzyklatkowa): Wynika z podobieństwa kolejnych klatek. Podczas ruchu część tła pozostaje nieruchoma albo zmienia się w sposób możliwy do przewidzenia, więc koder może opisać zmianę za pomocą referencji i danych rezydualnych.

Kompresja wewnątrzklatkowa i międzyklatkowa w kodekach wideo

Nowoczesny kodek wideo może łączyć dwie strategie. Pierwsza koduje obraz bez odwołań do innych klatek, a druga wykorzystuje podobieństwa między obrazami w czasie. Kodek obejmuje oprogramowanie lub układ sprzętowy odpowiedzialny za kodowanie i dekodowanie. Obie strategie kończą się kodowaniem entropijnym elementów pozostałych po predykcji.

Kompresja wewnątrzklatkowa pojedynczej klatki

zajmuje się redundancją przestrzenną. Klatka jest kodowana bez odwołania do poprzedzających i następujących klatek. Przebieg przypomina schemat JPEG, lecz konkretne standardy wideo używają własnych transformacji i formatów danych.

  1. Klatka jest dzielona na małe bloki pikseli (np. 8×88 \times 8).
  2. Każdy blok jest przetwarzany przez transformację typu DCT albo przez transformację całkowitą określoną w danym standardzie. Transformacja zamienia wartości przestrzenne na współczynniki, rozdzielając składowe o wolnych zmianach od drobnych szczegółów.
  3. Współczynniki są następnie . Mniej istotne szczegóły są odrzucane albo zapisywane z mniejszą precyzją, co daje redukcję danych i może obniżyć jakość.
  4. Wynikowe skwantyzowane współczynniki są ostatecznie kompresowane bezstratnie przy użyciu technik takich jak kodowanie Huffmana.

Klatki kodowane wyłącznie tą metodą nazywa się klatkami I (Intra-frames). Mogą pełnić funkcję punktów dostępu i referencji dla dalszej predykcji. Po transformacji współczynniki są zwykle kodowane entropijnie, aby ograniczyć narzut zapisu.

Kompresja międzyklatkowa i predykcja ruchu

zajmuje się redundancją czasową. Koder przewiduje bieżącą klatkę na podstawie jednej lub kilku zdekodowanych klatek referencyjnych. Klatki B mogą korzystać z obrazów znajdujących się po obu stronach w kolejności wyświetlania.

Podstawową techniką jest kompensacja ruchu. Uproszczony przebieg obejmuje następujące kroki.

  1. Koder dzieli bieżącą klatkę na bloki. W starszych standardach takie bloki nazywa się często makroblokami, na przykład 16×1616 \times 16 pikseli.
  2. Dla każdego makrobloku w bieżącej klatce, koder przeszukuje klatkę referencyjną, aby znaleźć blok pikseli, który jest do niego najbardziej podobny. Wektor może opisywać przesunięcie z dokładnością ułamkową, zależnie od standardu.
  3. Zamiast kodować wszystkie piksele makrobloku, koder zapisuje . W uproszczonym przykładzie oznacza on pobranie bloku z pozycji (x, y) w klatce referencyjnej i użycie go na pozycji (x', y') w bieżącej klatce.
  4. Przewidywany blok może różnić się od obrazu źródłowego. Koder oblicza wtedy różnicę między blokiem rzeczywistym a predykcją po kompensacji ruchu. Ta różnica, zwana rezydualną, jest transformowana, kwantyzowana i kodowana. Przy dobrym dopasowaniu zawiera mniej informacji niż cały blok.

Klatki zakodowane tą metodą predykcyjną nazywane są klatkami P (Predicted frames) oraz klatkami B (Bi-directionally predicted frames).

Typy klatek I, P i B

Kodeki z predykcją międzyklatkową często łączą trzy typy klatek. Ich układ wpływa na bitrate, jakość, punkty dostępu oraz wymagania dekodera. Nazwy i szczegółowe możliwości zależą od standardu.

  • Klatki I (Intra-frames lub Klatki Kluczowe)

    Klatki I są kodowane wewnątrzklatkowo i nie wymagają innych klatek do dekodowania. Przypominają kompletne obrazy osadzone w strumieniu, lecz ich format i stopień kompresji określa kodek.

    Rola: Mogą być punktami dostępu przy rozpoczęciu odtwarzania, przewijaniu i odzyskiwaniu po błędach. Dekoder nadal potrzebuje odpowiednich zestawów parametrów i nagłówków. Ich rozmiar zależy od sceny i ustawień, często jest większy niż rozmiar klatek predykcyjnych.

  • Klatki P (Predicted frames)

    Klatki P korzystają z kompensacji ruchu i jednej lub kilku wcześniejszych klatek referencyjnych, zależnie od kodeka. Zawierają opis predykcji oraz dane rezydualne, dlatego często są mniejsze niż klatki I.

    Rola: Przenoszą informację o zmianach między punktami dostępu i ograniczają liczbę kodowanych danych. Ich zależności mogą wydłużyć odzyskiwanie po utracie pakietu.

  • Klatki B (Bi-directionally predicted frames)

    Klatki B mogą korzystać z referencji pochodzących z przeszłości i przyszłości względem czasu wyświetlania. Dwie strony predykcji często poprawiają dopasowanie i zmniejszają dane rezydualne, lecz wynik zależy od sceny i ustawień kodeka.

    Rola: Klatki B uzupełniają obrazy między klatkami referencyjnymi. Często zmniejszają bitrate, lecz użycie referencji z przyszłości wymaga buforowania i zmiany kolejności dekodowania względem wyświetlania. Wprowadzone opóźnienie zależy od struktury GOP i implementacji.

Porównanie M-JPEG i kodeków predykcyjnych

Wybór standardu kompresji wpływa na rozmiar pliku, jakość, opóźnienie i sposób montażu. M-JPEG koduje klatki niezależnie, a standardy wideo takie jak MPEG-2, H.264 i H.265 wykorzystują także predykcję międzyklatkową.

M-JPEG (Motion JPEG): niezależne obrazy JPEG

M-JPEG koduje wideo jako serię niezależnych obrazów JPEG przesyłanych kolejno. Każda klatka może być dekodowana bez referencji do sąsiednich klatek. RTP/JPEG przenosi takie klatki w pakietach z polem znacznika czasu i fragmentacji.

  • Metoda: Używa wyłącznie kompresji wewnątrzklatkowej. Każda klatka jest niezależnym obrazem JPEG, więc format nie korzysta z predykcji międzyklatkowej.
  • Zalety: Prosty przebieg kodowania i dekodowania. Montaż z dokładnością do klatki jest łatwiejszy, ponieważ obrazy są niezależne. Kodek nie wprowadza opóźnienia wynikającego ze zmiany kolejności klatek, a uszkodzenie jednego obrazu zwykle nie zależy od poprzednich obrazów.
  • Wady: Dla podobnej jakości wizualnej pliki są zwykle większe niż w kodekach korzystających z predykcji międzyklatkowej. Wynika to z pominięcia podobieństw między sąsiednimi klatkami.
  • Zastosowania: Profesjonalne przepływy pracy w edycji wideo (jako format pośredni), niektóre systemy obrazowania medycznego oraz wysokiej klasy kamery bezpieczeństwa, gdzie integralność każdej pojedynczej klatki jest ważniejsza niż rozmiar pliku.

Kodeki predykcyjne, w tym MPEG-2, H.264 i H.265

Standardy MPEG oraz H.264 i H.265 opisują kodeki wykorzystujące predykcję wewnątrzklatkową i międzyklatkową. H.264 i H.265 są standardami ITU-T oraz ISO/IEC z zestawami narzędzi określonymi dla każdego kodeka. Kompensacja ruchu pozwala opisać podobieństwa między obrazami, lecz szczegółowy zestaw narzędzi zależy od standardu.

  • Metoda: Używa mieszanki kompresji wewnątrzklatkowej (dla klatek I) i międzyklatkowej (dla klatek P i B) w celu usunięcia zarówno redundancji przestrzennej, jak i czasowej. Koder sygnalizuje także tryby predykcji, dane ruchu, transformacje i parametry kwantyzacji, a dekoder stosuje tę składnię w określonej kolejności.
  • Zalety: Predykcja międzyklatkowa może znacznie zmniejszyć bitrate przy zachowaniu wybranej jakości. W rezultacie kodeki nadają się do streamingu, transmisji i przechowywania na nośnikach takich jak płyty Blu-ray. Obrazy referencyjne opisują ruch bez powtarzania niezmienionych obszarów.
  • Wady: Kodowanie i dekodowanie wymagają większych nakładów obliczeniowych. Montaż jest trudniejszy, a cięcia bez ponownego kodowania często wykonuje się w punktach dostępu, na przykład przy klatkach IDR. Błąd klatki referencyjnej może wpływać na kolejne obrazy do następnego punktu dostępu, zależnie od narzędzi odporności na błędy i transportu.
  • Zastosowania: Częste zastosowania obejmują streaming online, cyfrową telewizję, wideokonferencje, płyty Blu-ray i DVD oraz nagrywanie wideo na smartfonach. Dobór kodeka zależy od wymagań jakości, bitrate'u, sprzętu, punktów dostępu i obsługi dekodera.

Powiązane artykuły