Kodeki wideo
H.264: Standard dla wszystkich filmów
Od internetowych klipów przez przenośne odtwarzacze wideo do filmów HD – nowoczesny format wideo H.264 działa na wszystkich platformach. I gwarantuje znacznie wyższą jakość niż kodek dinozaur MPEG-2.
|
Apple stosuje go w iPodach z funkcją wideo i zwiastunach sieciowych, natomiast Adobe we Flash Playerze. Również gdy oglądamy filmiki na YouTube, w polskiej telewizji HD czy programach IPTV przekazy przygotowuje właśnie on – kodek H.264. Od rozwiązań HD do sieciowych klipów – format ten, znany również jako AVC (Advanced Video Coding), staje się najważniejszym standardem wideo, który wypiera MPEG-2. Nic dziwnego, bowiem H.264 ma od strony technicznej znacznie więcej do zaoferowania: dobrze działa przy niskich transferach danych i na odtwarzaczach przenośnych, a także sprawdza się podczas kodowania filmów HD i w telewizji cyfrowej. Standardem dla płyt HD staje się Blu-ray, coraz mocniej wypierający DVD. Dla niebieskiego krążka przewidziano 3 kodeki, ale i na tym polu H.264 pobił konkurentów – VC-1 Microsoftu pozostaje zjawiskiem marginesowym, zaś MPEG-2 przepadł z kretesem. Podobnie rzecz ma się z kamerami. Nawet DivX w wersji 7 przesiada się na H.264. Co więcej, są duże szanse na to, że jeszcze w tym roku H.264 będzie masowo stosowany w sprzętowych odtwarzaczach BD. Podstawy: Jak działają kodeki wideoH.264 nie wynalazł kodowania wideo na nowo. Zasadniczo działa tak samo jak MPEG-2: film to nic innego jak obrazy (ramki) odtwarzane w tempie – w zależności od standardu – pomiędzy 24 a 30 razami na sekundę. Kodek MPEG-2 grupuje ten strumień w tzw. GOP-y (Group of Pictures), zwykle po 12 klatek dla każdej sekundy. Pierwszy obraz każdego GOP-a to Intra-Frame (I-Frame). Kodek kompresuje ją jako specyficzny JPEG. W tym celu dzieli ramkę na makrobloki o wielkości 16×16 pikseli, a następnie w przypadku każdego przeprowadza konwersję do przestrzeni kolorów YCrCb, zapisując piksele w postaci: (Y, Cb, Cr), gdzie Y oznacza luminancję (jasność), a dwie pozostałe są składowymi koloru niebieskiego (b) oraz czerwonego (r). Wydzielone wartości łączy się na nowo. Ponieważ oko ludzkie lepiej postrzega drobne zmiany jasności niż kolorów, ta pierwsza ma wyższy priorytet i zostaje przepisana bez strat, czyli jako makroblok 16×16. W obydwu kanałach barw odrzuca się natomiast wartość co drugiego piksela, więc do ich opisu wystarczą dwie matryce 8×8 albo jedna 16×8. Otrzymane wartości są przekształcane w dziedzinę częstotliwości, która opisuje, jak mocno składowe jasności i obydwu kolorów zmieniają się w makrobloku. W procesie kwantyzacji odrzuca się następnie najrzadziej występujące ekstrema. Pozostałe ramki w GOP-ie to tak zwane Inter-Frame’y. Kodek tworzy je na podstawie I-Frame’a za pomocą wektorów ruchu (Motion Estimation). Inter-Frame’y są dwojakiego rodzaju i inaczej się je koduje: makrobloki w P-Frame’ach (Predictive) wykorzystują I-Frame albo poprzednią P-Frame jako obraz odniesienia; B-Frame’y (Bi-Predictive) używają do tego celu zarówno poprzednich, jak i następnych I- albo P-Frame’ów. Zaletą B-Frame’ów jest to, że mogą opisywać za pomocą wektorów ruchu części obrazów, które wywodzą się również z ramek następujących po nich. W efekcie B-Frame’y zajmują najmniej miejsca ze wszystkich ramek. Co to oznacza? Im więcej B-Frame’ów w kodowanym filmie, tym mniejsza będzie jego wynikowa wielkość. Tak jak w przypadku I-Frame’ów, kodek zapamiętuje w makroblokach P- i B-Frame’ów oprócz wektorów ruchu również częstotliwości. Ale nie jako wartości absolutne, lecz różnicowe, w stosunku do bloku odniesienia, z którego wektor ruchu został wyprowadzony. Transformacja: Mniejsze bloki to wyższa jakośćDotąd pisaliśmy wyłącznie o wspólnych cechach kodeków MPEG-2 i H.264. Jednak gdy mowa o szczegółach, pojawiają się podstawowe różnice dotyczące transformacji w dziedzinę częstotliwości. Kodek MPEG-2 dzieli makrobloki na bloki o wielkości 8×8, na których przeprowadza następnie dyskretną transformację cosinusową (DTC). Reguła podziału jest następująca: dominujące obszary obrazu opisują niskie częstotliwości, a detale – wysokie. Po transformacji blok zostaje posortowany na nowo, jako macierz współczynników DC. Wartość z jej lewego górnego rogu opisuje zarówno najniższą częstotliwość, jak i przeciętną jasność bloku. Ponieważ istnieje duże podobieństwo pomiędzy leżącymi obok siebie współczynnikami DC, kodek zapamiętuje je nie jako wartości absolutne, lecz jako różnicę w stosunku do poprzednika. Pozostałe współczynniki sortowane są tak, że w kierunku na prawo i w dół umieszcza się te odpowiadające coraz wyższym częstotliwościom, które kodują całe bogactwo detali. Powód? Przy wysokich częstotliwościach oko gorzej rozróżnia niuanse jasności i kolorów, więc ich wartości dają się bardziej zaokrąglać bez straty jakości. H.264 odżegnuje się od zaokrągleń stoswanych w DC i stosuje transformację całkowitą (Integer Transformation) na blokach 4×4, a przy lepszej jakości 8×8. Przesiadka na transformację 4×4 jest konieczna, ponieważ w przeciwieństwie do MPEG-2, H.264 potrafi kodować z jej użyciem również Intra- i Inter-Frame’y. Przewaga mniejszych bloków uwidacznia się, gdy w określonej części ramki kwantyzacja odcina zbyt wiele informacji o obrazie. Przesiadka ma jeszcze inną zaletę: transformacja całkowita stosowana w H.264 pozwala na dokładniejsze odtworzenie podziału częstotliwości niż DCT. Kwantyzacja: Elastyczne wielkościWłaściwa redukcja danych odbywa się w następnym kroku: chodzi o kwantyzację. W najlepszym przypadku kodek dopasowuje wartości częstotliwości do wymagań ludzkiego postrzegania – niskie zapamiętuje, a większość wysokich usuwa ze strumienia danych. W tym celu na każdy blok nakłada macierz kwantyzacji. Kodek MPEG-2 dzieli przy tym poszczególne wartości częstotliwości przez odpowiadające jej parametry macierzy. Po drodze często gubi się przez to najwyższe częstotliwości. Inaczej jest w przypadku H.264, który nie dzieli wartości, lecz zastępuje tę operację dodawaniem i odejmowaniem macierzowym. Ma to tę zaletę, że podczas tego procesu w H.264 nie występują błędy zaokrągleń. Dla parametrów kwantyzacji H.264 ma aż 51 stopni. Nie zwiększają się one jednak liniowo, jak w MPEG-2, lecz logarytmicznie. To oznacza, że dla niskich częstotliwości są one dokładniejsze niż dla wysokich – co bardziej odpowiada postrzeganiu ludzkiego oka. Ponieważ H.264 obsługuje zarówno bloki o wielkości 8×8, jak i 4×4, potrzebuje dla każdego z tych rozwiązań macierzy kwantyzacji. W sumie musi mieć ich aż cztery, ponieważ używa innych do Intra-Frame’ów, a innych do Inter-Frame’ów. Powód? Wartości różnicowe Inter-Frame’ów dają się mocniej kompresować. Stąd parametry kwantyzacji są w nich dużo wyższe niż w Intra-Frame’ach. Standardowa macierz H.264 sama w sobie zapewnia dobre wyniki nawet przy mocno zróżnicowanych szybkościach przepływu danych. Ale doświadczony użytkownik może zastosować własną macierz, która sprawdzi się nawet w przypadku tak wysokich transferów, do jakich dochodzi w Blu-rayu. Zostanie ona zapamiętana w kodowanym filmie, aby dekoder mógł ją wykorzystać podczas odtwarzania, stosując poprawną kwantyzację odwrotną. Należy jednak pamiętać, że niestandardowa kwantyzacja odgrywa istotną rolę w redukcji danych. Jeśli kodek w odtwarzaczu nie będzie umiał jej prawidłowo odtworzyć, jakość obrazu może znacznie się pogorszyć. I-Frame’y: Efektywniejsza kompresjaKodek MPEG-2 po przeprowadzeniu DCT i kwantyzacji kończy pracę nad I-Frame’em. H.264 stosuje dodatkowo predykcję przestrzenną (Spatial Prediction), która jeszcze mocniej kompresuje ramki. Podobnie jak współczynniki DC związane z MPEG-2 albo JPEG, wszystkie wartości opisuje się w tym przypadku jako różnice pomiędzy sąsiednimi blokami. Ponieważ kodek zaczyna pracę od lewego górnego rogu każdej ramki, umiejscowione tam i przetworzone już makrobloki stają się odniesieniem dla pozostałych. |

Kup najtaniej