Jak działa kodek wideo? Część 1: Podstawy

Druga część: Jak działa kodek wideo

Dowolny raster obraz można przedstawić w postaci dwuwymiarowa macierz. Jeśli chodzi o kolory, pomysł można rozwinąć, patrząc na obraz jako trójwymiarowa matryca, w którym dodatkowe wymiary służą do przechowywania danych dla każdego z kolorów.

Jeżeli ostateczny kolor potraktujemy jako połączenie tzw. kolory podstawowe (czerwony, zielony i niebieski), w naszej trójwymiarowej matrycy definiujemy trzy płaszczyzny: pierwszą dla czerwieni, drugą dla zieleni i ostatnią dla błękitu.
Jak działa kodek wideo? Część 1: Podstawy
Każdy punkt tej macierzy nazwiemy pikselem (elementem obrazu). Każdy piksel zawiera informację o intensywności (zwykle jako wartość liczbową) każdego koloru. Na przykład, czerwony piksel oznacza, że ​​zawiera 0 zielonych, 0 niebieskich i maksymalnie czerwonych. Różowy piksel można formować za pomocą kombinacji trzech kolorów. Używając zakresu liczbowego od 0 do 255, różowy piksel definiuje się jako Czerwony = 255, Zielony = 192 и Niebieski = 203.

Jak działa kodek wideo? Część 1: Podstawy

Artykuł ten został opublikowany przy wsparciu firmy EDISON.

Rozwijamy aplikacje do nadzoru wideo, strumieniowego przesyłania wideo, a także jesteśmy zaręczeni nagranie wideo w sali operacyjnej.

Alternatywne sposoby kodowania obrazu kolorowego

Istnieje wiele innych modeli przedstawiania kolorów tworzących obraz. Można na przykład użyć palety indeksowanej, która wymaga tylko jednego bajtu do reprezentowania każdego piksela, zamiast trzech wymaganych w przypadku modelu RGB. W takim modelu możliwe jest użycie matrycy 2D zamiast matrycy 3D do reprezentacji każdego koloru. Oszczędza to pamięć, ale zapewnia mniejszą gamę kolorów.

Jak działa kodek wideo? Część 1: Podstawy

RGB

Spójrzcie na przykład na to zdjęcie poniżej. Pierwsza ściana jest całkowicie pomalowana. Pozostałe to płaszczyzny czerwona, zielona i niebieska (intensywność odpowiednich kolorów jest pokazana w skali szarości).

Jak działa kodek wideo? Część 1: Podstawy

Widzimy, że odcienie czerwieni w oryginale znajdą się w tych samych miejscach, w których obserwujemy najjaśniejsze partie drugiej ściany. Natomiast wkład błękitu widać głównie jedynie w oczach Mario (ostatnia twarz) i elementach jego ubioru. Zwróć uwagę, gdzie wszystkie trzy płaszczyzny kolorów mają najmniejszy udział (najciemniejsze części obrazów) – wąsy Mario.

Aby zapisać intensywność każdego koloru, wymagana jest określona liczba bitów - ilość ta nazywana jest głębia bitowa. Załóżmy, że na każdą płaszczyznę kolorów przypada 8 bitów (w oparciu o wartość od 0 do 255). Mamy wówczas głębię kolorów 24 bity (8 bitów * 3 płaszczyzny R/G/B).

Kolejną właściwością obrazu jest rozdzielczość, czyli liczba pikseli w jednym wymiarze. Często oznaczane jako szerokość × wysokość, jak na przykładowym obrazku 4 na 4 poniżej.
Jak działa kodek wideo? Część 1: Podstawy

Kolejną właściwością, z którą mamy do czynienia podczas pracy z obrazami/filmami, jest współczynnik proporcji, opisujący normalną proporcjonalną zależność pomiędzy szerokością i wysokością obrazu lub piksela.

Kiedy mówią, że określony film lub obraz ma rozmiar 16 na 9, zwykle mają na myśli współczynnik kształtu wyświetlacza (ALE - z Współczynnik proporcji wyświetlacza). Czasami jednak mogą występować różne kształty poszczególnych pikseli – w tym przypadku o tym mówimy stosunek pikseli (PAR - z Proporcje pikseli).

