Kompresja video

Kompresja videoAnalogicznie do plików dźwiękowych, pliki wideo mogą być skompresowane lub nieskompresowane - wyjątkiem jest tu format MPEG, który z definicji jest zawsze formatem skompresowanym. Kompresja plików wideo obejmuje nie tylko kompresję obrazów pojedynczych klatek (tej np. w plikach AVI często się nie stosuje), ale także kompresję różnic między poszczególnymi klatkami.

W przeciwieństwie do obrazu na taśmie filmowej czy w analogowej technice wideo, w cyfrowym wideo zazwyczaj tylko co pewną liczbę klatek pojawia się klatka "pełna", zawierająca kompletny obraz, natomiast pozostałe klatki zawierają tylko różnice pomiędzy obrazem bieżącym i poprzednim. Znakomicie redukuje to ilość danych, które trzeba zapisać.

Filmy bez kompresji zajmują olbrzymie ilości miejsca, a przy tym format AVI, stosowany zwykle podczas zapisu, nie pozwala na utworzenie plików większych niż 2GB, co dodatkowo ogranicza długość ujęcia. Dlatego w praktyce zawsze trzeba zapisywany na dysku film kompresować "w locie". Nie dotyczy to tylko filmów nagranych na kamerach cyfrowych. Komputery, wyposażone w procesory o zegarze od 500MHz, mogą zapisywać obraz od razu z kompresją w formacie MPEG1(VCD) lub MPEG2(SVCD). Jednak tylko najmocniejsze maszyny z zegarem powyżej 2,5GHz będą w stanie dokonać konwersji w locie do formatu MPEG4 (DivX).

Dlatego zwykle tak silną kompresję wykonuje się później na plikach już skompresowanych w innym formacie. Zwykle do takiej rekompresji wykorzystuje się program VirtualDub. Pozwala on skompresować pliki wideo z użyciem różnych formatów MPEG1 (VideoCD), MPEG2 (DVD), MPEG4 (DivX). Odpowiedni kodek należy jednak wcześniej zainstalować w systemie. Niektóre są już dołączone do systemu, jednak najwydajniejsze, jak DivX, należy zainstalować, korzystając z pakietów dostępnych za darmo w Internecie. Do najbardziej znaczących elementów kodera audio należą m.in. redukcja błędów, narzędzia do generowania dźwięku przestrzennego oraz kodowanie dźwięku z małym opóźnieniem (od 20 do 40 ms). Dzięki takiemu kompleksowemu podejściu i umieszczeniu różnych składników standard MPEG-4 jest w stanie zastąpić wszystkie dotychczasowe niezgodne ze sobą technologie, stosowane w aplikacjach multimedialnych.

Algorytm stosowany do kompresji i dekompresji cyfrowego obrazu wideo określany jest zwykle jednym terminem: codec (skrót od COmpression/DECompresion). Inaczej niż w przypadku algorytmów kompresji stosowanych dla pojedynczych obrazów, algorytmy kompresji wideo nie są ściśle powiązane z formatem pliku, w którym zapisujemy obraz wideo. Na ogół, w ramach danego formatu, możemy stosować wiele różnych algorytmów kompresji i dekompresji. Przy odtwarzaniu pliku, format sam rozpoznaje, jaki rodzaj dekompresji należy zastosować. Kompresja następuje w chwili tworzenia lub zapisywania pliku. Dekompresja następuje na bieżąco w trakcie odtwarzania.

JPEG

Jest to ten sam algorytm, co przy kompresji map bitowych, film przecież jest sekwencją ujęć, a każde ujęcie to po prostu pojedynczy obraz, zazwyczaj fotografia cyfrowa. Każdy z tych obrazów może zostać z powodzeniem skompresowany za pomocą zwykłego algorytmu JPEG. Korzystanie z algorytmu JPEG, jako systemu kodowania obrazu wideo, ma dwie poważne wady: nie jest przeprowadzane porównywanie ujęć (frame differencing), a dekompresja obrazu przy wyświetlaniu jest powolna. Ponieważ algorytm JPEG zaprojektowano dla pojedynczych obrazów, kompresja poszczególnych ujęć filmu przebiega, tak jakby to były oddzielne mapy bitowe.

