Wie der Videocodec funktioniert. Teil 1. Grundlagen

Zweiter Teil: Wie der Video-Codec funktioniert




Jedes Rasterbild kann als zweidimensionale Matrix dargestellt werden . Wenn es um Farben geht, kann die Idee entwickelt werden, indem das Bild in Form einer dreidimensionalen Matrix betrachtet wird , in der zusĂ€tzliche Messungen zum Speichern von Daten fĂŒr jede der Farben verwendet werden.

Betrachten wir die endgĂŒltige Farbe als eine Kombination der sogenannten PrimĂ€rfarben (rot, grĂŒn und blau) bestimmen wir in unserer dreidimensionalen Matrix drei Ebenen: die erste fĂŒr rot, die zweite fĂŒr grĂŒn und die letzte fĂŒr blau.
3D RGB Matrix

Wir werden jeden Punkt in dieser Matrix als Pixel (Bildelement) bezeichnen. Jedes Pixel enthĂ€lt IntensitĂ€tsinformationen (normalerweise in Form eines numerischen Werts) jeder Farbe. Zum Beispiel bedeutet ein rotes Pixel , dass es 0 GrĂŒn, 0 Blau und maximal Rot hat. Ein rosa Pixel kann unter Verwendung einer Kombination von drei Farben gebildet werden. Unter Verwendung eines Zahlenbereichs von 0 bis 255 wird das rosa Pixel als Rot = 255 , GrĂŒn = 192 und Blau = 203 definiert .
EDISON Software - Webentwicklung
Dieser Artikel wurde mit der UnterstĂŒtzung von EDISON veröffentlicht.

Wir entwickeln Anwendungen fĂŒr die VideoĂŒberwachung, das Streaming von Videos sowie die Videoaufzeichnung im Operationssaal .

Alternative Farbcodierungstechniken


Um die Farben darzustellen, aus denen das Bild besteht, gibt es viele andere Modelle. Beispielsweise können Sie eine indizierte Palette verwenden, in der nur ein Byte fĂŒr jedes Pixel erforderlich ist, anstatt der drei, die bei Verwendung des RGB-Modells erforderlich sind. In einem solchen Modell können Sie eine 2D-Matrix anstelle einer 3D-Matrix verwenden, um jede Farbe darzustellen. Das spart Speicherplatz, gibt aber weniger Farbe.

NES-Palette

RGB



Schauen Sie sich zum Beispiel das folgende Bild an. Das erste Gesicht ist komplett bemalt. Andere sind die roten, grĂŒnen und blauen Ebenen (die IntensitĂ€t der entsprechenden Farben wird in Graustufen angezeigt).

RGB-KanalintensitÀt

Wir sehen, dass sich die Rottöne im Original an denselben Stellen befinden, an denen die hellsten Stellen der zweiten Person beobachtet werden. WÀhrend der Beitrag von Blau ist hauptsÀchlich nur in den Augen von Mario (dem letzten Gesicht) und den Elementen seiner Kleidung zu sehen. Beachten Sie, wo alle drei Farbebenen den geringsten Beitrag leisten (die dunkelsten Teile der Bilder) - das ist Marios Schnurrbart.

Um die IntensitÀt jeder Farbe zu speichern, ist eine bestimmte Anzahl von Bits erforderlich - dieser Wert wird als Bittiefe bezeichnet . Angenommen, es werden 8 Bits (basierend auf einem Wert von 0 bis 255) auf einer Farbebene ausgegeben. Dann haben wir eine Farbtiefe von 24 Bit (8 Bit * 3 R / G / B-Ebene).

Eine weitere Eigenschaft des Bildes ist die Auflösung , dh die Anzahl der Pixel in einer Dimension. Es wird oft als Breite × Höhe bezeichnet , wie im folgenden Beispiel 4 mal 4.
Bildauflösung

Eine weitere Eigenschaft, mit der wir uns bei der Arbeit mit Bildern / Videos befassen, ist das SeitenverhĂ€ltnis , das das ĂŒbliche proportionale VerhĂ€ltnis zwischen Breite und Höhe eines Bildes oder Pixels beschreibt.