Jak działa kodek wideo? Część 1: Podstawy

Jak działa kodek wideo? Część 1: Podstawy

Uwaga dla gospodyni: płyta DVD odpowiada DAR 4 do 3

Chociaż rzeczywista rozdzielczość DVD wynosi 704x480, nadal zachowuje proporcje 4:3, ponieważ PAR wynosi 10:11 (704x10 / 480x11).

I w końcu możemy określić wideo jak sekwencja n ramki na dany okres czas, co można uznać za dodatkowy wymiar. A n to jest liczba klatek na sekundę lub liczba klatek na sekundę (FPS - z Klatki na sekundę).

Jak działa kodek wideo? Część 1: Podstawy

Liczba bitów na sekundę wymagana do wyświetlenia wideo to jego wartość prędkość transmisji - szybkość transmisji.

bitrate = szerokość * wysokość * głębokość bitowa * liczba klatek na sekundę

Na przykład wideo o szybkości 30 klatek na sekundę, 24 bps i rozdzielczości 480 x 240 wymagałoby 82,944,000 82,944 30 bps lub 480 240 Mb/s (24 x XNUMX x XNUMX x XNUMX) – ale dzieje się tak, jeśli nie jest stosowana żadna metoda kompresji.

Jeśli prędkość transferu prawie stale, wtedy to się nazywa stała prędkość transmisji (CBR - z stała szybkość transmisji). Ale może się też różnić, w tym przypadku nazywa się to zmienna szybkość transmisji (VBR - z zmienna szybkość transmisji).

Ten wykres pokazuje ograniczone VBR, gdzie w przypadku całkowicie ciemnej klatki nie marnuje się zbyt wielu bitów.

Jak działa kodek wideo? Część 1: Podstawy

Inżynierowie początkowo opracowali metodę podwajania postrzeganej liczby klatek na sekundę na ekranie wideo bez użycia dodatkowej przepustowości. Metoda ta znana jest jako wideo z przeplotem; Zasadniczo wysyła połowę ekranu w pierwszej „ramce”, a drugą połowę w następnej „ramce”.

Obecnie sceny są renderowane głównie przy użyciu progresywne technologie skanowania. Jest to metoda wyświetlania, przechowywania lub przesyłania ruchomych obrazów, w której wszystkie linie każdej klatki są rysowane sekwencyjnie.

Jak działa kodek wideo? Część 1: Podstawy

Dobrze! Teraz wiemy, jak obraz jest reprezentowany cyfrowo, jak układają się jego kolory, ile bitów na sekundę poświęcamy na wyświetlanie wideo, czy przepływność jest stała (CBR), czy zmienna (VBR). Wiemy o danej rozdzielczości przy danej liczbie klatek na sekundę, znamy wiele innych terminów, takich jak wideo z przeplotem, PAR i kilka innych.

Usuwanie nadmiarowości

Wiadomo, że wideo bez kompresji nie da się normalnie używać. Godzinny film w rozdzielczości 720p i 30 klatkach na sekundę zajmowałby 278 GB. Wartość tę uzyskujemy mnożąc 1280 x 720 x 24 x 30 x 3600 (szerokość, wysokość, liczba bitów na piksel, liczba klatek na sekundę i czas w sekundach).

Używać algorytmy kompresji bezstratnej, jak DEFLATE (używany w PKZIP, Gzip i PNG), nie zmniejszy wystarczająco wymaganej przepustowości. Musimy szukać innych sposobów kompresji wideo.

Aby to zrobić, możesz skorzystać z funkcji naszej wizji. Lepiej rozróżniamy jasność niż kolor. Film to seria kolejnych obrazów, które powtarzają się w czasie. Pomiędzy sąsiednimi klatkami tej samej sceny występują niewielkie różnice. Dodatkowo każda ramka zawiera wiele obszarów wykorzystujących ten sam (lub podobny) kolor.

Kolor, jasność i nasze oczy

