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 ( 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:
Przy dziesiętnym przeliczniku jest to około na klatkę.
Przy 30 klatkach na sekundę jedna sekunda nieskompresowanego wideo wymagałaby:
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:
- 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.
- 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.
- Klatka jest dzielona na małe bloki pikseli (np. ).
- 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.
- 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ść.
- 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.
- Koder dzieli bieżącą klatkę na bloki. W starszych standardach takie bloki nazywa się często makroblokami, na przykład pikseli.
- 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.
- 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.
- 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.