Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Pierwsza część: Podstawy pracy z wideo i obrazami

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Jakie? Kodek wideo to oprogramowanie/sprzęt, który kompresuje i/lub dekompresuje cyfrowe wideo.

Za co? Pomimo pewnych ograniczeń zarówno pod względem przepustowości, jak i
a jeśli chodzi o przestrzeń do przechowywania danych, rynek wymaga coraz wyższej jakości wideo. Pamiętacie jak w ostatnim poście obliczyliśmy wymagane minimum dla 30 klatek na sekundę, 24 bity na piksel, przy rozdzielczości 480x240? Otrzymaliśmy 82,944 Mbit/s bez kompresji. Kompresja to obecnie jedyny sposób na ogólną transmisję HD/FullHD/4K na ekrany telewizorów i Internet. Jak to osiągnąć? Przyjrzyjmy się teraz krótko głównym metodom.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Tłumaczenie zostało wykonane przy wsparciu oprogramowania EDISON.

Zajmujemy się integracja systemów monitoringu wizyjnegoa także opracowujemy mikrotomograf.

Kodek kontra kontener

Częstym błędem popełnianym przez początkujących jest mylenie cyfrowego kodeka wideo i cyfrowego kontenera wideo. Kontener to określony format. Opakowanie zawierające metadane wideo (i ewentualnie audio). Skompresowany film można traktować jako ładunek kontenera.

Zazwyczaj rozszerzenie pliku wideo wskazuje typ jego kontenera. Na przykład plik video.mp4 jest prawdopodobnie kontenerem Część MPEG-4 14, a najprawdopodobniej plik o nazwie video.mkv matrioszka. Aby mieć całkowitą pewność co do kodeka i formatu kontenera, możesz użyć FFmpeg lub MediaInfo.

Trochę historii

Zanim do tego dojdziemy W jaki sposób?, zanurzmy się trochę w historię, aby lepiej zrozumieć niektóre starsze kodeki.

Kodek wideo H.261 pojawił się w 1990 r. (technicznie - w 1988 r.) i został stworzony do pracy z szybkością transmisji danych 64 Kbps. Wykorzystywał już takie pomysły, jak podpróbkowanie kolorów, makrobloki itp. Standard kodeka wideo został opublikowany w 1995 roku H.263, który rozwijał się do 2001 roku.

Pierwsza wersja została ukończona w 2003 roku H.264 / AVC. W tym samym roku firma TrueMotion wypuściła swój darmowy, stratny kodek wideo o nazwie VP3. Google kupił firmę w 2008 roku, wypuszczając VP8 ten sam rok. W grudniu 2012 r. Google wydało VP9i jest obsługiwana w około ¾ rynku przeglądarek (w tym na urządzeniach mobilnych).

AV1 to nowy darmowy kodek wideo o otwartym kodzie źródłowym opracowany przez Sojusz na rzecz Otwartych Mediów (AOMmedia), w skład którego wchodzą najbardziej znane firmy, takie jak: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel i Cisco. Pierwsza wersja kodeka 0.1.0 została opublikowana 7 kwietnia 2016 roku.

Narodziny AV1

Na początku 2015 roku Google pracował nad VP10Pracował nad nim Xiph (który jest własnością Mozilli). Daala, a Cisco stworzyło własny, bezpłatny kodek wideo o nazwie Thor.

następnie MPEG Los Angeles po raz pierwszy ogłoszono roczne limity dla HEVC (H.265) i opłatę 8 razy wyższą niż za H.264, ale wkrótce ponownie zmienili zasady:

brak limitu rocznego,
opłata za treść (0,5% przychodów) oraz
opłata jednostkowa jest około 10 razy wyższa niż w przypadku H.264.

Sojusz na rzecz Otwartych Mediów został stworzony przez firmy z różnych dziedzin: producentów sprzętu (Intel, AMD, ARM, Nvidia, Cisco), dostawców treści (Google, Netflix, Amazon), twórców przeglądarek (Google, Mozilla) i innych.

Firmy miały wspólny cel – kodek wideo nieodpłatny. Następnie pojawia się AV1 ze znacznie prostszą licencją patentową. Timothy B. Terryberry dał oszałamiającą prezentację, która stała się początkiem obecnej koncepcji AV1 i jej modelu licencjonowania.