Nasze oczy są bardziej wrażliwe na jasność niż na kolor. Można to zobaczyć na własne oczy, patrząc na to zdjęcie.

Jak działa kodek wideo? Część 1: Podstawy

Jeśli nie widzisz tego w lewej połowie obrazu, kolory kwadratów A и B są w rzeczywistości takie same, to jest normalne. Nasz mózg zmusza nas do zwracania większej uwagi na światło i cień niż na kolor. Po prawej stronie pomiędzy wyznaczonymi kwadratami znajduje się zworka tego samego koloru - dzięki temu my (tj. nasz mózg) łatwo ustalimy, że tak naprawdę są one tego samego koloru.

Przyjrzyjmy się (w uproszczeniu) temu, jak działają nasze oczy. Oko to złożony narząd składający się z wielu części. Nas jednak najbardziej interesują szyszki i pręty. Oko zawiera około 120 milionów pręcików i 6 milionów czopków.

Rozważmy postrzeganie koloru i jasności jako oddzielne funkcje niektórych części oka (w rzeczywistości wszystko jest nieco bardziej skomplikowane, ale uprościmy to). Pręciki odpowiadają głównie za jasność, natomiast czopki odpowiadają za kolor. Szyszki dzielą się na trzy typy, w zależności od zawartego w nich pigmentu: szyszki S (niebieskie), szyszki M (zielone) i szyszki L (czerwone).

Ponieważ mamy znacznie więcej pręcików (jasności) niż czopków (koloru), możemy stwierdzić, że jesteśmy w stanie lepiej rozróżniać przejścia między ciemnością i światłem niż kolory.

Jak działa kodek wideo? Część 1: Podstawy

Funkcje czułości kontrastu

Badacze zajmujący się psychologią eksperymentalną i wieloma innymi dziedzinami opracowali wiele teorii ludzkiego wzroku. I jeden z nich nazywa się funkcje czułości kontrastu. Związane są z iluminacją przestrzenną i czasową. Krótko mówiąc, chodzi o to, ile zmian potrzeba, zanim obserwator je zauważy. Zwróć uwagę na liczbę mnogą słowa „funkcja”. Wynika to z faktu, że funkcje wrażliwości na kontrast możemy mierzyć nie tylko dla obrazów czarno-białych, ale także kolorowych. Wyniki tych eksperymentów pokazują, że w większości przypadków nasze oczy są bardziej wrażliwe na jasność niż na kolor.

Skoro wiemy, że jesteśmy bardziej wrażliwi na jasność obrazu, możemy spróbować wykorzystać ten fakt.

Model kolorów

Wymyśliliśmy trochę, jak pracować z kolorowymi obrazami za pomocą schematu RGB. Są też inne modele. Istnieje model oddzielający luminancję od nasycenia i jest on znany jako YCbCr. Nawiasem mówiąc, istnieją inne modele, które dokonują podobnego podziału, ale rozważymy tylko ten.

W tym modelu kolorystycznym Y jest reprezentacją jasności i również wykorzystuje dwa kanały kolorów: Cb (bogaty niebieski) i Cr (bogata czerwień). YCbCr można wyprowadzić z RGB, możliwa jest również konwersja odwrotna. Korzystając z tego modelu, możemy tworzyć obrazy w pełnym kolorze, jak pokazano poniżej:

Jak działa kodek wideo? Część 1: Podstawy

Konwertuj pomiędzy YCbCr i RGB

Ktoś się sprzeciwi: jak można uzyskać wszystkie kolory, jeśli nie zostanie użyty kolor zielony?

Aby odpowiedzieć na to pytanie, przekonwertujmy RGB na YCbCr. Skorzystajmy ze współczynników przyjętych w normie BT.601, co było zalecane przez jednostkę ITU-R. Dział ten wyznacza standardy dla cyfrowego wideo. Na przykład: co to jest 4K? Jaka powinna być liczba klatek na sekundę, rozdzielczość, model kolorów?

Najpierw obliczmy jasność. Użyjmy stałych zaproponowanych przez ITU i zamieńmy wartości RGB.