Każde ujęcie kompresowane jest osobno, bez porównywania z innymi. Przy odtwarzaniu takiego pliku każde z ujęć jest osobno dekompresowane i wyświetlane, jedno po drugim. Istnieje spore prawdopodobieństwo, że komputer nie nadąży i dojdzie do opuszczenia niektórych ujęć, na czym ucierpi ogólna jakość odtwarzanego filmu. Dzięki zastosowaniu sprzętowego wspomagania można tego uniknąć. Wspomagany w ten sposób algorytm JPEG może okazać się zadziwiająco sprawny i szybki, szybszy nawet niż te systemy kodowania, które stosują porównywanie ujęć, ale za to są całkowicie programowe. JPEG gwarantuje przy tym doskonałą jakość obrazu i jest prawdopodobnie najłatwiej dostępnym algorytmem kompresji obrazu. Przy tych wszystkich zaletach, JPEG nie najlepiej nadaje się do kompresowania plików, które chcemy umieścić w sieci. Podobnie rzecz się ma ze wszystkimi innymi formatami wspomaganymi sprzętowo. Z innej strony, algorytm JPEG może być bardzo przydatny przy pobieraniu obrazów z taśmy wideo. Korzysta z niego wiele urządzeń z tej grupy.

Kompresja MPEG-4

Pełna specyfikacja MPEG-4 oferuje o wiele więcej niż tylko znaną z DivX-a kompresję filmów wideo. Przetwarzanie obrazu w omawianym standardzie opiera się na tzw. obiektach medialnych (media objects). Obiekty te są zorganizowane w sposób hierarchiczny, a ich różne kompozycje mogą reprezentować sceny audiowizualne. Najbardziej podstawowymi obiektami (primitive objects) w hierarchii są nieruchome obrazy (np. tło), obiekty wideo (np. mówiąca postać, ale bez tła) oraz obiekty audio (np. głos skojarzony z postacią). MPEG-4 opisuje wiele takich obiektów odpowiadających różnym zarówno naturalnym, jak i sztucznym elementom sceny, które mogą być dwu-lub trójwymiarowe. Oprócz obiektów medialnych MPEG-4 definiuje reprezentację składników, takich jak: tekst i grafika, generowane komputerowo obrazy postaci wraz tekstem używanym do syntezy mowy i animacji oraz syntetyczne dźwięki. Wszystkie poddawane przetwarzaniu dane mogą być naturalne (np. film nakręcony kamerą wideo lub głos nagrany przez mikrofon) bądź też mogą pochodzić z komputera. Specyfikacja MPEG-4 opisuje także sposób komunikacji między aplikacjami multimedialnymi a urządzeniami do transmisji danych. Próbując uwzględnić szeroki zakres możliwych zastosowań, twórcy kodeka MPEG-4 przewidzieli w nim narzędzia do kodowania dźwięku korzystające z różnych technik. Dzięki temu uzyskano wszechstronne rozwiązanie, którego działanie opiera się na wstępnej obróbce sygnału wejściowego i jego zamianie do postaci gotowej do dalszego przetwarzania uzależnionego od rodzaju źródła (mowa, muzyka, sztuczne dźwięki). Dzięki opisanym cechom nowy format zwiększa użyteczność i przenośność danych. Raz wykonany w technologii MPEG-4 zapis zarówno spełnia wymagania cyfrowej telewizji, jak i pozwala na umieszczenie animowanej grafiki na stronie WWW. Bogaty zestaw procedur umożliwi przetwarzanie danych już przy prędkości 2 kilobitów na sekundę, co sprawi, że filmy i dźwięk pojawią się także w sieciach o małych przepustowościach oraz łatwo dotrą do użytkowników mobilnych. Wzbogacenie transmisji danych MPEG-4 o parametr QoS (Quality of Service) sprawiło, że obraz zawsze jest wyświetlany bez przestojów. Dzięki technice IPMP (Intellectual Property Management and Protection) o wiele łatwiej można będzie chronić zawartość oraz prawa autorskie.

Porównywanie ujęć

Jest to metoda kompresji obrazu wideo. Polega jak sama nazwa wskazuje na tzw. porównywaniu ujęć (frame differencing). Frame differencing to nie system kodowania, to po prostu pewna technika pracy, z której mogą korzystać różne systemy kodowania. Przy odtwarzaniu pliku wideo najwięcej czasu zajmuje dekompresja i wyświetlanie kolejnych ujęć. Trzeba to robić szybko, by zachować założoną prędkość odtwarzania filmu bez konieczności opuszczania niektórych ujęć. Gdy komputer przestaje nadążać z dekompresją i wyświetlaniem, niektóre ujęcia muszą być pomijane, co burzy wrażenie płynności ruchu.