Będziesz zaskoczony, gdy dowiesz się, że możesz analizować kodek AV1 za pośrednictwem przeglądarki (zainteresowani mogą przejść do aomanalyzer.org).

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Uniwersalny kodek

Przyjrzyjmy się głównym mechanizmom leżącym u podstaw uniwersalnego kodeka wideo. Większość z tych koncepcji jest przydatna i jest używana w nowoczesnych kodekach, takich jak VP9, AV1 и HEVC. Ostrzegam, że wiele z wyjaśnionych spraw zostanie uproszczonych. Czasami do zademonstrowania technologii zostaną użyte przykłady z prawdziwego świata (jak w przypadku H.264).

Krok 1 - podzielenie obrazu

Pierwszym krokiem jest podzielenie ramki na kilka sekcji, podsekcji i dalej.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Po co? Jest wiele powodów. Dzieląc obraz, możemy dokładniej przewidzieć wektor ruchu, używając małych sekcji dla małych ruchomych części. Natomiast w przypadku statycznego tła możesz ograniczyć się do większych sekcji.

Kodeki zazwyczaj organizują te sekcje w sekcje (lub fragmenty), makrobloki (lub bloki drzewa kodowania) i wiele podsekcji. Maksymalny rozmiar tych partycji jest różny, HEVC ustawia go na 64x64, podczas gdy AVC używa 16x16, a podpartycje można podzielić do rozmiarów 4x4.

Pamiętacie rodzaje oprawek z ostatniego artykułu?! To samo można zastosować do bloków, więc możemy mieć fragment I, blok B, makroblok P itp.

Dla tych, którzy chcą poćwiczyć, zobacz, jak obraz jest podzielony na sekcje i podsekcje. Aby to zrobić, możesz użyć tego, o którym mowa już w poprzednim artykule. Analizator wideo Intel Pro (ta, która jest płatna, ale z bezpłatną wersją próbną, która jest ograniczona do pierwszych 10 klatek). Sekcje analizowane tutaj VP9:

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Krok drugi – prognozowanie

Kiedy już mamy sekcje, możemy dla nich przygotować prognozy astrologiczne. Dla Prognozy INTER należy przenieść wektory ruchu i pozostała część, a dla prognozowania INTRA jest transmitowana kierunek prognozy i reszta.

Krok 3 – transformacja

Gdy już mamy blok resztkowy (przekrój przewidywany → przekrój rzeczywisty), można go przekształcić w taki sposób, że wiemy, które piksele można odrzucić, zachowując ogólną jakość. Istnieją pewne transformacje, które zapewniają dokładne zachowanie.

Chociaż istnieją inne metody, przyjrzyjmy się im bardziej szczegółowo. dyskretna transformata kosinusowa (DCT - z dyskretna transformata cosinus). Główne funkcje DCT:

  • Konwertuje bloki pikseli na bloki o równej wielkości o współczynnikach częstotliwości.
  • Kondensuje moc, aby pomóc wyeliminować nadmiarowość przestrzenną.
  • Zapewnia odwracalność.

2 lutego 2017 Sintra R.J. (Cintra, RJ) i Bayer F.M. (Bayer FM) opublikował artykuł o transformacji podobnej do DCT do kompresji obrazu, która wymaga jedynie 14 dodatków.

Nie martw się, jeśli nie rozumiesz korzyści płynących z każdego punktu. Posłużmy się teraz konkretnymi przykładami, aby przekonać się o ich rzeczywistej wartości.

Weźmy ten blok pikseli 8x8:

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Ten blok jest renderowany do następującego obrazu o wymiarach 8 na 8 pikseli:

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Zastosuj DCT do tego bloku pikseli i uzyskaj blok współczynników 8x8:

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

A jeśli wyrenderujemy ten blok współczynników, otrzymamy następujący obraz:

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Jak widać, nie przypomina to oryginału. Widać, że pierwszy współczynnik bardzo różni się od pozostałych. Ten pierwszy współczynnik jest znany jako współczynnik DC i reprezentuje wszystkie próbki w tablicy wejściowej, coś w rodzaju średniej.

Ten blok współczynników ma ciekawą właściwość: oddziela składniki o wysokiej częstotliwości od składników o niskiej częstotliwości.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

W obrazie większość mocy skupia się na niższych częstotliwościach, więc jeśli przekształcisz obraz na składowe częstotliwościowe i odrzucisz współczynniki o wyższej częstotliwości, możesz zmniejszyć ilość danych potrzebnych do opisania obrazu bez poświęcania zbyt dużej jego jakości.

Częstotliwość odnosi się do szybkości zmian sygnału.

Spróbujmy zastosować wiedzę zdobytą w przypadku testowym, konwertując oryginalny obraz na jego częstotliwość (blok współczynników) za pomocą DCT, a następnie odrzucając część najmniej ważnych współczynników.

Najpierw konwertujemy go na dziedzinę częstotliwości.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Następnie odrzucamy część (67%) współczynników, głównie prawą dolną część.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Na koniec rekonstruujemy obraz z tego odrzuconego bloku współczynników (pamiętajmy, że musi być odwracalny) i porównujemy go z oryginałem.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Widzimy, że przypomina oryginalny obraz, ale istnieje wiele różnic w stosunku do oryginału. Wyrzuciliśmy 67,1875% i nadal otrzymaliśmy coś przypominającego oryginał. Można było w bardziej przemyślany sposób odrzucić współczynniki, aby uzyskać obraz o jeszcze lepszej jakości, ale to już inny temat.

Każdy współczynnik jest generowany przy użyciu wszystkich pikseli

Ważne: każdy współczynnik nie jest bezpośrednio przypisywany do jednego piksela, ale stanowi ważoną sumę wszystkich pikseli. Ten niesamowity wykres pokazuje, jak obliczany jest pierwszy i drugi współczynnik przy użyciu wag unikalnych dla każdego indeksu.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Możesz także spróbować zwizualizować DCT, patrząc na prosty obraz utworzony na jego podstawie. Na przykład, tutaj jest symbol A wygenerowany przy użyciu każdej wagi współczynnika:

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Krok 4 – kwantyzacja

Po tym jak w poprzednim kroku wyrzuciliśmy część współczynników, w ostatnim kroku (transformacja) wykonujemy specjalną formę kwantyzacji. Na tym etapie akceptowalna jest utrata informacji. Lub, prościej, skwantujemy współczynniki, aby osiągnąć kompresję.

Jak skwantować blok współczynników? Jedną z najprostszych metod jest kwantyzacja jednostajna, gdy bierzemy blok, dzielimy go przez jedną wartość (przez 10) i zaokrąglamy wynik.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Czy możemy odwrócić ten blok współczynników? Tak, możemy, mnożąc przez tę samą wartość, przez którą podzieliliśmy.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Podejście to nie jest najlepsze, ponieważ nie uwzględnia wagi każdego współczynnika. Można by użyć macierzy kwantyzatorów zamiast pojedynczej wartości, a macierz ta mogłaby wykorzystać właściwość DCT poprzez kwantyzację większości prawego dolnego rogu i mniejszości lewego górnego rogu.

Krok 5 – kodowanie entropijne

