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

Druga część: Zasady działania kodeka wideo

Każdy rastrowy obraz można przedstawić w postaci dwuwymiarowej macierzy. Kiedy mówimy o kolorach, pomysł można rozwijać, rozpatrując obraz jako trójwymiarową macierz, w której dodatkowe wymiary są wykorzystywane do przechowywania danych dla każdego koloru.

Jeżeli rozpatrujemy końcowy kolor jako połączenie tzw. kolorów podstawowych (czerwonego, zielonego i niebieskiego), w naszej trójwymiarowej macierzy definiujemy trzy płaszczyzny: pierwsza dla koloru czerwonego, druga dla zielonego, a ostatnia dla niebieskiego.
Jak działa kodek wideo. Część 1. Podstawy
Będziemy nazywać każdy punkt w tej macierzy pikselem (elementem obrazu). Każdy piksel zawiera informacje o intensywności (zwykle w postaci wartości liczbowej) każdego koloru. Na przykład, piksel czerwony oznacza, że ma 0 zielonego koloru, 0 niebieskiego i maksymalnie czerwony. Piksel różowego koloru może być stworzony w wyniku połączenia trzech kolorów. Używając zakresu liczbowego od 0 do 255, piksel różowy definiuje się jako Czerwony = 255, Zielony = 192 i Niebieski = 203.

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

Artykuł został opublikowany dzięki wsparciu firmy EDISON.

Opracowujemy aplikacje do monitoringu wideo, transmisji wideo, a także zajmujemy się nagrywaniem wideo w sali operacyjnej.

Alternatywne sposoby kodowania kolorowego obrazu

Aby przedstawić kolory, z których składa się obraz, istnieje wiele innych modeli. Na przykład, można użyć indeksowanej palety, w której potrzebny jest tylko jeden bajt do reprezentacji każdego piksela, zamiast trzech, które są wymagane przy użyciu modelu RGB. W takim modelu można wykorzystać macierz 2D zamiast 3D do reprezentacji każdego koloru. To oszczędza pamięć, ale daje mniejszą gamę kolorów.

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

RGB

Na przykład, spójrz na ten obrazek poniżej. Pierwsza twarz jest całkowicie pokolorowana. Pozostałe to czerwone, zielone i niebieskie płaszczyzny (intensywność odpowiednich kolorów przedstawiona w odcieniach szarości).

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

Widzimy, że odcienie czerwieni w oryginale będą w tych samych miejscach, w których obserwowane są najjaśniejsze części drugiej osoby. Podczas gdy wkład koloru niebieskiego można głównie zobaczyć tylko w oczach Mario (ostatnia osoba) oraz elementach jego odzieży. Zauważ, gdzie trzy płaszczyzny kolorów mają najmniejszy wkład (najciemniejsze części obrazów) — to w wąsach Mario.

Aby przechować intensywność każdego koloru, potrzebna jest określona liczba bitów — ta wartość nazywana jest głębokością bitową. Załóżmy, że wydaje się 8 bitów (w oparciu o zakres od 0 do 255) na jedną płaszczyznę kolorów. Wówczas mamy głębokość koloru wynoszącą 24 bity (8 bitów * 3 płaszczyzny R/G/B).

Inną właściwością obrazu jest rozdzielczość, która reprezentuje liczbę pikseli w jednym wymiarze. Często oznaczana jako szerokość × wysokość, jak poniżej w przykładzie obrazu 4 na 4.
Jak działa kodek wideo. Część 1. Podstawy

Jeszcze jedną właściwością, z którą mamy do czynienia podczas pracy z obrazami/wideo — to aspect ratio, opisujące typowy proporcjonalny związek między szerokością a wysokością obrazu lub piksela.

Kiedy mówi się, że dany film lub obraz mają rozmiar 16 na 9, zwykle odnosi się to do współczynnika proporcji ekranu (DAR — od Display Aspect Ratio). Jednak czasami mogą być różne formy pojedynczych pikseli — w takim przypadku mówimy o współczynniku pikseli (PAR — od Pixel Aspect Ratio).

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

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

Przypomnienie dla gospodyni: DVD -the node, and the other — DAR 4 na 3

Chociaż rzeczywista rozdzielczość DVD wynosi 704×480, zachowuje przy tym proporcje 4:3, ponieważ PAR ma wartość 10:11 (704×10 / 480×11).