Porównywanie ujęć (frame differencing) to sposób na przyspieszenie dekompresji i wyświetlania. Ujęcie z pliku, dla którego użyto tej metody, zawiera o wiele mniej informacji niż ujęcie ze zwykłego pliku wideo. Nie znajduje się w nim bowiem cały obraz, a jedynie te jego części, które uległy zmianie względem ujęcia poprzedniego. Ta zmieniona część obrazu jest zwykle o wiele mniejsza od jego całej powierzchni; dzięki temu komputer ma mniej pracy i łatwiej jest mu nadążyć z wyświetlaniem. Z tego samego powodu mniejsze stają się rozmiary całego pliku z obrazem wideo. Porównywanie ujęć sprawdza się najlepiej w statycznych scenach typu, gdzie tło pozostaje nieruchome, jedynie stosunkowo niewielkie obiekty na pierwszym planie wykonują jakieś ruchy. Dla tych filmów, w których cały obraz zmienia się szybko z ujęcia na ujęcie, metoda frame differencing nie będzie się dobrze sprawdzać.

Ujęcia kluczowe

Porównywanie ujęć często bazuje na tzw. ujęciach kluczowych (ang. key frames) zapisywanych w pliku filmu. Ujęcia kluczowe są zapisywane w całości i umieszczane w odpowiednich odstępach. Na ich podstawie obliczane są różnice pomiędzy kolejnymi ujęciami filmu. W tym przypadku porównywanie ujęć zasadza się na istnieniu tzw. ujęć kluczowych (key frames). Są one zapisywane w całości, służą za wzorce, na podstawie których określa się różnice, jakie trzeba zapisać dla ujęć pośrednich.

Przy wyświetleniu każdego kolejnego ujęcia obliczane na nowo są tylko partie powierzchni, różniące się od ujęcia poprzedniego, które znów obliczane jest na podstawie ujęcia jeszcze wcześniejszego i tak dalej, aż do ujęcia kluczowego. Oczywiście, im dalej od ujęcia kluczowego tym więcej będzie zmienionych miejsc i tym więcej informacji do przeliczenia. W związku z tym rośnie prawdopodobieństwo powstania opóźnień i zmniejszenia prędkości odtwarzania. Dlatego rozstawienie ujęć kluczowych w dostatecznie krótkich odstępach czasu ma zasadnicze znaczenie dla osiągnięcia optymalnej kompresji i gładkości odtwarzania. Z drugiej strony, ujęcia kluczowe zapisywane są w całości, zawierają więc o wiele więcej informacji niż zwykłe ujęcia pośrednie, które zawierają tylko ewentualne różnice. Gęstość rozmieszczenia ujęć kluczowych można regulować, korzystając z programu do edycji obrazu wideo. Ogólnie przyjętą zasadą jest umieszczanie jednego ujęcia kluczowego na sekundę wyświetlonego filmu. Przy prędkości odtwarzania 15 fps oznacza to, że co piętnaste ujęcie w pliku powinno być ujęciem kluczowym.

Kodowanie symetryczne lub asymetryczne

Systemy kodowania często określa się jako symetryczne lub asymetryczne. Terminy te odnoszą się do zagadnienia zachowania równowagi pomiędzy szybkością kompresji a szybkością dekompresji. Przy kodowaniu symetrycznym, kompresja filmowego obrazu zajmuje tyle samo czasu, co jego późniejsza dekompresja. Wpływa to pozytywnie na sprawność tworzenia takich plików wideo, ale niekoniecznie na ich odtwarzanie.

Przy kodowaniu asymetrycznym proces kompresowania obrazu wideo trwa długo, za to czas jego dekompresji przy odtwarzaniu jest krótki. Należy pamiętać, że im krótszy jest czas dekompresji, tym większą prędkość odtwarzania pliku można osiągnąć. Z tego względu asymetryczne systemy kodowania są korzystniejsze. Większość systemów kodowania wykazuje przynajmniej niewielką asymetrię, czas kompresji z reguły bywa dłuższy.