Kompresja wideo, kodeki i kodowanie

2018-01-09T19:15:41+02:00 26 kwietnia, 2012|Kategorie: Porady|Tagi: , , , |3 komentarze

Kompresja wideo jest z jednej strony naszym przyjacielem, z drugiej wrogiem.

Gdyby nie ona, wielkie trudności sprawiałoby przetwarzanie tak dużej ilości danych w krótkim czasie – wyobraźmy sobie strumień wideo zapisany w standardzie 1080p – dwumegapikselowe klatki przesyłane z prędkością 24, 30 lub 60 fps – w ciągu sekundy trzeba by przetwarzać od 48- do 120-megapikselowych obrazów.

Z drugiej jednak strony kompresja powoduje obniżenie jakości obrazu – utratę szczegółów, które są widoczne w materiale nieskompresowanym. Dlatego dokonując kompresji obrazu należy znaleźć kompromis pomiędzy rozmiarem materiału, a jego jakością . Podczas kodowania materiału trzeba pamiętać o pojemności nośnika, na którym materiał ma się docelowo znaleźć, możliwościach sprzętowych urządzeń odtwarzających oraz brać pod uwagę jakość materiału wejściowego.

Aby zmniejszyć rozmiar strumienia wideo stosuje się kilka różny technik:

  • Kompresja szczegółów. Można tu znaleźć analogię ze stratną kompresją obrazów JPG – ogólne wrażenia z odbioru obrazu pozostają na tym samym poziomie przy jednoczesnej redukcji jego jakości.
  • Głębia kolorów. Dostępna w zakresie od 8 do 14 bitów. Jest to liczba bitów wykorzystywaną do reprezentacji koloru danego piksela. Większa głębia koloru oznacza szerszy zakres kolorów.. Kamery z nieco wyższej półki (tzw. “prosumer”) oraz lustrzanki HDSLR tworzą strumień wideo z 8-bitową głębią kolorów, a więc o 256 odcieniach dla każdego z kanałów kolorów. W przypadku 10-bitowego koloru mamy już do czynienia z 1024 odcieniami.
  • Podpróbkowanie kolorów. Okazuje się, że ludzkie oko jest bardziej wrażliwe na zmiany jasności (luminancji), aniżeli na zmianę kolorów (chrominancji). Fakt ten jest wykorzystywany w kamerach w procesie podpróbkowania kolorów (chroma subsampling), aby w ten sposób obciąć rejestrowane pasmo. Podczas rejestracji obrazu zapisywany jest on w formie stosunku liczby próbek luminancji (y) oraz składników różnicy kolorów (Cb i Cr). Gdy obraz nie jest skompresowany, wartość współczynnika próbkowania zapisywana jest jako 4:4:4, co oznacza że na cztery próbki luminancji przypada tyle samo próbek chrominancji. Profesjonalne kamery korzystają z subsamplingu 4:2:2, zaś większość HDSLR jedynie 4:2:0. System obrazu PAL posługuje się subsamplingiem w stosunku 4:2:0, zaś NTSC – 4:1:1. Szerzej o subsamplingu postaramy się napisać wkrótce.
Flir Vue

Podpróbkowanie kolorów. Copyright Brion VIBBER. Wikimedia Commons

Group of Pictures (GOP). Group of pictures, czyli Grupa obrazów, to dość skomplikowana metoda kompresji obrazu wideo. Zapisuje ona materiał w klatkach oznaczonych jako I oraz P (występują również klatki typu D i B pozwalające na jeszcze bardziej efektywną kompresję). Każda z grup obrazów rozpoczyna się od klatki typu I (intra coded picture). Jest to niezależna, zawierająca pełną informację o obrazie klatka (oczywiście także skompresowana innymi metodami). Klatki typu P (predicted frames) nie zawierają pełnej informacji o obrazie, a jedynie różnicę pomiędzy poprzednią klatką I lub P. Klatki B (bidirectional compressed images) również są klatkami typu delta, ale korzystają z informacji zarówno poprzedzających, jak i następujących klatek I oraz P (dzięki czemu są jeszcze „mniejsze” niż klatki P).

Struktura kompresji GOP

Struktura kompresji GOP

Im więcej klatek typu I zawiera strumień, tym łatwiej się go edytuje. Z drugiej strony większa liczba klatek typu I zwiększa rozmiar materiału wideo. Dlatego też wideo przygotowane dla przesyłu w Internecie zawiera w jednej grupie GOP tylko jedną klatkę typu I.