Y = 0.299R + 0.587G + 0.114B

Po uzyskaniu jasności oddzielimy kolory niebieski i czerwony:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

Możemy także dokonać konwersji z powrotem, a nawet uzyskać efekt ekologiczny, używając YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Zazwyczaj wyświetlacze (monitory, telewizory, ekrany itp.) korzystają wyłącznie z modelu RGB. Ale ten model można zorganizować na różne sposoby:

Jak działa kodek wideo? Część 1: Podstawy

Podpróbkowanie kolorów

Mając obraz reprezentowany jako połączenie luminancji i chrominancji, możemy wykorzystać większą wrażliwość ludzkiego układu wzrokowego na luminancję niż na chrominancję, poprzez selektywne usuwanie informacji. Podpróbkowanie chrominancji to metoda kodowania obrazów przy użyciu mniejszej rozdzielczości chrominancji niż luminancji.

Jak działa kodek wideo? Część 1: Podstawy

Jak bardzo dopuszczalne jest zmniejszenie rozdzielczości kolorów?! Okazuje się, że istnieją już diagramy opisujące sposób obsługi rozdzielczości i łączenia (wynikowy kolor = Y + Cb + Cr).

Schematy te są znane jako systemy downsamplingu i są wyrażone jako 3-krotny stosunek - a:x:y, która określa liczbę próbek sygnałów różnicy luminancji i kolorów.

a — poziomy standard próbkowania (zwykle równy 4)
x — liczba próbek chrominancji w pierwszym rzędzie pikseli (rozdzielczość pozioma w stosunku do a)
y — liczba zmian w próbkach chrominancji pomiędzy pierwszym i drugim rzędem pikseli.

Wyjątkiem jest 4:1:0, zapewniając jedną próbkę chrominancji w każdym bloku rozdzielczości luminancji 4 na 4.

Typowe schematy stosowane we współczesnych kodekach:

  • 4:4:4 (bez próbkowania w dół)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - przykład fuzji

Oto scalony obraz przy użyciu YCbCr 4:2:0. Należy pamiętać, że wydajemy tylko 12 bitów na piksel.

Jak działa kodek wideo? Część 1: Podstawy

Tak wygląda ten sam obraz, zakodowany przy użyciu głównych typów podpróbkowania kolorów. Pierwszy rząd to końcowy YCbCr, dolny rząd pokazuje rozdzielczość chrominancji. Wyniki bardzo przyzwoite, biorąc pod uwagę niewielką utratę jakości.

Jak działa kodek wideo? Część 1: Podstawy

Pamiętasz, jak policzyliśmy 278 GB miejsca na przechowywanie godzinnego pliku wideo w rozdzielczości 720p i 30 klatkach na sekundę? Jeśli zastosujemy YCbCr 4:2:0, to rozmiar ten zmniejszy się o połowę – 139 GB. Na razie jest to jednak wynik daleki od akceptowalnego.

Możesz samodzielnie uzyskać histogram YCbCr za pomocą FFmpeg. Na tym zdjęciu kolor niebieski dominuje nad czerwienią, co wyraźnie widać na samym histogramie.

Jak działa kodek wideo? Część 1: Podstawy

Kolor, jasność, gama kolorów - recenzja wideo

Polecamy obejrzeć ten wspaniały film. Wyjaśnia, czym jest jasność i ogólnie wszystkie kropki są kropkowane ё o jasności i kolorze.

Typy ramek

Przejdźmy dalej. Spróbujmy wyeliminować nadmiarowość czasową. Ale najpierw zdefiniujmy podstawową terminologię. Załóżmy, że mamy film z 30 klatkami na sekundę, oto jego pierwsze 4 klatki:

Jak działa kodek wideo? Część 1: Podstawy Jak działa kodek wideo? Część 1: Podstawy Jak działa kodek wideo? Część 1: Podstawy Jak działa kodek wideo? Część 1: Podstawy

W klatkach widzimy wiele powtórzeń: na przykład niebieskie tło, które nie zmienia się z klatki na klatkę. Aby rozwiązać ten problem, możemy abstrakcyjnie podzielić je na trzy typy ramek.