I wreszcie, możemy zdefiniować wideo jako sekwencję n klatek w okresie czasu, co można uznać za dodatkowy wymiar. A n temu — to częstotliwość klatek lub liczba klatek na sekundę (FPS — od Frames per Second).

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

Liczba bitów na sekundę potrzebna do wyświetlenia wideo to jego prędkość transmisjibitrate.

bitrate = szerokość * wysokość * głębokość bitów * klatki na sekundę

Na przykład, dla wideo z 30 klatkami na sekundę, 24 bitami na piksel, przy rozdzielczości 480×240 potrzeba 82,944,000 bitów na sekundę lub 82,944 Mbit/s (30x480x240x24) — ale to jeśli nie używa się żadnej metody kompresji.

Jeśli prędkość transmisji jest prawie stała, nazywa się to stałą prędkością transmisji (CBR — od constant bit rate). Może ona również się zmieniać, w takim przypadku nazywa się zmienna prędkość przesyłu danych (VBR — od zmienna prędkość bitowa).

Ten wykres pokazuje ograniczony VBR, gdy nie wydaje się zbyt wiele bitów w przypadku całkowicie ciemnej klatki.

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

Początkowo inżynierowie opracowali metodę podwajania postrzeganej częstotliwości klatek wyświetlacza wideo bez użycia dodatkowej przepustowości. Metoda ta jest znana jako wideo przeplotowe; w zasadzie wysyła połowę ekranu w pierwszej "klatce", a drugą połowę w następnej "klatce".

Obecnie wizualizacja scen odbywa się głównie przy użyciu technologii skanowania progresywnego. Jest to sposób wyświetlania, przechowywania lub przesyłania ruchomych obrazów, w którym wszystkie linie każdej klatki są rysowane kolejno.

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

Cóż! Teraz mamy wiedzę na temat tego, jak obraz jest przedstawiany w formie cyfrowej, jak są ułożone jego kolory, ile bitów na sekundę wydajemy na pokazanie wideo, jeśli prędkość przesyłu jest stała (CBR) lub zmienna (VBR). Znamy ustaloną rozdzielczość przy ustalonej liczbie klatek na sekundę, zapoznaliśmy się z wieloma innymi terminami, takimi jak wideo przeplotowe, PAR i niektóre inne.

Usuwanie nadmiarowości

Wiadomo, że nie można normalnie używać wideo bez kompresji. Godzinne wideo w rozdzielczości 720p z częstotliwością 30 klatek na sekundę zajmowałoby 278 GB. Do tej wartości dochodzimy, mnożąc 1280 x 720 x 24 x 30 x 3600 (szerokość, wysokość, bity na piksel, FPS i czas w sekundach).

Użycie algorytmów kompresji bezstratnej, takich jak DEFLATE (używane w PKZIP, Gzip i PNG), nie da wystarczającego zmniejszenia wymaganej przepustowości. Trzeba poszukać innych sposobów kompresji wideo.

Można w tym celu wykorzystać cechy naszego wzroku. Lepiej rozróżniamy jasność niż kolory. Wideo to zbiór kolejnych obrazów, powtarzających się w czasie. Różnice między sąsiednimi klatkami tej samej sceny są niewielkie. Ponadto każda klatka zawiera wiele obszarów, które wykorzystują ten sam (lub podobny) kolor.

Kolor, jasność i nasze oczy

Nasze oczy są bardziej wrażliwe na jasność niż na kolor. Możecie to sami sprawdzić, patrząc na ten obraz.

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

Jeśli nie widzisz, co znajduje się w lewej połowie obrazu, kolory kwadratów A i B W rzeczywistości są identyczne, więc to jest w porządku. Nasz mózg sprawia, że zwracamy większą uwagę na światłocień, a nie na kolor. Po prawej stronie między oznaczonymi kwadratami znajduje się paski tego samego koloru — dlatego łatwo (tj. nasz mózg) określa, że w rzeczywistości jest to ten sam kolor.