Wenn sie sagen, dass ein Film oder ein Bild 16 mal 9 groß ist, bezieht sich dies normalerweise auf das SeitenverhĂ€ltnis der Anzeige ( DAR - from Display Aspect Ratio ). Manchmal kann es jedoch zu unterschiedlichen Formen einzelner Pixel kommen - in diesem Fall handelt es sich um das PixelverhĂ€ltnis ( PAR - from Pixel Aspect Ratio ).

SeitenverhÀltnis anzeigen

Pixel-SeitenverhÀltnis
Hinweis an die Gastgeberin: DVD entspricht DAR 4 mal 3

Obwohl die tatsÀchliche Auflösung der DVD 704 x 480 betrÀgt, bleibt das SeitenverhÀltnis 4: 3 erhalten, da der PAR auf 10:11 (704 x 10/480 x 11) eingestellt ist.

Und schließlich können wir ein Video als Folge von n Bildern ĂŒber einen bestimmten Zeitraum definieren, was als zusĂ€tzliche Dimension betrachtet werden kann. Und n ist dann die Bildrate oder die Anzahl der Bilder pro Sekunde ( FPS - from Frames per Second ).

das Video

Die Anzahl der Bits pro Sekunde, die zum Anzeigen eines Videos erforderlich sind, ist die Bitrate .
Bitrate = Breite * Höhe * Bittiefe * Frames pro Sekunde

Beispiel: FĂŒr Videos mit 30 Bildern pro Sekunde, 24 Bit pro Pixel, 480 x 240 Auflösung, 82.944.000 Bit pro Sekunde oder 82.944 Mbit / s (30 x 480 x 240 x 24) ist dies erforderlich, wenn Sie keine der Komprimierungsmethoden verwenden.

Ist die Bitrate nahezu konstant , spricht man von einer konstanten Bitrate ( CBR - from constant bit rate ). Es kann aber auch variieren, in diesem Fall spricht man von einer variablen Bitrate ( VBR - from variable bit rate ).

Dieser Graph zeigt eine begrenzte VBR, wenn im Falle eines vollstÀndig dunklen Rahmens nicht zu viele Bits ausgegeben werden.

Limited VBR

ZunÀchst entwickelten die Ingenieure eine Methode, um die wahrgenommene Bildrate einer Videoanzeige zu verdoppeln, ohne zusÀtzliche Bandbreite zu verbrauchen. Diese Methode wird als Interlaced-Video bezeichnet . GrundsÀtzlich wird die HÀlfte des Bildschirms im ersten "Frame" und die andere HÀlfte im nÀchsten "Frame" gesendet.

Derzeit wird die Szenenvisualisierung hauptsĂ€chlich mit der Progressive-Scan-Technologie durchgefĂŒhrt . Dies ist eine Methode zum Anzeigen, Speichern oder Übertragen von Bewegtbildern, bei der alle Zeilen jedes Einzelbilds nacheinander gezeichnet werden.

interlaced und progressiv

Na dann! Jetzt wissen wir, wie das Bild in digitaler Form dargestellt wird, wie die Farben angeordnet sind, wie viele Bits pro Sekunde wir verwenden, um das Video anzuzeigen, wenn die Übertragungsgeschwindigkeit konstant (CBR) oder variabel (VBR) ist. Wir kennen eine bestimmte Auflösung mit einer bestimmten Bildrate, kennen viele andere Begriffe wie Interlaced-Video, PAR und einige andere.

Redundanzentfernung


Es ist bekannt, dass Videos ohne Komprimierung nicht normal verwendet werden können. Ein stĂŒndliches Video mit einer Auflösung von 720p und einer Frequenz von 30 Bildern pro Sekunde wĂŒrde 278 GB belegen. Diesen Wert erhalten wir durch Multiplikation von 1280 x 720 x 24 x 30 x 3600 (Breite, Höhe, Bits pro Pixel, FPS und Zeit in Sekunden).