Strukturę GOP można określić dwoma liczbami, M i N. Dla przykładu, przy M=3 i N=12 pierwsza z liczb mówi o odległości pomiędzy klatkami I oraz P, natomiast druga o dystansie pomiędzy pełnymi obrazami (klatkami typu I). Jest to właśnie długość grupy GOP. W naszym przykładzie grupa GOP wygląda więc następująco: IBBPBBPBBPBBI. Długie struktury GOP (np. 15-klatkowe) są bardziej wydajne, jednakże gubi się przy tym sporo klatek typu I.

  • Bit Rate. System wideo (kamera lub odtwarzacz) musi doskonale „znać” swoje możliwości. Strumień wideo zapisywany lub odczytywany jest przecież przez cały czas pracy kamery lub odtwarzacza. Jeśli kamera wideo zapisuje materiał na karcie SD lub CF, nie może robić tego szybciej, aniżeli jest w stanie przetworzyć karta. Dlatego właśnie system kodowania kamery nie przekracza maksymalnej przepływności danych (bitrate), który może wynosić, przykładowo 17 Mbit/s. Wyższa przepływność danych wpływa na lepszą jakość obrazu, jednakże do przetworzenia większej ilości danych potrzebne są szybsze urządzenia/nośniki (np. karty pamięci).

Duża przepływność danych wcale nie musi świadczyć o dobrej jakości obrazu zapisywanego przez kamerę. Istotny jest również sprzętowy kodek zastosowany w rejestratorze.

– Kodeki kamery. Różne kamery potrafią przy tej samej przepływności danych zapisywać obraz wideo w innej jakości. Dla wolnego procesora kodowanie obrazu w czasie rzeczywistym za pomocą kodeka H.264 to nie lada wyzwanie. Na szczęście kodeki sprzętowe (część układu kamery przetwarzającego obraz) są coraz nowocześniejsze i wydajniejsze. Większe kamery spisują się lepiej od swych młodszych kuzynów, gdyż większa obudowa i lepsze chłodzenie pozwala na stosowanie wydajniejszych procesorów.

Kodeki wideo

Kodeki to programy, które pozwalają urządzeniom (kamerze, odtwarzaczowi, komputerowi) na przetwarzanie obrazu wideo – kodowanie lub jego dekodowanie (kompresję/dekompresję danych).Niektóre z urządzeń, takie jak np. odtwarzacze Blu-ray wykonują tylko jedną z tych czynności – dekodowanie strumienia wideo. Wszystkie te kodeki bazują na ogólnie przyjętych standardach.

Strumienie wideo są umieszczane w tzw. kontenerach multimedialnych. Częstym błędem jest stwierdzenie, że film został zakodowany jako .AVi lub .MOV, gdyż te rozszerzenia nazw plików nie definiują zastosowanego kodeka, a są jedynie kontenerem – pojemnikiem przechowującym dane. W kontenerze znajdują się informacje czym dany materiał został zakodowany. Jeśli system komputera lub urządzenie nie posiada zainstalowanego kodeka, nie poradzi sobie z odtworzeniem materiału wideo.

H.264

H.264 jest najważniejszym i najpopularniejszym używanym obecnie kodekiem HD. Jest to implementacja standardu MPEG-4 AVC i jest wykorzystywany w:

  • urządzeniach Blu-ray
  • oferowanym w Internecie wideo (np. na YouTube)
  • nadawaniu obrazu w jakości HD
  • Apple TV
  • urządzeniach przenośnych, takich jak iPad, iPhone, itp
  • kamerach cyfrowych HD

Kodeki wideo używane podczas przygotowania materiału wideo.

Pracę nad przygotowaniem materiału wideo do publikacji można podzielić na trzy etapy:

  1. przechwytywanie materiału wideo,
  2. edycja wideo,
  3. renderowanie materiału wideo dla konkretnego zastosowania (Internet, streaming, Blu-ray).
Podczas przechwytywania wideo powinien zostać wykorzystany kodek oferujący najwyższą jakość obrazu przy maksymalnym wykorzystaniu możliwości sprzętowych urządzenia. Kamery HD oraz cyfrowe lustrzanki z funkcją filmowania korzystają głównie z następujących kodeków:

MJPEG – kodek oferujący stratną kompresję obrazu polegająca na kodowaniu każdej klatki przy pomocy algorytmu JPEG. Kodeki MJPEG doskonale nadają się do kompresji „w locie” materiału przechwytywanego z zewnętrznego źródła, czyli kamery/lustrzanki.

MPEG-4 AVC/H.264 – korzysta z metody kompresji GOP. Oferuje on swego rodzaju kompromis pomiędzy dobrą jakością obrazu i relatywnie niewielkimi plikami. Z kodeka tego korzystają przykładowo lustrzanki Canona zapisując materiał wideo w kontenerze MOV.