I-ramka (Iramka wstępna)

Rama I (ramka odniesienia, ramka kluczowa, ramka wewnętrzna) jest samodzielna. Niezależnie od tego, co chcesz wizualizować, ramka I jest zasadniczo statyczną fotografią. Pierwsza klatka jest zwykle klatką I, ale będziemy regularnie obserwować klatki I nawet wśród klatek, które nie są pierwszymi.

Jak działa kodek wideo? Część 1: Podstawy

Rama P (Pprzepisana ramka)

P-frame (ramka predykcyjna) wykorzystuje fakt, że prawie zawsze bieżący obraz można odtworzyć przy użyciu poprzedniej klatki. Przykładowo w drugiej klatce jedyną zmianą jest ruch piłki do przodu. Możemy uzyskać klatkę 2, po prostu nieznacznie modyfikując klatkę 1, wykorzystując jedynie różnicę między tymi klatkami. Aby skonstruować klatkę 2, odwołujemy się do poprzedniej klatki 1.

Jak działa kodek wideo? Część 1: PodstawyJak działa kodek wideo? Część 1: Podstawy

Rama B (Bi-predykcyjna ramka)

A co z linkami nie tylko do przeszłych, ale także przyszłych klatek, aby zapewnić jeszcze lepszą kompresję?! Jest to w zasadzie ramka B (ramka dwukierunkowa).

Jak działa kodek wideo? Część 1: PodstawyJak działa kodek wideo? Część 1: PodstawyJak działa kodek wideo? Część 1: Podstawy

Wypłata pośrednia

Te typy ramek służą do zapewnienia najlepszej możliwej kompresji. Przyjrzymy się, jak to się dzieje w następnej sekcji. Na razie zauważmy, że najdroższa pod względem zużywanej pamięci jest ramka I, ramka P jest zauważalnie tańsza, ale najbardziej opłacalną opcją dla wideo jest ramka B.

Jak działa kodek wideo? Część 1: Podstawy

Redundancja czasowa (przewidywanie międzyramkowe)

Przyjrzyjmy się, jakie mamy opcje, aby zminimalizować powtarzalność w czasie. Tego typu redundancję możemy rozwiązać za pomocą metod predykcji krzyżowej.

Postaramy się przeznaczyć jak najmniej bitów na zakodowanie sekwencji ramek 0 i 1.

Jak działa kodek wideo? Część 1: Podstawy

Możemy produkować odejmowanie, po prostu odejmujemy klatkę 1 od klatki 0. Otrzymujemy klatkę 1, wykorzystujemy tylko różnicę między nią a poprzednią klatką, w rzeczywistości kodujemy tylko powstałą resztę.

Jak działa kodek wideo? Część 1: Podstawy

Ale co jeśli powiem Ci, że istnieje jeszcze lepsza metoda, która wykorzystuje jeszcze mniej bitów?! Najpierw podzielmy klatkę 0 na przejrzystą siatkę składającą się z bloków. A potem spróbujemy dopasować bloki z klatki 0 do klatki 1. Innymi słowy, oszacujemy ruch pomiędzy klatkami.

Z Wikipedii - kompensacja ruchu blokującego

Kompensacja ruchu bloku dzieli bieżącą klatkę na nienakładające się na siebie bloki, a wektor kompensacji ruchu informuje o pochodzeniu bloków (powszechnym błędnym przekonaniem jest to, że poprzedni ramka jest podzielona na nienakładające się bloki, a wektory kompensacji ruchu mówią, dokąd idą te bloki. Ale tak naprawdę jest odwrotnie – analizowana jest nie poprzednia klatka, ale następna; nie jest jasne, dokąd poruszają się klocki, ale skąd przyszły). Zazwyczaj bloki źródłowe nakładają się na siebie w ramce źródłowej. Niektóre algorytmy kompresji wideo składają bieżącą klatkę z części nawet nie jednej, ale kilku wcześniej przesłanych klatek.

Jak działa kodek wideo? Część 1: Podstawy

