Das voreingestellte Bild der Videokompression beinhaltet unerwünschte Video-Artefakte, wie Pixel- und Blockbildung im Bild. Damit ist jedoch die Komplexität, die bei der Komprimierung von Videoinhalten tatsächlich entsteht, jedoch gering. Insbesondere übersieht dieser einen faszinierenden Prozess mit der Bezeichnung InterFrame, der Keyframes und DeltaFrames beinhaltet, um Inhalte intelligent und unbemerkt zu komprimieren.

In diesem Artikel beschreiben wir ihnen diesen Prozess im Detail und stellen ihnen auch Best Practices und ideale Encodereinstellungen, die Sie auf ihr Live-Streaming bei IBM Cloud Video anwenden können. Ein Großteil dieser spezifischen Ratschläge bezieht sich auf Streaming aufgrund adaptiver Bitraten.

Video Frames verstehen.

Es gibt viele Begriffe und Aspekte der Streaming-Technologie, die als selbstverständlich angesehen werden können. Wenn jemand als Sender reift, lohnt es sich, Elemente genauer zu verstehen, um zu erfahren, warum ein Prozess durchgeführt wird und welche Einstellungen optimal sind.

Zum Beispiel ist ein Keyframe etwas, das einige weniger Sender bereits erwähnt haben oder die Einstellung in einem Encoder wie Wirecast gesehen haben, ohne genau zu wissen, was es ist und wie nützlich dieser Prozess für das Streaming ist. Ein Keyframe ist ein wichtiges Element, aber eigentlich nur ein Teil eines längeren Prozesses, der hilft, die für Video benötigte Bandbreite zu reduzieren. Um diese Beziehung zu verstehen, muss man zuerst Videobilder verstehen.

Ausgehend von einem hohen Niveau wird höchstwahrscheinlich klar, dass Videoinhalte aus einer Reihe von Einzelbildern bestehen. Normalerweise als FPS (Frames pro Sekunde) bezeichnet, ist jedes Bild ein Standbild, das bei der Wiedergabe in Folge ein bewegtes Bild erzeugt. So bedeutet der erstellte Inhalt, der eine FPS von 30 verwendet, dass es 30 „Standbilder“ gibt, die für jede Sekunde des Videos abgespielt werden.

Eine Gelegenheit zum Komprimieren.

In einem durchschnittlichen Video, wenn jemand 90 aufeinanderfolgende Bilder aufnehmen und verteilen würde, sehen Sie viele Elemente, die ziemlich identisch sind. Wenn zum Beispiel jemand spicht, während er neben einer bewegungslosen Pflanze steht, ist es unwahrscheinlich, dass sich die Informationen über diese Pflanze ändern. Infolgedessen ist das eine Menge verschwendete Bandbreite, die nur verwendet wird, um zu vermitteln, dass sich etwas nicht geändert hat.

Bei der Suche nach effektiven Möglichkeiten zur Komprimierung von Videoinhalten wurde das Framemanagement daher zu einem der Eckpfeiler. Wenn sich diese Anlage im Beispiel also nicht ändern wird, warum sollten Sie nicht einfach die gleichen Elemente in einigen der nachfolgenden Frames verwenden, um den Platz zu reduzieren?

Aus dieser Erkenntnis entstand die Idee der InterFrame-Prognose. Dies ist eine Videokompressionstechnik, die Frames in Makroblöcke unterteilt und anschließend nach Redundanzen zwischen den Blöcken sucht. Dieser Prozess funktioniert durch die Verwendung von Keyframes, auch bekannt als i-Frame oder Intra-Frame und Delta-Frames, die nur Änderungen im Bild speichern, um redundante Informationen zu reduzieren. Diese Framesammlung wird oft mit dem eher nicht-technisch klingenden Namen einer „Gruppe von Bildern“, kurz GOP genannt. Ein Videocodec, der zum Kodieren oder Dekodieren eines digitalen Datenstroms verwendet wird, verfügt alle über eine Art InterFrame-Management. H.264, MPEG-2 und MPEG-4 verwenden alle einen Drei-Frames-Ansatz, der Keyframes, p-Frames und b-Frames beinhaltet.

Was ist ein Keyframe?