Mit verlustfreien Komprimierungsalgorithmen wie DEFLATE (in PKZIP, Gzip und PNG verwendet) wird die erforderliche Bandbreite nicht ausreichend reduziert. Sie mĂŒssen nach anderen Möglichkeiten suchen, um Videos zu komprimieren.

HierfĂŒr können Sie die Merkmale unserer Vision nutzen. Wir unterscheiden bessere Helligkeit als Farben. Ein Video ist eine Reihe von aufeinanderfolgenden Bildern, die sich im Laufe der Zeit wiederholen. Es gibt kleine Unterschiede zwischen benachbarten Bildern derselben Szene. DarĂŒber hinaus enthĂ€lt jeder Rahmen viele Bereiche, die dieselbe (oder eine Ă€hnliche) Farbe verwenden.

Farbe, Helligkeit und unsere Augen


Unsere Augen reagieren empfindlicher auf Helligkeit als auf Farbe. Sie können sich von diesem Bild ĂŒberzeugen.



Wenn Sie in der linken BildhÀlfte nicht sehen, dass die Farben der Quadrate A und B tatsÀchlich gleich sind, ist dies normal. Unser Gehirn lÀsst uns mehr auf Hell-Dunkel als auf Farbe achten. Auf der rechten Seite zwischen den markierten Quadraten befindet sich ein Jumper der gleichen Farbe - daher können wir (d. H. Unser Gehirn) leicht feststellen, dass tatsÀchlich die gleiche Farbe vorhanden ist.
Schauen wir uns (vereinfacht) an, wie unsere Augen funktionieren. Das Auge ist ein komplexes Organ, das aus vielen Teilen besteht. Am meisten interessieren uns jedoch Zapfen und StÀbchen. Das Auge enthÀlt etwa 120 Millionen StÀbchen und 6 Millionen Zapfen.

Betrachten Sie die Wahrnehmung von Farbe und Helligkeit als separate Funktionen bestimmter Teile des Auges (in der Tat ist alles etwas komplizierter, aber wir werden es vereinfachen). Stabzellen sind hauptsĂ€chlich fĂŒr die Helligkeit verantwortlich, wĂ€hrend Zapfenzellen fĂŒr die Farbe verantwortlich sind. Je nach enthaltenem Pigment werden die Zapfen in drei Typen unterteilt: S-Zapfen (blau), M-Zapfen (grĂŒn) und L-Zapfen (rot).

Da wir viel mehr StĂ€bchen (Helligkeit) als Zapfen (Farbe) haben, können wir schließen, dass wir die ÜbergĂ€nge zwischen Dunkelheit und Licht besser unterscheiden können als Farben.



Kontrastempfindlichkeitsfunktionen


Forscher der experimentellen Psychologie und vieler anderer Gebiete haben viele Theorien des menschlichen Sehens entwickelt. Und eine von ihnen heißt Kontrastempfindlichkeitsfunktionen . Sie sind mit rĂ€umlicher und zeitlicher Beleuchtung verbunden. Kurz gesagt, es geht darum, wie viele Änderungen erforderlich sind, bevor der Beobachter sie sieht. Beachten Sie den Plural des Wortes "Funktion". Dies liegt an der Tatsache, dass wir die Empfindlichkeitsfunktionen messen können, um nicht nur Schwarzweißbilder, sondern auch Farbkontraste zu erzeugen. Die Ergebnisse dieser Experimente zeigen, dass unsere Augen in den meisten FĂ€llen empfindlicher auf Helligkeit als auf Farbe reagieren.
Da bekannt ist, dass wir empfindlicher auf die Bildhelligkeit reagieren, können Sie versuchen, diese Tatsache zu nutzen.

Farbmodell


Wir haben ein bisschen herausgefunden, wie man mit Farbbildern unter Verwendung des RGB-Schemas arbeitet. Es gibt noch andere Modelle. Es gibt ein Modell, das Luminanz von Farbe trennt und als YCbCr bekannt ist . Übrigens gibt es andere Modelle, die eine Ă€hnliche Trennung vornehmen, aber wir werden nur dieses betrachten.

