Gibt es ein vorhandenes Videoformat, das Metadaten pro Frame aufzeichnet?

Ich möchte ein Video mit dynamischen Metadaten streamen. Ich weiß, ich könnte das Video und die Metadaten einfach separat streamen, aber im Idealfall möchte ich, dass sie dauerhaft gebunden sind.

Gibt es ein vorhandenes Protokoll / Codierung / Format, das dies tut? Ich könnte die Daten in jedem Frame mit Steganographie speichern, aber das ist keine ideale Lösung und ziemlich hacky.

Antworten (2)

Wenn die Bildrate nicht zu hoch ist und Sie einem Bild einen genauen Zeitstempel zuordnen können, wäre es am einfachsten, die Metadaten als Textuntertitel hinzuzufügen.

Die andere Option besteht darin, die Metadaten als Standardheader in einem .mp4ähnlichen Containerformat zu muxen. .mp4kann in mehrere Fragmente zerlegt werden, jedes mit seinem eigenen Header, und theoretisch kann dies pro Frame erfolgen. Wenn Sie dies jedoch für mehr als ein paar Frames tun, ist dies in Bezug auf Dateigröße und Leistung äußerst ineffizient. Eine Variation dieser Methode wäre, jeden Frame als Bild (z. B. JEPG) zu extrahieren und seine Metadaten zu setzen.

Eine weitere Option ist die Verwendung von Stenografie ohne jegliches Hacken. Sie codieren einfach die Metadaten in einen separaten Stream, der mit dem Hauptvideostream zeitstempelsynchronisiert ist. Die meisten modernen Containerformate, einschließlich .mp4, können mehrere Videostreams im selben Container aufnehmen (z. B. können Sie den codierten Metadatenstream als denselben Inhalt, aber in einer anderen Sprache bezeichnen).

An Untertitel-Streams habe ich auch gedacht. Stellen Sie sicher, dass Sie es als nicht standardmäßig markieren, oder fügen Sie einen leeren Untertitel-Stream als ersten Sub-Stream hinzu, damit Spieler, die Ihr benutzerdefiniertes Sub-Format nicht kennen, es nicht als Text anzeigen.
ffmpeg unterscheidet zwischen Untertitel- und anderen Datenströmen. zB gibt es Dinge wie RTP-Metadaten in einigen Videodateien, und es ist ein separater Metadaten-Stream im mp4-Container. Je nachdem, was Sie brauchen, können Sie möglicherweise einfach einen benutzerdefinierten Datenstrom verwenden, der in mp4 oder mkv gemuxt ist.

Ich bin mir nicht sicher, wie dies in eine Streaming-Strategie passt, aber das DPX-Dateiformat enthält Metadaten pro Frame (möglicherweise sehr viele davon). Dieser Wikipedia- Artikel enthält die grundlegenden Informationen.

Mir ist auch nicht klar, was Sie mit "dauerhaft gebunden" meinen. Im AVI-Dateicontainer steht das „I“ für „Interleaved“, wobei sich Video- und Audiopakete (grob) in der Datei abwechseln. Dies gilt für fast alle Containerformate. Die Streams können getrennt werden, aber sie koexistieren nativ in einem Meta-Stream.