Podczas procesu oceny widzimy, że piłka przesunęła się z (x= 0, y=25) przez (x= 6, y=26), wartości x и y określić wektor ruchu. Kolejnym krokiem, który możemy zrobić, aby zachować bity, jest zakodowanie jedynie różnicy wektorów ruchu między ostatnią pozycją bloku a przewidywaną, tak aby ostateczny wektor ruchu miał postać (x=6-0=6, y=26-25=1 ).

W rzeczywistej sytuacji ta piłka byłaby podzielona na n blokuje, ale to nie zmienia istoty sprawy.

Obiekty w kadrze poruszają się w trzech wymiarach, więc gdy kula się porusza, może wizualnie się zmniejszyć (lub zwiększyć, jeśli porusza się w kierunku widza). To normalne, że pomiędzy blokami nie będzie idealnego dopasowania. Oto łączny widok naszych szacunków i rzeczywistego obrazu.

Jak działa kodek wideo? Część 1: Podstawy

Widzimy jednak, że gdy stosujemy szacowanie ruchu, danych do kodowania jest zauważalnie mniej niż w przypadku prostszej metody obliczania delty między klatkami.

Jak działa kodek wideo? Część 1: Podstawy

Jak wyglądałaby rzeczywista kompensacja ruchu

Technikę tę stosuje się do wszystkich bloków jednocześnie. Często nasza warunkowa poruszająca się piłka zostanie podzielona na kilka bloków jednocześnie.

Jak działa kodek wideo? Część 1: Podstawy

Możesz sam zapoznać się z tymi koncepcjami, korzystając z nich jupiter.

Aby zobaczyć wektory ruchu, możesz utworzyć zewnętrzne wideo z przewidywaniem, używając ffmpeg.

Jak działa kodek wideo? Część 1: Podstawy

Możesz także użyć Analizator wideo Intel Pro (jest płatne, ale istnieje bezpłatny okres próbny ograniczony tylko do pierwszych dziesięciu klatek).

Jak działa kodek wideo? Część 1: Podstawy

Redundancja przestrzenna (prognoza wewnętrzna)

Jeśli przeanalizujemy każdą klatkę filmu, odkryjemy wiele powiązanych ze sobą obszarów.

Jak działa kodek wideo? Część 1: Podstawy

Przeanalizujmy ten przykład. Ta scena składa się głównie z kolorów niebieskiego i białego.

Jak działa kodek wideo? Część 1: Podstawy

To jest ramka I. Nie możemy wykorzystać poprzednich klatek do przewidywania, ale możemy je skompresować. Zakodujmy wybór czerwonego bloku. Jeśli przyjrzymy się jego sąsiadom, zauważymy, że wokół niego panują pewne trendy kolorystyczne.

Jak działa kodek wideo? Część 1: Podstawy

Zakładamy, że kolory w kadrze rozkładają się pionowo. Co oznacza, że ​​kolor nieznanych pikseli będzie zawierał wartości sąsiadów.

Jak działa kodek wideo? Część 1: Podstawy

Taka prognoza może okazać się błędna. Z tego powodu należy zastosować tę metodę (prognoza wewnętrzna), a następnie odjąć wartości rzeczywiste. Da nam to blok resztkowy, co da w rezultacie znacznie bardziej skompresowaną matrycę w porównaniu do oryginału.

Jak działa kodek wideo? Część 1: Podstawy

Jeśli chcesz poćwiczyć z wewnętrznymi przewidywaniami, możesz stworzyć film przedstawiający makrobloki i ich przewidywania za pomocą ffmpeg. Aby zrozumieć znaczenie każdego koloru bloku, będziesz musiał przeczytać dokumentację ffmpeg.

Jak działa kodek wideo? Część 1: Podstawy

Możesz też skorzystać z Intel Video Pro Analyzer (jak wspomniałem powyżej, bezpłatna wersja próbna jest ograniczona do pierwszych 10 klatek, ale na początek Ci to wystarczy).

Jak działa kodek wideo? Część 1: Podstawy

Druga część: Jak działa kodek wideo

Źródło: www.habr.com

Dodaj komentarz