Wie kann ich Clips aus einem Streaming-Video-Feed nahezu in Echtzeit extrahieren?

Ein Kunde möchte, dass ich eine Software schreibe, vielleicht ffmpeg , die in Skripte verpackt ist, die einen Streaming-Video-Feed überwacht und Clips davon nahezu in Echtzeit kopiert und sie als eigenständige Videodateien liefert. Ich kann nicht warten, bis der Feed beendet ist und das Video vollständig als lokale Datei gespeichert ist, bevor ich die Clips kopiere. Auf der anderen Seite kann ich sagen, zehn Sekunden nach der Endzeit des Clips, bevor ich ihn liefere. Kann ich dies tun, ohne eine Videoverarbeitungssuite von Grund auf neu zu erstellen? Muss ich verlangen, dass der Streaming-Video-Feed ein bestimmtes Format hat?

Angenommen, der Video-Feed stammt von einer 1-stündigen Live-Veranstaltung. Irgendwann, vielleicht nach 5 Minuten, erhält meine Software möglicherweise den Befehl "Clip von 4 Minuten 30 Sekunden bis 6 Minuten 0 Sekunden, als Datei X.mpg speichern". Ich muss den Video-Feed anzapfen, 90 Sekunden Video kopieren und als Datei X.mpg speichern, etwa 7 Minuten lang. Die tatsächlichen Zeiten sind flexibler, ich möchte nur betonen, dass ich in der Lage sein muss, darauf zuzugreifen Der Streaming-Feed läuft, ich kann eine statische Videodatei kaum erwarten.

Ich weiß nicht einmal, ob Streaming-Videoformate diese Art von Operation zulassen. Wenn ein Empfänger den Feed auf die Disc schreibt, ist der Anfang der Datei eine legale Syntax, die ein normales Tool wie ffmpeg analysieren kann?

Ich kenne keine Details der Codierungsformate, aber ich verstehe, dass sie von Zeit zu Zeit Schlüsselbilder speichern und Zwischenvideobilder als Unterschiede zum Schlüsselbild und / oder den vorhergehenden Bildern gespeichert werden. Ist es wichtig zu wissen, wann die Keyframes hinzugefügt werden? Können normale Tools Videos nach dem letzten Schlüsselbild bis zu dem gerade geschriebenen Bild parsen, oder befinden sich die Daten in der gespeicherten Datei noch in einem temporären Zustand und sind daher noch nicht parsbar?

Oder ist das Kopieren von Videoclips aus Streaming-Videos eine schwierige Aufgabe, die eine anspruchsvollere Software als ffmpeg oder ähnliches erfordert, die mit Skripten verpackt ist?

Ratschläge zu bestimmten Formaten und Toolketten, die dies ermöglichen, sind willkommen.

Antworten (1)

Dies ist ziemlich einfach, wenn Sie in einem Streaming-Format wie Flash Video (FLV) oder MPEG-Transport Stream (MPEG-TS) speichern .

Angenommen, dies ist Ihr vollständiger Feed-Erfassungsbefehl

ffmpeg -i source {-transcoding options} localfile.flv

Sie können dann laufen

ffmpeg -ss 6:12 -i localfile.flv -t 1:05 -c copy extract.mp4

Idealerweise sollte der Stream nach 7:17 oder in der Nähe davon sein, wenn Sie den letzteren Befehl ausführen. Beachten Sie, dass die Inpoint-Suche nicht präzise ist, da der zweite Befehl nicht transkodiert. Das Extrahieren beginnt mit dem nächstgelegenen Keyframe vor dem angegebenen Inpoint.