ffmpeg Teile ohne Bewegung entfernen

15

Ich habe eine IP-Überwachungskamera (192.168.0.8), die RTSP-Inhalte über das Netzwerk übertragen kann.

Ich kann diesen (RAW-) Inhalt ohne Änderungen mit dem nächsten Befehl ffmpeg von meinem Computer speichern:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -acodec copy -vcodec copy test-raw.mp4

Ich kann die Größe auch spontan ändern:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -vf  "scale=640:-1" test640.mp4

Aber wie kann man nur das Video speichern, das nur Teile der Bewegungserkennung enthält?

Ich habe versucht , es zu bekommen gelöst FFmpegs mit Szenenwechsel Filter , aber kein Glück.

Mein Ziel ist es, eine gemeinsame Videoüberwachungslösung zu haben, die erkennt, wenn sich jemand in der Nähe der Kamera befindet, und diese in der Videodatei speichert. Ich verstehe, dass es unter Umständen nicht möglich ist, große Dateien direkt vom Stream aus zu speichern. Daher ist es in Ordnung, diese zunächst mit einem anderen Befehl ffmpeg zu verarbeiten und eine neue Videodatei zu generieren, die nur bewegungserkannte Teile enthält. Wenn Sie mir einen Rat geben können, was genau ich genauer recherchieren soll, bin ich Ihnen sehr dankbar.

Mein Kamerastream wird ohne Ton übertragen. So kann ich eine Reihe von Bildern aus dem Originalvideo generieren, dann die richtigen Bilder auswählen und dann ein neues Video aus den Bildern speichern.

rfedorov
quelle
Möchten Sie dieses System implementieren oder ein gebrauchsfertiges Produkt finden?
Woeitg
@WOEITG Ich brauche nur eine freie Arbeitslösung für Ubuntu 15.04+
rfedorov
Für Windows gibt es eine Software namens ispy, die Sie so einstellen können, dass sie bei Bewegungserkennung aufzeichnet. Da Sie eine Linux-Lösung anfordern, sollte zoneminder.com ein ähnliches Produkt sein. Leider habe ich keine direkte Antwort auf Ihre Frage, sondern +1, weil ich auch eine Antwort haben möchte
MyNameWouldGoHere

Antworten:

7

Ich mache genau das, was du gesagt hast, und speichere eine große Datei des Streams und verwende dann den select FFMPEG-Filter mit demscene Ausdruck verwenden, der die Ähnlichkeit aufeinanderfolgender Frames vergleicht: select=gt(scene\,0.003)zum Beispiel. Je höher die Zahl, desto mehr Änderungen zwischen den Bildern werden ignoriert. Je nach Art des Filmmaterials müssen Sie beim Schnelltest möglicherweise auf 0,00001-0,00005 sinken.

Wenn Sie das mit dem setpts Filter kombinieren, der die "Startzeit" von Videobildern ändert, erhalten Sie am Ende so etwas wie (für ein 25-fps-Video):

ffmpeg -i input.mp4 -vf "select=gt(scene\,0.003),setpts=N/(25*TB)" output.mp4

Allerdings können Sie diese Option nicht verwenden, -vcodec copywenn Sie Videofilter verwenden.

Shinmai
quelle