Rozłóżmy (upraszczając) to, jak działają nasze oczy. Oko to skomplikowany organ, składający się z wielu części. Jednak najbardziej interesują nas czopki i pręciki. 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 określonych części oka (w rzeczywistości sytuacja jest nieco bardziej skomplikowana, ale uprościmy to). Komórki pręcikowe odpowiedzialne są głównie za jasność, podczas gdy komórki czopkowe odpowiedzialne są za kolor. Czopki dzielą się na trzy typy, w zależności od zawartego pigmentu: S-czopki (niebieski kolor), M-czopki (zielony kolor) i L-czopki (czerwony kolor).

Ponieważ mamy znacznie więcej pręcików (jasność) niż czopków (kolor), można wyciągnąć wniosek, że jesteśmy bardziej zdolni do rozróżniania przejść między ciemnością a światłem niż kolorami.

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

Funkcje czułości na kontrast

Badacze psychologii eksperymentalnej oraz wielu innych dziedzin opracowali liczne teorie dotyczące widzenia ludzkiego. Jedna z nich nazywa się funkcjami czułości na kontrast. Są one związane ze światłem przestrzennym i czasowym. Krótko mówiąc, chodzi o to, ile zmian jest potrzebnych, zanim obserwator je dostrzeże. Zwróć uwagę na liczbę mnogą słowa „funkcja”. To dlatego, że możemy mierzyć funkcje czułości na kontrast nie tylko dla obrazu czarno-białego, ale także kolorowego. Wyniki tych eksperymentów pokazują, że w większości przypadków nasze oczy są bardziej wrażliwe na jasność niż na kolor.

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

Model kolorów

Nieco zrozumieliśmy, jak pracować z obrazami kolorowymi, używając modelu RGB. Istnieją także inne modele. Jest model, który oddziela jasność od kolorowości, a nazywa się YCbCr. Zresztą, istnieją także inne modele, które dokonują podobnego podziału, ale omówimy jedynie ten.

W tym modelu kolorów Y — to reprezentacja jasności, a także są używane dwa kanały kolorów: Cb (nasycony niebieski) oraz Cr (nasycony czerwony). YCbCr można uzyskać z RGB, jak również możliwe jest odwrotne przekształcenie. Korzystając z tego modelu, możemy tworzyć pełno kolorowe obrazy, jak widać poniżej:

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

Przekształcenie między YCbCr a RGB

Niektórzy mogą zapytać: jak można uzyskać wszystkie kolory, jeśli nie używa się zielonego?

Aby odpowiedzieć na to pytanie, przekształcimy RGB na YCbCr. Skorzystamy z współczynników przyjętych w standardzie BT.601, który został zalecany przez jednostkę ITU-R. Ta jednostka definiuje standardy dla wideo cyfrowego. Na przykład: co to jest 4K? Jakie powinny być częstotliwość klatek, rozdzielczość, model kolorów?

Najpierw obliczymy jasność. Skorzystamy z stałych zaproponowanych przez ITU i zastąpimy wartości RGB.

Y = 0.299R + 0.587G + 0.114B

Po uzyskaniu jasności oddzielimy niebieski i czerwony kolor:

Cb = 0.564(BY)

Cr = 0.713(RY)

Możemy także przekształcić z powrotem i nawet uzyskać zielony za pomocą YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y — 0.344Cb — 0.714Cr

Generalnie, wyświetlacze (monitory, telewizory, ekrany itp.) używają tylko modelu RGB. Jednak ten model może być zorganizowany na różne sposoby:

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

Subskrypcja kolorów

Z obrazem przedstawionym jako kombinacja jasności i kolorystyczności, możemy wykorzystać większą czułość ludzkiego systemu wzrokowego do jasności niż do kolorów, jeśli będziemy selektywnie usuwać informacje. Subdyskrypcja kolorów to metoda kodowania obrazów, korzystająca z niższej rozdzielczości dla kolorów niż dla jasności.

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

Jak bardzo można zmniejszyć rozdzielczość kolorów?! Okazuje się, że istnieją już pewne schematy, które opisują, jak przetwarzać rozdzielczość i połączenie (Końcowy kolor = Y + Cb + Cr).

Te schematy znane są jako systemy subdyskrypcji i są wyrażane w postaci stosunku 3-krotnego — a:x:y, który określa liczbę próbek sygnałów jasności i różnic kolorów.