In diesem Farbmodell ist Y eine Darstellung der Helligkeit und es werden zwei FarbkanÀle verwendet: Cb (gesÀttigtes Blau) und Cr (gesÀttigtes Rot). YCbCr kann aus RGB erhalten werden, ebenso ist die inverse Transformation möglich. Mit diesem Modell können wir Bilder in Farbe erstellen, wie wir unten sehen:

ycbcr

Konvertieren Sie zwischen YCbCr und RGB


Jemand wird EinwĂ€nde erheben: Wie ist es möglich, alle Farben zu erhalten, wenn GrĂŒn nicht verwendet wird?

Konvertieren Sie RGB in YCbCr, um diese Frage zu beantworten. Wir verwenden die im BT.601-Standard ĂŒbernommenen Koeffizienten, die von der ITU-R- Einheit empfohlen wurden. Dieses GerĂ€t definiert digitale Videostandards. Zum Beispiel: Was ist 4K? Wie sollten die Bildrate, die Auflösung und das Farbmodell sein?

Zuerst berechnen wir die Helligkeit. Wir verwenden die von der ITU vorgeschlagenen Konstanten und ersetzen die RGB-Werte.

Y = 0,299 R + 0,587 G + 0,114 B

Nachdem wir die Helligkeit erhalten haben, werden wir die blauen und roten Farben trennen:

Cb = 0,564 ( B - Y )

Cr = 0,713 ( R - Y )

Und wir können mit YCbCr auch zurĂŒckkonvertieren und sogar grĂŒn werden:

R = Y + 1,402 Cr

B = Y + 1,772 Cb

G = Y - 0,344 Cb - 0,714 Cr

In der Regel verwenden Bildschirme (Monitore, Fernseher, Bildschirme usw.) nur das RGB-Modell. Dieses Modell kann jedoch auf verschiedene Arten organisiert werden:



Farb-Downsampling


Wenn das Bild als eine Kombination aus Helligkeit und Farbe dargestellt wird, können wir eine höhere Empfindlichkeit des menschlichen visuellen Systems fĂŒr Helligkeit als fĂŒr Farbe verwenden, wenn wir Informationen selektiv löschen. Farb-Downsampling ist eine Methode zum Codieren von Bildern mit einer niedrigeren Auflösung fĂŒr Farbe als fĂŒr Helligkeit.

ycbcr


Wie akzeptabel ist es, die Farbauflösung zu reduzieren?! Es stellt sich heraus, dass es bereits einige Schemata gibt, die beschreiben, wie Auflösung und ZusammenfĂŒhrung zu handhaben sind (Endfarbe = Y + Cb + Cr).

Diese Schemata sind als Unterabtastsysteme bekannt und werden in Form eines 3-fachen VerhĂ€ltnisses ausgedrĂŒckt - a : x : y , das die Anzahl der Abtastungen von Luminanz- und Farbdifferenzsignalen bestimmt.

a - horizontale Standardabtastung (normalerweise gleich 4)
x - die Anzahl der Farbmuster in der ersten Pixelreihe (horizontale Auflösung relativ zu a )
y ist die Anzahl der FarbmusterÀnderungen zwischen der ersten und der zweiten Pixelreihe.
Die Ausnahme ist 4 : 1 : 0 , wodurch ein Farbmuster in jedem 4 × 4-Helligkeitsauflösungsblock bereitgestellt wird.
GĂ€ngige Schemata, die in modernen Codecs verwendet werden:

  • 4 : 4 : 4 (ohne Downsampling)
  • 4 : 2 : 2
  • 4 : 1 : 1
  • 4 : 2 : 0
  • 4 : 1 : 0
  • 3 : 1 : 1

YCbCr 4: 2: 0 - ZusammenfĂŒhrungsbeispiel


Hier ist das kombinierte Bildfragment mit YCbCr 4: 2: 0. Bitte beachten Sie, dass wir nur 12 Bit pro Pixel ausgeben.

YCbCr 4:2:0
So sieht dasselbe Bild aus, das von den Haupttypen der Farbunterabtastung codiert wurde. Die erste Zeile ist das endgĂŒltige YCbCr, die untere Zeile zeigt die Farbauflösung. Aufgrund des geringen QualitĂ€tsverlustes sehr gute Ergebnisse.



Denken Sie daran, wir haben 278 GB Speicherplatz fĂŒr eine stundenlange Videodatei mit einer Auflösung von 720p und 30 Bildern pro Sekunde gezĂ€hlt. Wenn wir YCbCr 4: 2: 0 verwenden, wird diese GrĂ¶ĂŸe um die HĂ€lfte reduziert - 139 GB. Bisher ist es noch weit von einem akzeptablen Ergebnis entfernt.

Sie können das YCbCr-Histogramm selbst mit FFmpeg abrufen. In diesem Bild ĂŒberwiegt Blau gegenĂŒber Rot, was auf dem Histogramm selbst deutlich erkennbar ist.

Farbe, Helligkeit, Farbskala - VideoĂŒberprĂŒfung


Es wird empfohlen, dieses tolle Video anzuschauen. Dies erklĂ€rt, was Helligkeit ist, und tatsĂ€chlich sind alle Punkte in Bezug auf Helligkeit und Farbe darĂŒber angeordnet.

Rahmentypen


Wir ziehen weiter. Versuchen wir, die Redundanz rechtzeitig zu beseitigen. Aber zuerst definieren wir eine grundlegende Terminologie. Angenommen, wir haben einen Film mit 30 Bildern pro Sekunde. Hier sind die ersten 4 Bilder:

ball 1ball 2ball 3ball 4

Wir können viele Wiederholungen in Frames sehen: zum Beispiel einen blauen Hintergrund, der sich nicht von Frame zu Frame Àndert. Um dieses Problem zu lösen, können wir sie abstrakt als drei Rahmentypen klassifizieren.

I-Frame ( I ntro Frame)


Der I-Frame (Referenzframe, SchlĂŒsselframe, interner Frame) ist autonom. UnabhĂ€ngig davon, was visualisiert werden muss, ist der I-Frame tatsĂ€chlich eine statische Fotografie. Der erste Frame ist normalerweise ein I-Frame, aber wir werden regelmĂ€ĂŸig I-Frames weit entfernt von den ersten Frames beobachten.

ball 1

P-Frame ( P redicted Frame)


Der P-Frame (Predicted Frame) nutzt die Tatsache, dass fast immer das aktuelle Bild mit dem vorherigen Frame abgespielt werden kann. Zum Beispiel ist im zweiten Frame die einzige Änderung der VorwĂ€rtsball. Wir können Frame 2 erhalten, indem wir nur Frame 1 leicht modifizieren und nur den Unterschied zwischen diesen Frames verwenden. Informationen zum Erstellen von Frame 2 finden Sie in Frame 1, der vorangestellt ist.

ball 1 ← 1

B-Frame ( B i-prÀdiktiver Frame)


Was ist mit Links, die nicht nur auf frĂŒhere, sondern auch auf zukĂŒnftige Frames verweisen, um eine noch bessere Komprimierung zu erzielen? Dies ist im Grunde ein B-Frame (bidirektionaler Frame).

ball 1 ← 1 → ball 3

ZwischenrĂŒckzug


Diese Rahmentypen werden verwendet, um die beste Komprimierung zu erzielen. Wir werden im nĂ€chsten Abschnitt diskutieren, wie dies geschieht. In der Zwischenzeit stellen wir fest, dass der I-Frame im Hinblick auf den Speicher am „teuersten“ ist, der P-Frame viel billiger ist, aber der B-Frame die rentabelste Option fĂŒr Video ist.



Zeitliche Redundanz (Inter-Frame-Vorhersage)


Schauen wir uns an, welche Möglichkeiten wir haben, um Zeitwiederholungen zu minimieren. Diese Art der Redundanz kann mit den Methoden der gegenseitigen Vorhersage gelöst werden.

Wir werden versuchen, so wenig Bits wie möglich fĂŒr die Codierung einer Folge von Frames 0 und 1 zu verwenden.



Wir können subtrahieren , nur Bild 1 von Bild 0 subtrahieren. Wir erhalten Bild 1, wir verwenden nur die Differenz zwischen diesem und dem vorherigen Bild, in der Tat codieren wir nur den resultierenden Rest.



Aber was ist, wenn ich Ihnen sage, dass es eine noch bessere Methode gibt, die noch weniger Bits verwendet? Lassen Sie uns zuerst Frame 0 in ein klares Raster von Blöcken aufteilen. Und dann versuchen wir, die Blöcke von Frame 0 mit Frame 1 zu vergleichen. Mit anderen Worten, wir bewerten die Bewegung zwischen Frames.
Aus Wikipedia - Bewegungskompensation blockieren

Die Blockbewegungskompensation unterteilt den aktuellen Frame in disjunkte Blöcke, und der Bewegungskompensationsvektor gibt den Ursprung der Blöcke an (ein hĂ€ufiges MissverstĂ€ndnis ist, dass der vorherige Frame in disjunkte Blöcke unterteilt ist und Bewegungskompensationsvektoren angeben, wohin diese Blöcke gehen. TatsĂ€chlich wird jedoch nicht der vorherige analysiert Der Rahmen und der nĂ€chste zeigen nicht, wo sich die Blöcke bewegen, sondern wo sie herkommen. Typischerweise ĂŒberlappen sich die Quellblöcke im Quellrahmen. Einige Videokomprimierungsalgorithmen erfassen den aktuellen Frame aus Teilen nicht nur eines, sondern mehrerer zuvor ĂŒbertragener Frames.


Im Auswertungsprozess sehen wir, dass sich der Ball von ( x = 0, y = 25) nach ( x = 6, y = 26) bewegt hat. Die Werte von x und y bestimmen den Bewegungsvektor. Ein weiterer Schritt, den wir unternehmen können, um die Bits zu speichern, besteht darin, nur die Differenz der Bewegungsvektoren zwischen der letzten Position des Blocks und der vorhergesagten Position zu codieren, sodass der endgĂŒltige Bewegungsvektor (x = 6-0 = 6, y = 26-25 = 1) ist.

In einer realen Situation wĂŒrde dieser Ball in n Blöcke unterteilt, aber dies Ă€ndert nichts am Wesen der Sache.

Objekte im Rahmen bewegen sich in drei Dimensionen. Wenn sich der Ball also bewegt, kann er optisch kleiner werden (oder mehr, wenn er sich in Richtung des Betrachters bewegt). Es ist normal, dass es keine perfekte Übereinstimmung zwischen Blöcken gibt. Hier ist eine kombinierte Ansicht unserer EinschĂ€tzung und des realen Bildes.



Wir sehen jedoch, dass bei Anwendung der BewegungsschĂ€tzung die Daten fĂŒr die Codierung merklich geringer sind als bei Verwendung der einfacheren Methode zur Berechnung des Deltas zwischen Frames.



Wie die eigentliche Bewegungskompensation aussehen wird


Diese Technik gilt sofort fĂŒr alle Blöcke. Oft wird unser bedingter Bewegungsball in mehrere Blöcke gleichzeitig unterteilt.



, Jupyter .

ffmpeg .

( )   ffmpeg

Intel Video Pro Analyzer ( , , ).



( )


, .



. .



I-. , . . , , - .



, . , .



. ( ), . , .



, ffmpeg. ffmpeg.

()   ffmpeg

Intel Video Pro Analyzer ( , 10 , ).

Intra-Prediction Intel Video Pro Analyzer



:






Lesen Sie auch den Blog
EDISON Unternehmen:


20 Bibliotheken fĂŒr
spektakulÀre iOS-Anwendung

Source: https://habr.com/ru/post/de481418/


All Articles