AVCHD jest również kodekiem korzystającym z metody GOP. Wykorzystują go m.in. modele Panasonic GH1/2, GF1, AF-100, TM700 oraz Sony NEX-5 i VG10. Podczas nagrywania sprzętem korzystającym z AVCHD należy ustawić właściwą przepływność strumienia (bitrate). Bitrate na poziomie 17 Mbitów może być w przypadku niektórych modeli kamer niewystarczający, dlatego po zmianie ustawień na 24 Mb/s zauważalny jest znaczny wzrost jakości obrazu. AVCHD korzysta z tego samego kodeka H.264, różni się natomiast kontenerem danych. Kodek ten został zaprojektowany jako format dla urządzeń konsumenckich. Jego struktura plików przypomina podstawową strukturę Blu-ray, dlatego niektóre odtwarzacze Blu-ray są w stanie odtwarzać materiały AVCHD bezpośrednio z kart SD. Do edycji wykorzystuje się wyłącznie pliki o rozszerzeniu .MTS znajdujące się w folderze STREAM. Do odtwarzania plików MTS najlepiej nadaje się darmowy VLC player, albo aplikacja Media Center XBMC – oba produkty zawierają zaszyte odpowiednie kodeki.

Kodeki profesjonalne

MPEG-2 – standard popularny w dalszym ciągu (chociażby ze względu na zastosowanie w płytach DVD). Kompresja jest mniej wydajna, aniżeli w przypadku MPEG-4, ale też mniej skomplikowana. MPEG-2 często wykorzystywany jest w profesjonalnych kamerach wideo (np. w Sony EX1 i niektórych kamerach pro Canona).

AVC-Intra – kodek Panasonica przechowując jedynie klatki typu I (nie zawiera sekwencji GOP).

strong>HDCAM HD – rodzina profesjonalnych kodeków Sony.

Raw Data recording – nagrywanie bez kompresji niesie za sobą ogromne korzyści w kwestii jakości obrazu, jednakże jest niezmiernie czasochłonne podczas konwersji z raw do któregoś z wybranych kodeków. Tryb raw jest wykorzystywany w kamerach firmy Red (np. modelu Red One).

Apple ProRes HQ – kodek często wykorzystywany w edycji (np. w Final Cut Pro).

Podczas procesu edycji materiału należy pamiętać o utrzymaniu jakości obrazu na tym samym, najwyższym poziomie. Jeśli podczas nagrywania dojdzie do degradacji jakości, nie uda się jej już przywrócić. Dlatego w kolejnym procesie obróbki, jakim jest edycja, nie można już do tego dopuścić.

Edycja kodekiem wykorzystującym kompresję GOP nie wydaje się dobrym rozwiązaniem, choć niektóre edytory wideo radzą sobie z Grupą obrazów. Lepszym sposobem jest korzystanie z rodziny kodeków, np. Apple ProRes. Jeśli materiały wejściowy został zakodowany kodekiem GOP, powinno się go transkodować do kodeka nie korzystającego z kompresji GOP (przy ustawieniach najwyższej jakości).

Edycja kodekiem wykorzystującym kompresję GOP nie wydaje się dobrym rozwiązaniem

Jeśli z naszej kamery otrzymujemy materiał zakodowany kodekiem H.264 lub AVCHD, powinniśmy przed edycją przekodować go do kodeka ułatwiającego płynne przetwarzanie (np. Apple ProRes). Pliki tego typu mają większe rozmiary, dlatego też konwertujemy tylko te fragmenty materiału, które chcemy poddać obróbce.

Transkodowaniem nazywamy proces konwersji strumienia wideo zapisanego w pewnym standardzie kompresji (kodeku), na inny, lub też zapisanie strumienia w tym samym kodeku, jednak przy niższych ustawieniach jakości. Ten drugi przypadek powinien dotyczyć wyłącznie ostatniego kroku edycji – produkcji klipu wyjściowego.
Po zmontowaniu materiału należy go wyrenderować – do tego celu wybieramy kodek zgodny z urządzeniem na którym będzie odtwarzany materiał – często jest to H.264, gdyż ten nadaje się zarówno do Internetu, jak i na nośnik Blu-ray.

Temat kodowania jest znacznie obszerniejszy, aniżeli to, co zaprezentowaliśmy w niniejszym dokumencie. Podczas kodowania nie ma złotego środka, należy próbować, testować, konsultować swoje spostrzeżenia ze społecznością w Internecie i nauczyć się układania różnego rodzaju pasjansów – skrócą one czas oczekiwania na zakończenie renderowania materiałów wideo.

Literatura:

1. “Mastering HD Vide with your DSLR”, Uwe Steinmueller, Helmut Kraus.

2. “The Digital Filmmaking Handbook”, Ben Long, Sonja Schenk.

3. Wikipedia.org

3 komentarze

  1. kolo 10 maja 2011 w 09:14 - Odpowiedz

    suaby artykUŁ :F

  2. Łukasz 27 kwietnia 2012 w 17:34 - Odpowiedz

    Napisz lepszy w takim razie

  3. Marcin 17 maja 2012 w 18:46 - Odpowiedz

    Bardzo przydatny artykuł. Wiele ciekawych informacji.

Zostaw komentarz