a — wzorcowa próba pozioma (zwykle wynosi 4)
x — liczba próbek kolorystycznych w pierwszym wierszu pikseli (pozioma rozdzielczość w odniesieniu do a)
y — liczba zmian próbek kolorystycznych między pierwszym a drugim wierszem pikseli.

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

Ogólne schematy stosowane w nowoczesnych kodekach:

  • 4:4:4 (bez subdyskretizacji)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 — przykład scalania

Oto scalony fragment obrazu z użyciem YCbCr 4:2:0. Zauważ, że wydatkujemy tylko 12 bitów na piksel.

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

Oto jak wygląda ten sam obraz, zakodowany głównymi typami subdyskretizacji kolorów. Górny rząd to ostateczny YCbCr, dolny rząd pokazuje rozdzielczość chrominancji. Wyniki są całkiem przyzwoite, biorąc pod uwagę niewielkie straty jakości.

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

Pamiętasz, że policzyliśmy 278 GB przestrzeni dyskowej potrzebnej do przechowywania godzinnego pliku wideo w rozdzielczości 720p i 30 klatkach na sekundę? Jeśli skorzystamy z YCbCr 4:2:0, to rozmiar ten zmniejszy się o połowę — do 139 GB. Wciąż zbyt daleko do osiągnięcia akceptowalnego rezultatu.

Możesz samodzielnie uzyskać histogram YCbCr za pomocą FFmpeg. Na tym obrazie niebieski przeważa nad czerwonym, co widać na samym histogramie.

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

Chrominancja, jasność, gamma — przegląd wideo

Zalecamy obejrzenie tego niesamowitego wideo. Wyjaśnia, czym jest jasność, i generalnie rozwiewa wszelkie wątpliwości. o jasności i kolorze. Typy klatek

Odtwarzaj wideo

Przechodzimy dalej. Spróbujemy wyeliminować nadmiarowość czasową. Ale najpierw zdefiniujmy kilka podstawowych terminów. Załóżmy, że mamy film z 30 klatkami na sekundę, oto jego pierwsze 4 klatki:

Widzimy wiele powtórzeń w klatkach: na przykład niezmieniające się z kadru na kadr tło. Aby rozwiązać ten problem, możemy abstrakcyjnie sklasyfikować je jako trzy typy klatek.

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

I-klatka (

ntro Frame)II-klatka (klatka kluczowa, klatka referencyjna, klatka wewnętrzna) jest autonomiczna. Niezależnie od tego, co trzeba wizualizować, I-klatka jest w zasadzie statycznym zdjęciem. Pierwsza klatka jest zazwyczaj I-klatką, jednak regularnie będziemy obserwować I-klatki również wśród znacznie późniejszych klatek.

P-klatka (

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

redicted Frame)PP-klatka (klatka przewidywana) korzysta z faktu, że prawie zawsze bieżący obraz można odtworzyć przy użyciu poprzedniej klatki. Na przykład w drugiej klatce jedyną zmianą jest poruszająca się naprzód piłka. Możemy uzyskać klatkę 2, po prostu nieco modyfikując klatkę 1, używając tylko różnicy między tymi klatkami. Aby zbudować klatkę 2, odwołujemy się do poprzedzającej go klatki 1.

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

B-klatka (Bi-znacznik przewidywania)

A co z linkami nie tylko do przeszłych, ale także do przyszłych klatek, aby zapewnić jeszcze lepsze kompresowanie?! To głównie jest B-klatka (klatka dwukierunkowa).

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

Pośredni wynik

Te typy klatek są używane do zapewnienia najlepszej kompresji. Omówimy, jak to wygląda w następnej sekcji. Na razie zauważmy, że najdroższą pod względem zużytej pamięci jest klatka I, klatka P kosztuje znacznie mniej, a najkorzystniejszą opcją dla wideo jest klatka B.

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

Nadwyżka czasowa (prognozowanie międzyklatkowe)

Przyjrzyjmy się, jakie mamy możliwości, aby zminimalizować powtórzenia w czasie. Ten typ nadwyżki zrealizujemy metodami wzajemnego prognozowania.

Postaramy się wydać jak najmniej bitów na kodowanie sekwencji klatek 0 i 1.

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

