ffmpeg gepufferte Aufnahme

bräuchte einen Rat um das Problem zu lösen

ffmpeg empfängt den Nonstop-Live-Stream (RTMP-Quelle) von den Eingangstoren der Kameraüberwachung

Nachdem der Auslöser ausgelöst wurde (Tor/Tür ist offen), muss ich die 30-Sekunden-Videodatei erstellen, die auf der Festplatte gespeichert ist

Ich meine diese 30 Sekunden als 25 Sekunden Video vor dem Auslösen und etwa 5 Sekunden nach dem Auslösen

Die ähnliche Idee wird im ffmpeg-Wiki ( https://trac.ffmpeg.org/wiki/Capture/Lightning ) behandelt, aber ich kann dies in keiner Befehlskonfiguration zum Laufen bringen

Ich habe auch mit Filtern, Puffern usw. gespielt, aber immer noch kein Glück ;-((

alle mögliche Ideen würden geschätzt

Was hast du mit Filtern probiert?
Ich habe mit setpts oder itsoffset gespielt, aber das Problem ist, dass ich vermeiden möchte, dass das Video verarbeitet wird, da der empfangene rtmp-Stream in h264 direkt bei jeder Verarbeitung gespeichert werden sollte (nur eine Idee, wie es funktionieren sollte).

Antworten (1)

Was Sie tun können, ist, ein leeres 30-Sekunden-Segment vor dem Kamerastream hinzuzufügen und dann die Methode im ffmpeg-Wiki zu verwenden.

Grundlegende Vorlage ist

ffmpeg -f lavfi -i color=black:WxH:r=FPS:d=30 -i camera_input \
       -filter_complex "[0][1]concat[v]" -map "[v]" StreamingOutput

WxHsollte auf die Auflösung und FPSdie Framerate der Kamera eingestellt sein.

Und der 2. Befehl, der 5 Sekunden nach dem Trigger ausgeführt wird.

ffmpeg -i Streamingoutput -t 30 snippet.mp4
Das Problem bei dieser Antwort ist ffmpeg, dass concat nicht 30 Sekunden wartet, die Verkettung ziemlich schnell abgeschlossen wird und dies fehlschlägt. Gibt es eine Möglichkeit, es zu zwingen, es pro Sekunde zu verketten?