Der Keyframe (i-frame) ist das Volllbild eines Bildes in einem Video. Nachfolgende Frames, die Delta-Frames, enthalten nur die Informationen, die sich geändert haben. Keyframes werden innerhalb eines Streams mehrfach angezeigt, je nachdem, wie Sie erstellt oder gestreamt wurden.

Wenn jemand bei Google „Keyframe“ eingibt, würde dieser wahrscheinlich einige Ergebnisse im Zusammenhang mit Animation und Videobearbeitung finden. In diesem Fall verwenden wir das Wort Keyframe in Bezug auf die Videokompression und deren Beziehung zu Delta-Frames.

Wie P-Frames funktionieren.

Auch bekannt als prädiktive oder prognostizierte Frames, folgt das p-Frame einem anderen Frame und enthält nur einen Teil des Bildes in einem Video. Aus diesem Grund wird es als Delta-Frame klassifiziert. P-Frames schauen rückwärts zu einem früheren P-Frame oder Keyframe (i-Frame) für Redundanzen. Die Menge des im P-Frame dargestellten Bildes hängt von der Menge der zwischen den Frames enthaltenen neuen Informationen ab.

Wenn jemand beispielsweise mit der Kamera vor einem statischen Hintergrund spricht, wird er wahrscheinlich nur Informationen über seine Bewegung enthalten. Wenn jemand jedoch während des Kameraschwenks über ein Feld läuft, erhält er mit jedem P-Frame viel mehr Informationen, um sowohl seine Bewegung als auch den sich ändernden Hintergrund anzupassen.

Was sind B-Frames und wie unterscheiden sie sich von P-Frames?

Auch bekannt als bidirektionale prognostizierte Frames, folgen die B-Frames einem anderen Frame und enthalten nur einen Teil des Bildes in einem Video. Die Menge des im B-Frame enthaltenen Bildes hängt von der Menge der neuen Informationen zwischen den Frames ab.

Im Gegensatz zu P-Frames können B-Frames bei Redundanzen rück- und vorwärts zu einem vorherigen oder späteren P-Frame oder Keyframe (i-Frame) schauen. Dies macht B-Frames effizienter als P-Frames, da sie eher Redundanzen finden. B-Frames werden jedoch nicht verwendet, wenn das Kodierungsprofil innerhalb des Encoders auf Grundlinie gesetzt ist. Das bedeutet, dass der Encoder auf ein Codierungsprofil oberhalb der Basislinie eingestellt werden muss, wie z.B. „main“ oder „high“.

Wie wird ein Keyframe eingestellt?

Bei der Videokompression für Live-Streaming wird im Encoder ein Keyframe eingestellt. Dies wird durch eine Option konfiguriert, die manchmal als „Keyframe-Intervall“ im Encoder bezeichnet wird.

Das Keyframe-Intervall steuert, wie oft ein Keyframe (i-Frame) im Video erstellt wird. Je höher das Keyframe-Intervall, desto mehr Kompression wird auf den Inhalt angewendet, was jedoch keinen spürbaren Qualitätsverlust bedeutet. Ein Beispiel für die Funktionsweise von Keyframe-Intervallen: Wenn ihr Intervall auf alle 2 Sekunden eingestellt ist und hre Bildrate 30 Bilder pro Sekunde beträgt, würde dies bedeuten, dass etwa alle 60 Bilder ein Keyframe erzeugt wird.

Der Begriff „Keyframe-Intervall“ ist nicht universell und die meisten Encoder haben dafür einen eigenen Begriff. Adobe Flash Media Live Encoder (FMLE) und vMix zum Beispiel verwenden den Begriff „Keyframe-Frequenz“, um diesen Prozess zu beschreiben. Andere Programme und Dienste können das Intervall als „GOP-Größe“ oder „GOP-Länge“ bezeichnen und gehen dabei auf die Abkürzung „Group of Pictures“ zurück.

Auswahl eines Keyframe-Intervalls auf Encoder-Ebene.

Was die Einstellung eines Keyframe-Intervalls betrifft, so variiert es von Encoder zu Encoder.

Bei FMLE wird diese Option, die als „Keyframe Frequency“ bezeichnet wird, im Software-Encoder durch Anklicken des Schraubenschlüssel-Symbols rechts neben dem Format gefunden.

In Wirecast wird dies im Menü Encoder Presets eingestellt und die Option nennt sich „Key frame every“. Wirecast ist anders, da das Intervall tatsächlich in Frames angegeben wird. Bei einer Übertragung mit 30 Bildern pro Sekunde würde die Einstellung des „Schlüsselbildes alle 60 Bilder“ also ungefähr ein Keyframe-Intervall von 2 Sekunden ergeben, da Sie 30 Bilder pro Sekunden haben.

Für den vMix-Encoder muss man zuerst auf das Zahnradsymbol in der Nähe von Streaming klicken, was die Streaming-Einstelllungen öffnet. In der Nähe der Qualitätsoption befindet sich hier ein weiteres Zahnradsymbol und durch Klicken darauf öffnet sich ein Menü, das die Möglichkeit hat, die „Keyframe-Frequenz“ zu ändern.

In der Open Broadcast Software (OBS) kann für Versionen nach v0.55b das Keyframe-Intervall im Bereich Einstellungen unter Erweitert eingestellt werden. Für Versionen von OBS vor v0.542b ist es nicht sehr klar, wie man das Keyframe-Intervall ändert, aber dies ist eigentlich eine Komponente von Settings. Dort gehen Sie zu Erweitert und wählen anschließend „benutzerdefinierte x264 Encodereinstellungen“. In dieses Feld muss die folgende Zeichenkette eingegeben werden: „keyint=XX“, wobei XX die Anzahl der Einzelbilder ist, bis ein Schlüsselbild ausgelöst wird. Wie bei Wirecast, wenn ein Keyframe-Intervall von 2 Sekunden gewünscht wird und der FPS 30 Sekunden beträgt, geben Sie Folgendes ein: „keyint=60“.

Bei Xsplit ist das Keyframe-Intervall Bestandteil der Kanaleigenschaften. Unter dem Bereich Video Enconding findet man eine Auflistung mitd er Aufschrift „Keyframe Interval (secs)“. Ganz rechts davon befindet sich ein Zahnradsymbol. Wenn Sie auf den Gang klicken, wird ein Pop-Up-Fenster „Video Encoding Setup“ geöffnet. Dies ermöglicht es jemandem, das Keyframe-Intervall in Sekundenschnelle festzulegen.

Beziehung zwishcen Keyframes und Bitraten.

Die Laufleistung in dieser Erklärung kann variieren, da Encoder Bitraten und Keyframes unterschiedlich verwalten. Bei Verwendung eines Encoders wie Wirecast könnte man feststellen, dass die Übertragung von Personen, die vor einem ruhigen Hintegrund sprechen, eine „höhere Qualität“ hat, als die Übertragung von Personen, die vor einem beweglichen Hintergrund auf und ab springen. Dies kann bei Verwendung der gleichen genauen durchschnittlichen Bitrate und des Keyframe-Intervalls zwischen ihnen reproduziert werden. Der Grund dafür liegt zum Teil darin, dass die Delta-Frames eine Menge Informationen enthalten, die im Sprungbeispiel ausgetauscht werden müssen. Es gibt sehr wenig Redundanz, was bedeutet, dass viel mehr Daten auf jedem Delta-Frame übertragen werden müssen.

Wenn Sie jedoch einen Encoder wie Wirecast haben, versucht dieser sein Bestes, um den Stream um die gewählte durchschnittliche Bitrate zu halten. Die zusätzliche Bandbreite, die für die in den Delta-Frames enthaltenen Zusatzinformationen benötigt wird, führt folglich dazu, dass die Qualität reduziert wird, um zu versuchen, die durchschnittliche Bitrate auf dem gleichen Niveau zu halten.

Was ist die beste Einstellung für ein Keyframe-Intervall?