Możemy przeprowadzić odejmowanie, po prostu odejmujemy klatkę 1 od klatki 0. Otrzymujemy klatkę 1, używając różnicy między nią a poprzednią klatką, w rzeczywistości kodując tylko uzyskany resztę.

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

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

Z Wikipedii — kompensacja ruchu blokowego

Kompensacja ruchu blokowego dzieli obecną klatkę na nieprzecinające się bloki, a wektor kompensacji ruchu informuje o pochodzeniu bloków (powszechne nieporozumienie polega na tym, że poprzednia klatka dzieli się na nieprzecinające się bloki, a wektory kompensacji ruchu informują, dokąd te bloki przechodzą. W rzeczywistości jest odwrotnie — analizowana jest nie poprzednia klatka, a następna, ustalamy, skąd te bloki pochodzą, a nie dokąd się przemieszczają). Zwykle bloki początkowe nachodzą na siebie w oryginalnej klatce. Niektóre algorytmy kompresji wideo tworzą obecną klatkę z części nie tylko jednego, ale od razu kilku wcześniej przesłanych klatek.

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

W trakcie oceny widzimy, że kula przemieściła się z (x=0, y=25) do (x=6, y=26), wartości x i y określają wektor ruchu. Kolejny krok, który możemy podjąć, aby zachować bity, to zakodować tylko różnicę wektorów ruchu między ostatnią pozycją bloku a prognozowaną, więc ostateczny wektor ruchu będzie (x=6-0=6, y=26-25=1).

W rzeczywistej sytuacji ta kulka byłaby podzielona na n bloki, ale istoty to nie zmienia.

Obiekty w kadrze poruszają się w trzech wymiarach, dlatego podczas ruchu kulki może ona stać się wizualnie mniejsza (lub większa, jeśli porusza się w stronę widza). To normalne, że nie będzie idealnego dopasowania między blokami. Oto zestawione widoki naszej oceny i rzeczywistej sceny.

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

Ale widzimy, że gdy stosujemy ocenę ruchu, danych do kodowania wyraźnie jest mniej niż przy użyciu prostszej metody obliczania delta między klatkami.

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

Jak będzie wyglądać rzeczywista kompensacja ruchu

Ta metoda stosowana jest od razu do wszystkich bloków. Często nasza warunkowa poruszająca się kulka będzie od razu podzielona na kilka bloków.

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

Możesz samodzielnie zbadać te koncepcje, używając Jupyter.

Aby zobaczyć wektory ruchu, można stworzyć wideo z zewnętrznym prognozowaniem za pomocą ffmpeg.

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

Można również skorzystać z Intel Video Pro Analyzer (jest płatny, ale dostępna jest bezpłatna wersja próbna, która jest ograniczona tylko do pierwszych dziesięciu klatek).

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

Redundancja przestrzenna (prognoza wewnętrzna)

Analizując każdą klatkę w wideo, odkryjemy wiele powiązanych obszarów.

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

Przykład. Ta scena w większości składa się z niebieskiego i białego koloru.

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

To jest klatka I. Nie możemy wziąć poprzednich klatek do prognozowania, ale uda się ją skompresować. Zakodujemy wyodrębnienie czerwonego bloku. Jeśli spojrzymy na jego sąsiadów, zauważamy, że wokół niego są pewne tendencje kolorystyczne.

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

Zakładamy, że kolory w kadrze rozprzestrzeniają się w pionie. Co oznacza, że kolor nieznanych pikseli będzie zawierać wartości jego sąsiadów.

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

Taka prognoza może okazać się również błędna. Dlatego należy zastosować tę metodę (prognoza wewnętrzna), a następnie odjąć rzeczywiste wartości. To da nam pozostały blok, co doprowadzi do znacznie bardziej skompresowanej macierzy w porównaniu z oryginałem.

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

Jeśli chcesz poćwiczyć wewnętrzne prognozy, możesz stworzyć wideo z makroboksami i ich prognozami za pomocą ffmpeg. Aby zrozumieć znaczenie każdego koloru bloku, musisz zapoznać się z dokumentacją ffmpeg.

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

Możesz również skorzystać z Intel Video Pro Analyzer (jak już wspomniałem wcześniej, w darmowej wersji próbnej ograniczenie do pierwszych 10 klatek, ale tego na początku wystarczy).

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

Druga część: Zasady działania kodeka wideo

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster