Ist es möglich, einen h.264-Stream irgendwo zu schneiden, ohne ihn neu zu kodieren?

Ist es möglich, einen h.264-Stream irgendwo zu schneiden, ohne ihn neu zu kodieren?

Hinweis: Ich habe ursprünglich fälschlicherweise einen h.264-Stream mit der gebräuchlicheren Bezeichnung MP4-Datei bezeichnet, tut mir leid


Ich bin mir der üblichen Notwendigkeit bewusst, mit dem Aufteilen eines h.264 bei einem Keyframe zu beginnen, sodass das resultierende Video mit einem Keyframe beginnt, aber ich frage mich, was es mit der Streamstruktur/-spezifikation auf sich hat, das dies bewirkt?

Muss als fester Parameter der gesamten Datei alle X Frames ein Keyframe auftreten, oder kann es ein variables Intervall zwischen den Keyframes geben? Wenn der Player nur Frames so nimmt, wie sie erscheinen, und das Ganze zeichnet (Keyframe) oder einen Teil davon aktualisiert (kein Keyframe), warum ist dann das Keyframe-Intervall wichtig?

Wenn das Intervall keine Rolle spielt und wir bei Frame 87 eines Streams mit Keyframes alle 100 schneiden möchten, könnten wir dann nicht die 86 Präambelframes verwenden, um einen neuen Keyframe für die neue Datei zu berechnen, die verbleibenden 12 Nicht-Keyframes aus der Originaldatei einfügen, um zum nächsten Keyframe zu gelangen, dann zum nächsten Original-Keyframe (Frame 100) und von dort aus weitermachen?

Die Datei endet beispielsweise mit „neuer Schlüssel, 12 originale Nicht-Schlüssel, originaler Schlüssel, 99 originale Nicht-Schlüssel, originaler Schlüssel …“

Antwort1

Keyframes können jederzeit auftreten. Ich kann keine Quelle finden, aber stellen Sie sich einen Film mit vielen Zwischensequenzen vor. Sie möchten, dass ein Keyframe das erste Bild nach jeder drastischen Szenenänderung ist, um die Qualität des Videos zu erhalten. Andernfalls endet es mit einem Rauschen, wenn der Videokompressor versucht, eine neue Szene mit vielen „Delta“-Änderungen gegenüber der vorherigen Szene zu erstellen.

Für einen normalen Stream mag eine konsistente Keyframe-Zeiteinstellung akzeptabel sein, für den Endinhalt lässt sich jedoch durch einen Keyframe an der Grenze eines Szenenwechsels eine bessere Qualität erzielen.

AusKeyframes, InterFrame und Videokomprimierung

Der Keyframe (i-Frame) ist das vollständige Bild in einem Video. Nachfolgende Frames, die Delta-Frames, enthalten nur die Informationen, die sich geändert haben. Keyframes erscheinen mehrmals in einem Stream.je nachdem, wie es erstellt oder gestreamt wird.

Es ist wirklicheinstellbar und hängt von Ihren Anforderungen an Qualität und Bitrate ab.

DerStandardmäßig wird bei MP4 alle 250 Frames ein Keyframe angezeigt.(also etwa alle 10 Sekunden). Das ist schlecht für das Streaming, da es schwieriger ist, die Auflösung zu ändern.Youtube verwendet ein Keyframe-Intervall von 2 Sekunden.

Es gibt auch einige Methoden, um nur iframes (Keyframes) zu extrahieren, wie erwähnt vonBogoToBogo: THUMBNAILS (IFRAME / SZENENWECHSEL) – 2020

i-Frame-Miniaturansichten

Der folgende Befehl erstellt für jedes I-Frame ein Miniaturbild mit den Namen yi01.png, yi02.jpg, yi03.png...yi116

ffmpeg -i yosemiteA.mp4 -f image2 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr yi%03d.png
  1. select='eq(pict_type,PICT_TYPE_I)': extrahiert I-Frame-Bild
  2. vsync: Video-Synchronisierungsmethode.
  3. vfr: variable Bildrate.

verwandte Informationen