Es gab noch nie einen Industriestandard, obwohl 10 Sekunden oft als gutes Keyframe-Intervall erwähnt werden, obwohl das für das Streaming nicht mehr empfohlen wird. Der Grund, warum es vorgeschlagen wurde, ist, dass der resultierende Inhalt für eine Standard 29,97 FPS-Datei so ansprechend ist, dass er eine einfache Navigation über einen Vorschau-Schieberegler unterstützt. Um mehr zu erklären, kann ein Player die Wiedergabe auf einem P-Frame oder B-Frame nicht starten. Wenn also jemand versuchte, zu einem Punkt zu navigieren, der 5 Sekunden im Feed war, würde er tatsächlich 5 Sekunden zurück zum nächsten Keyframe wechseln und die Wiedergabe starten. Dies galt als guter Kompromiss für einen geringeren Bandbreitenverbrauch, obwohl sich die DVD als Referenz für etwas viel kleineres als 10 Sekunden entschied.

Für Live-Streaming ist der empfohlene Pegel jedoch drastisch gesunken. Der Grund dafür ist das Aufkommen des adaptiven Bitraten-Streaming. Für diejenigen, die mit adaptivem Streaming nicht vertraut sind, ermöglicht diese Technologie einem Videoplayer, dynamisch zwischen verfügbaren Auflösungen und/oder Bitraten zu wechseln, je nachdem, was der Betrachter versucht zu sehen. So wird jemand mit einer langsameren Download-Geschwindigkeit eine Version mit niederigerer Bitrate erhalten, falls verfügbar. Andere Kriterien, wie die Größe des Wiedergabefensters, beeinflussen auch die angegebene Bitrate.

Echtes adaptives Streaming führt jedoch nicht nur beim ersten Laden des Videoinhalts zu dieser Überprüfung, sondern kann auch die Bitrate basierend auf Änderungen auf der Seite des Betrachters ändern. Wenn ein Betrachter beispielsweise auf seinem Smartphone aus der Reichweite eines Wi-Fi-Netzwerks herauskommt, beginnt dieser, seinen normalen Mobilfunkdienst zu nutzen, was zu einer langsameren Download-Geschwindigkeit führen kann. Infolgedessen könnte der Betrachter versuchen, Inhalte zu sehen, die im Vergleich zu ihrer Download-Geschwindigkeit zu hoch sind. Die adaptive Streaming-Technologie sollte diese Diskrepanz erkennen und die Umstellung auf eine andere Bitrate vornehmen.

Das Keyframe-Intervall tritt hier in Aktion, da dieser Switch beim nächsten Keyframe erfolgt. Wenn als jemand mit einem Intervall von 10 Sekunden sendet, bedeutet das, dass es bis zu 10 Sekunden dauern kann, bis sich die Bitrate und Auflösung ändern. Diese Zeitspanne bedeutet, dass der Inhalt auf der Seite des Betrachters zwischengespeichert werden kann, bevor die Änderung stattfindet, was zu einem Verlassen des Betrachters führen kann.

Aus diesem Grund wird empfohlen, das Keyframe-Intervall für Live-Streaming auf 2 Sekunden einzustellen. Dies führt zu einem Ergebnis, bei dem die Videospur die Bitraten oft effektiv ändern kann, bevor der Benutzer aufgrund einer Verschlechterung seiner Download-Geschwindigkeit eine Pufferung erfährt.

Was ist ein IDR-Frame?

Wir wiederholen uns an dieser Stelle, aber es lohnt sich, P- und B-frames zu verstehen und einen Crashkurs im adaptiven Streaming zu absolvieren, bevor man darüber spricht, was ein IDR-Frame oder Instantaneous Decode Refresh Frame ist. Dies sind eigentlich Keyframes und jedes Keyframe kann entweder IDR-basiert oder nicht IDR-basiert sein. Der Unterschied zwischen den beiden besteht darin, dass das IDR-basierte Keyframe als Hardstop arbeitet. Ein IDR-Frame verhindert, dass P- und B-Frames auf Frames verweisen, die vor dem IDR-Frame entstanden sind. Eine Nicht-IDR-Keyframe wird es diesen Frames ermöglichen, auf Redundanzen weiter zurückzublicken.

Auf Papier klingt ein Nicht-IDR-Keyframe ideal: Er kann die Dateigröße erheblich reduzieren, indem er eine viel größere Auswahl an Frames für Redundanzen betrachten kann. Leider treten bei der Navigation viele Probleme auf und die Funktion spielt beim adaptiven Streaming nicht gut ab. Nehmen wir für die Navigation an, dass jemand beginnt 6 Minuten lang in einem Stream zu schauen. Das wird zu Problemen führen, da die P- und B-Frames möglicherweise auf Informationen verweisen, auf die der Betrachter nie tatsächlich zugegriffen hat. Beim adaptiven Streaming kann ein ähnliches Problem auftreten, wenn Bitrate und Auflösung geändert werden. Dies liegt daran, dass die neue Auswahl auf Daten verweisen könnte, die der Betrachter in einer anderen Qualitätseinstellung betrachtet hat und nicht mehr parallel ist. Aus diesen Gründen wird immer empfohlen, Keyframes IDR-basiert zu erstellen.

Im Allgemeinen bieten Encoder entweder die Möglichkeit, IDR-basierte Keyframes ein- oder auszuschalten oder bieten diese Option gar nicht an. Für diejenigen Encoder, die keine Option bieten, ist es fast sicher, dass der Encoder so eingestellt ist, dass er nur IDR-Frames verwendet.

Sollte jemand eine „Auto“-Keyframe-Einstellung verwenden?

In Kürze: Nein!

Die automatischen Keyframe-Einstellungen sind im Prinzip ziemlich gut. Sie erzwingen manuell ein Keyframe während eines Szenenwechsels. Wenn Sie beispielsweise von einer PowerPoint-Folie zu einem Bild von jemandem wechseln, der vor einer Kamera spricht, wird ein neuer Keyframe erzwungen. Das ist wünschenswert, da die Delta-Frames nicht viel zu verarbeiten hätten und keine Redundanzen zwischen der PowerPoint-Folie und dem Bild der Kamera finden würden.

Leider funktioniert dieser Prozess mit einigen adaptiven Streaming-Technologien, insbesondere HLS, nicht. Der HLS-Prozess erfordert, dass die Keyframes vorhersehbar und synchron sind. Die Verwendung einer „auto“-Einstellung erzeugt variable Intervalle zwischen Keyframes. So kann beispielsweise die Zeit zwischen den Keyframes 7 Sekunden und später 2 Sekunden betragen, wenn ein Szenenwechsel schnell erfolgt.

Für die meisten Encoder bedeutet die Deaktivierung von „Auto Change“ oder „Szenenwechselerkennung“ oft nur die Angabe eines Keyframe-Intervalls. Wenn beispielsweise in OBS ein Keyframe-Intervall auf 0 Sekunden eingestellt ist, wird die Auto-Funktion aktiviert. Wenn Sie eine beliebige Zahl wie 1 oder 2 eingeben, wird die automatische Funktion deaktiviert.

Wenn der Encoder, wie Wirecast, eine Option für „Keyframe Alignment“ hat, sollte man wissen, dass dies nicht derselbe Prozess ist. Die Ausrichtung von Keyframes ist ein Prozess zur Erstellung spezifischer Zeitstempel und eignet sich am besten, um mehrere Bitraten, die der Sender über den Encoder sendet, synchron zu halten.

Perfektionierung der Keyframe-Strategie.

Mit dem Aufkommen der adaptiven Bitraten befindet sich die Branche an einem merkwürdigen Punkt, an dem es eine ziemlich klare Antwort auf bewährte Verfahren für Keyframes und Live-Streaming gibt. Diese Strategie beinhaltet:

  • Einstellen eines Keyframe-Intervalls auf ca. 2
  • Deaktivieren von „auto“-Keyframe-Funktionen
  • Verwendung von IDR-basierten Keyframes
  • Verwendung eines Kodierungsprofils, das höher als die Grundlinie ist, um B-Frames zu ermöglichen.

Diese Strategie ermöglicht eine einfache Navigation von Inhalten für die On-Demand-Anzeige nach einer Sendung, während gleichzeitig die Vorteile des Frame-Managements genutzt werden und die Bandbreite durch den Abbau von Redundanzen reduziert wird. Es unterstützt auch adaptives Bitrate-Streaming, ein wichtiges Element einer erfolgreichen Live-Übertragung und die Möglichkeit, Zuschauer mit langsameren Verbindungen zu unterstützen.

Falls Sie noch Fragen haben sollten, hinterlassen Sie uns unten einen Kommentar.

Vielen Dank für ihren Besuch.