Po skwantowaniu danych (bloków obrazu, fragmentów, klatek) nadal możemy je kompresować bezstratnie. Istnieje wiele algorytmicznych sposobów kompresji danych. Przyjrzymy się szybko niektórym z nich, dla głębszego zrozumienia możesz przeczytać książkę Understanding Compression: Data Compression for Modern Developers („Zrozumienie kompresji: kompresja danych dla nowoczesnych programistów” („Zrozumienie kompresji: kompresja danych dla współczesnych programistów").

Kodowanie wideo za pomocą VLC

Załóżmy, że mamy strumień znaków: a, e, r и t. W poniższej tabeli przedstawiono prawdopodobieństwo (od 0 do 1) tego, jak często każdy znak pojawia się w strumieniu.

a e r t
Prawdopodobieństwo 0,3 0,3 0,2 0,2

Do najbardziej prawdopodobnych możemy przypisać unikalne kody binarne (najlepiej małe), a do mniej prawdopodobnych większe kody.

a e r t
Prawdopodobieństwo 0,3 0,3 0,2 0,2
kod binarny 0 10 110 1110

Kompresujemy strumień, zakładając, że ostatecznie wydamy 8 bitów na każdy znak. Bez kompresji potrzebne byłyby 24 bity na znak. Jeśli zastąpisz każdy znak jego kodem, zyskasz oszczędności!

Pierwszym krokiem jest zakodowanie znaku e, co jest równe 10, a drugi znak to a, do którego dodaje się (nie matematycznie): [10] [0] i na koniec trzeci znak t, co sprawia, że ​​nasz końcowy skompresowany strumień bitów jest równy [10] [0] [1110] lub 1001110, który wymaga jedynie 7 bitów (3,4 razy mniej miejsca niż oryginał).

Należy pamiętać, że każdy kod musi być unikalnym kodem z prefiksem. Algorytm Huffmana pomoże Ci znaleźć te numery. Chociaż ta metoda nie jest pozbawiona wad, istnieją kodeki wideo, które nadal oferują tę algorytmiczną metodę kompresji.

Zarówno koder, jak i dekoder muszą mieć dostęp do tablicy symboli zawierającej ich kody binarne. Dlatego konieczne jest również przesłanie tabeli jako danych wejściowych.

Kodowanie arytmetyczne

Załóżmy, że mamy strumień znaków: a, e, r, s и t, a ich prawdopodobieństwo przedstawiono w poniższej tabeli.

a e r s t
Prawdopodobieństwo 0,3 0,3 0,15 0,05 0,2

Korzystając z tej tabeli, zbudujemy zakresy zawierające wszystkie możliwe znaki, posortowane według największej liczby.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Zakodujmy teraz strumień trzech znaków: jeść.

Najpierw wybierz pierwszy znak e, który mieści się w podzakresie od 0,3 do 0,6 (bez uwzględnienia). Bierzemy ten podzakres i dzielimy go ponownie w takich samych proporcjach jak poprzednio, ale dla tego nowego zakresu.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Kontynuujmy kodowanie naszego strumienia jeść. Teraz weź drugą postać a, który znajduje się w nowym podzakresie od 0,3 do 0,39, a następnie weźmy nasz ostatni znak t i powtarzając ten sam proces ponownie, otrzymujemy końcowy podzakres od 0,354 do 0,372.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Pozostaje nam tylko wybrać liczbę z ostatniego podzakresu od 0,354 do 0,372. Wybierzmy 0,36 (ale możesz wybrać dowolną inną liczbę z tego podzakresu). Tylko dzięki temu numerowi będziemy mogli przywrócić nasz pierwotny strumień. To tak, jakbyśmy rysowali linię w obrębie zakresów, aby zakodować nasz strumień.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Operacja odwrotna (tzn. rozszyfrowanie) jest równie proste: mając liczbę 0,36 i początkowy zakres, możemy przeprowadzić ten sam proces. Ale teraz za pomocą tego numeru identyfikujemy strumień zakodowany za pomocą tego numeru.

Przy pierwszym zakresie zauważamy, że nasza liczba odpowiada wycinkowi, dlatego jest to nasz pierwszy znak. Teraz dzielimy ten podzakres ponownie, postępując zgodnie z tym samym procesem, co poprzednio. Tutaj widać, że 0,36 odpowiada symbolowi ai po powtórzeniu procesu dotarliśmy do ostatniego znaku t (tworząc nasz oryginalnie zakodowany strumień jeść).

Zarówno koder, jak i dekoder muszą posiadać tablicę prawdopodobieństw symboli, dlatego konieczne jest przesłanie jej również w danych wejściowych.

Całkiem elegancko, prawda? Ktokolwiek wpadł na to rozwiązanie, był cholernie mądry. Niektóre kodeki wideo wykorzystują tę technikę (lub przynajmniej oferują ją jako opcję).

Pomysł polega na bezstratnej kompresji skwantowanego strumienia bitów. Z pewnością w tym artykule brakuje mnóstwa szczegółów, powodów, kompromisów itp. Ale jeśli jesteś programistą, powinieneś wiedzieć więcej. Nowe kodeki próbują używać różnych algorytmów kodowania entropijnego, takich jak LAT.

Krok 6 – format strumienia bitów

Po wykonaniu tego wszystkiego pozostaje tylko rozpakować skompresowane ramki w kontekście wykonanych kroków. Dekoder musi być wyraźnie poinformowany o decyzjach podjętych przez koder. Dekoder musi być wyposażony we wszystkie niezbędne informacje: głębię bitową, przestrzeń barw, rozdzielczość, informacje predykcyjne (wektory ruchu, predykcja kierunkowa INTER), profil, poziom, liczbę klatek na sekundę, typ klatki, numer klatki i wiele innych.

Przyjrzymy się szybko strumieniowi bitów H.264. Naszym pierwszym krokiem jest utworzenie minimalnego strumienia bitów H.264 (FFmpeg domyślnie dodaje wszystkie opcje kodowania, takie jak SEI NAL – dowiemy się, co to jest nieco dalej). Możemy to zrobić wykorzystując własne repozytorium i FFmpeg.

./s/ffmpeg -i /files/i/minimal.png -pix_fmt yuv420p /files/v/minimal_yuv420.h264

To polecenie wygeneruje surowy strumień bitów H.264 z jedną klatką, rozdzielczość 64×64, z przestrzenią barw YUV420. W tym przypadku poniższy obraz służy jako ramka.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Strumień bitów H.264

Standard AVC (H.264) określa, że ​​informacja będzie przesyłana w makroramkach (w sensie sieciowym), tzw nal (jest to poziom abstrakcji sieci). Głównym celem NAL jest zapewnienie prezentacji wideo „przyjaznej dla Internetu”. Standard ten powinien działać na telewizorach (w trybie strumieniowym), Internecie (w trybie pakietowym).

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Istnieje znacznik synchronizacji służący do definiowania granic elementów NAL. Każdy token synchronizacji zawiera wartość 0x00 0x00 0x01, z wyjątkiem pierwszego, który jest równy 0x00 0x00 0x00 0x01. Jeśli wystartujemy zrzut szesnastkowy dla wygenerowanego strumienia bitów H.264 identyfikujemy na początku pliku co najmniej trzy wzorce NAL.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Jak stwierdzono, dekoder musi znać nie tylko dane obrazu, ale także szczegóły wideo, klatki, kolory, użyte parametry i wiele więcej. Pierwszy bajt każdego NAL definiuje jego kategorię i typ.

Identyfikator typu NAL Opis
0 Nieznany typ
1 Zakodowany fragment obrazu bez IDR
2 Sekcja zakodowanych danych plasterka A
3 Sekcja zakodowanych danych plasterka B
4 Sekcja zakodowanych danych plasterka C
5 Zakodowany fragment IDR obrazu IDR
6 Więcej informacji o rozszerzeniu SEI
7 Zestaw parametrów sekwencji SPS
8 Zestaw parametrów obrazu PPS
9 Separator dostępu
10 Koniec sekwencji
11 Koniec wątku
... ...

Zazwyczaj pierwszym NAL strumienia bitów jest PLC. Ten typ NAL jest odpowiedzialny za informowanie o typowych zmiennych kodowania, takich jak profil, poziom, rozdzielczość itp.

Jeśli pominiemy pierwszy znacznik synchronizacji, możemy zdekodować pierwszy bajt, aby dowiedzieć się, który typ NAL jest pierwszy.

Na przykład pierwszy bajt po tokenie synchronizacji to 01100111, gdzie pierwszy bit (0) znajduje się w polu forbidden_zero_bit. Następne 2 bity (11) mówi nam o polu nal_ref_idc, co wskazuje, czy ten NAL jest zmienną referencyjną, czy nie. A pozostałe 5 bitów (00111) mówi nam o polu nal_unit_type, w tym przypadku jest to blok SPS (7) NAL.

Drugi bajt (dwójkowy=01100100, hex=0x64, grudzień=100) w SPS NAL to pole profil_idc, który pokazuje profil używany przez koder. W tym przypadku zastosowano ograniczony wysoki profil (tj. wysoki profil bez dwukierunkowego wsparcia segmentu B).

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Jeśli spojrzysz na specyfikację strumienia bitów H.264 dla SPS NAL znajdziemy wiele wartości nazwy parametru, kategorii i opisu. Spójrzmy na przykład na pola pic_width_in_mbs_minus_1 и pic_height_in_map_units_minus_1.

Nazwa parametru kategoria Opis
pic_width_in_mbs_minus_1 0 ue(v)
pic_height_in_map_units_minus_1 0 ue(v)

Jeśli wykonamy jakieś operacje matematyczne na wartościach tych pól, otrzymamy rozdzielczość. Można reprezentować 1920 x 1080 za pomocą pic_width_in_mbs_minus_1 o wartości 119 ((119 + 1) * makroblok_rozmiar = 120 * 16 = 1920). Ponownie, aby zaoszczędzić miejsce, zamiast kodować 1920, zrobiliśmy to za pomocą 119.

Jeśli będziemy nadal sprawdzać stworzony przez nas film w formie binarnej (na przykład: xxd -b -c 11 v/minimal_yuv420.h264), następnie możesz przejść do ostatniego NAL, czyli samej ramki.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Tutaj widzimy jego pierwsze 6 wartości bajtów: 01100101 10001000 10000100 00000000 00100001 11111111. Ponieważ wiadomo, że pierwszy bajt wskazuje typ NAL, w tym przypadku (00101) to fragment IDR (5), a następnie możesz go dalej badać:

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Korzystając z informacji specyfikacji, możliwe będzie dekodowanie typu fragmentu (typ_plasterku) i numer ramki (numer_klatki) wśród innych ważnych dziedzin.

Aby uzyskać wartości niektórych pól (ue(v), me(v), se(v) lub te(v)), musimy odszyfrować fragment za pomocą specjalnego dekodera opartego na wykładniczy kod Golomba. Ta metoda jest bardzo wydajna przy kodowaniu wartości zmiennych, zwłaszcza gdy istnieje wiele wartości domyślnych.

Wartości typ_plasterku и numer_klatki tego filmu to 7 (fragment I) i 0 (pierwsza klatka).

Strumień bitów można traktować jako protokół. Jeśli chcesz dowiedzieć się więcej na temat strumienia bitów, powinieneś zapoznać się ze specyfikacją ITU H.264. Oto makrodiagram pokazujący, gdzie znajdują się dane obrazu (YUV w formie skompresowanej).

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Można zbadać inne strumienie bitów, takie jak VP9, H.265 (HEVC) lub nawet nasz nowy najlepszy strumień bitów AV1. Czy wszystkie są podobne? Nie, ale kiedy zrozumiesz przynajmniej jedno, znacznie łatwiej będzie Ci zrozumieć resztę.

Chcesz ćwiczyć? Poznaj strumień bitów H.264

Możesz wygenerować jednoklatkowy film i użyć MediaInfo do sprawdzenia strumienia bitów H.264. Tak naprawdę nic nie stoi na przeszkodzie, aby choćby zajrzeć do kodu źródłowego analizującego strumień bitów H.264 (AVC).

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Do ćwiczeń można wykorzystać Intel Video Pro Analyzer (czy mówiłem już, że program jest płatny, ale istnieje darmowa wersja próbna z limitem 10 klatek?).

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Przegląd

Zauważ, że wiele nowoczesnych kodeków używa tego samego modelu, który właśnie badaliśmy. Przyjrzyjmy się teraz schematowi blokowemu kodeka wideo Thor. Zawiera wszystkie kroki, przez które przeszliśmy. Celem tego posta jest przynajmniej lepsze zrozumienie innowacji i dokumentacji w tym obszarze.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Wcześniej obliczano, że do przechowywania pliku wideo trwającego godzinę w jakości 139p i 720 kl./s potrzeba będzie 30 GB miejsca na dysku. Jeśli użyjesz metod omówionych w tym artykule (predykcja międzyramkowa i wewnętrzna, transformacja, kwantyzacja, kodowanie entropijne itp.), Możesz uzyskać (biorąc pod uwagę fakt, że wydajemy 0,031 bitów na piksel) film o dość zadowalającej jakości, zajmując jedynie 367,82 MB, a nie 139 GB pamięci.

W jaki sposób H.265 osiąga lepszy współczynnik kompresji niż H.264?

Teraz, gdy wiemy więcej o działaniu kodeków, łatwiej jest zrozumieć, w jaki sposób nowsze kodeki mogą zapewniać wyższą rozdzielczość przy mniejszej liczbie bitów.

Jeśli porównamy AVC и HEVC, warto pamiętać, że prawie zawsze jest to wybór pomiędzy większym obciążeniem procesora a stopniem kompresji.

HEVC ma więcej opcji sekcji (i podsekcji) niż AVC, więcej wewnętrznych kierunków przewidywania, ulepszone kodowanie entropijne i nie tylko. Wszystkie te ulepszenia zostały wprowadzone H.265 zdolny do skompresowania o 50% więcej niż H.264.

Jak działa kodek wideo? Część 2. Co, dlaczego, jak

Pierwsza część: Podstawy pracy z wideo i obrazami

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

Dodaj komentarz