Suche mpeg/avi-frames in linux

Ich habe möglicherweise ein ungewöhnliches Problem für diese Site; Neben anderen Aufgaben verwalte ich das drahtlose Netzwerk für einen großen Unternehmenscampus. Als Teil eines Upgrades unserer drahtlosen Zugangspunkte habe ich eine Metallhalterung verwendet, um einen AP auf einer Schiene etwa 10 Fuß über dem Boden zu montieren. Bei der Montage war der untere Teil des Access-Points parallel zum Boden.

Eine Woche später bemerkten unsere Verkabelungstechniker, dass jemand den AP um etwa 70 Grad nach oben gebogen hatte; Angesichts der Stärke der Halterung erforderte dies viel Kraft. Wir haben eine Überwachungskamera etwa 90 Fuß von diesem AP entfernt, aber der relevante Bereich, der mir wichtig ist, macht etwa 3 % des Bildbereichs der Kamera aus.

Aufgrund der Unschärfe und des kleinen Bereichs im Video sagte unser Sicherheitsteam, dass es etwa 30 Arbeitsstunden dauern würde, das Video zu durchsuchen (eine Person sieht es sich 3,5 Tage lang an … aufgrund von Einschränkungen bei der Wiedergabe kann sie währenddessen nicht hineinzoomen schneller Vorlauf); als solche waren sie nicht daran interessiert, weiter zu gehen.

FRAGE :

Es scheint, als gäbe es eine Möglichkeit, eine Liste mit möglichen Zeitfenstern im Video zu erstellen, bei denen sich dieser 3-%-Bereich für einen bestimmten Zeitraum drastisch vom Normalwert geändert hat ... sagen wir mindestens 20 Sekunden.

TBH, die Klammer ist nur 30 $; Da unser altmodischer Sicherheitsmann jedoch schwor, dass es nicht automatisiert werden könne, nahm ich es als Neugierde, um zu sehen, ob das stimmt. Offensichtlich gibt es kommerzielle Lösungen ... Ich suche nach "kostenlos" in Linux.

Die Datei wäre etwa 6 GB groß. Gibt es eine Linux-CLI-Lösung für dieses Problem? Ich muss nur die Zeiten, die wir betrachten, auf etwas Überschaubares reduzieren. Selbst wenn ich eine Python-Bildanalysebibliothek wie OpenCV-python verwenden müsste , ist das eine Möglichkeit, aber ich hoffe, so etwas (ab)zuverwenden ffmpegfür diesen Zweck. Wenn es ein solches Tool nicht gibt, welche Open-CV- Funktion wäre für diesen Job am besten geeignet?

Antworten (1)

FFMPEG verfügt nicht wirklich über die Tools zur Bewegungserkennung, die sofort einsatzbereit sind. Sie können das Zuschneiden natürlich mit dem Zuschneidefilter durchführen : -vf crop=w:h:x:ywo w:hist die Größe Ihres Zuschneidebereichs und x:yseine Koordinaten im Originalbild. Ihr ffmpeg-Skript könnte also so aussehen:

ffmpeg -i input.avi -c:v libx264 -crf 20 -vf crop=123:45:67:89 output.mp4

Dann könnten Sie einen Frame der Ausgabe finden, der keine Bewegung enthält, ihn in ein Standbild exportieren, ihn invertieren und mit Overlay wieder zum Video hinzufügen, sodass nur Teile von Frames angezeigt werden, die sich unterscheiden. Verwenden Sie dann den Blackdetect -Filter, um schwarze Frames zu finden. Dann könnten Sie diese Teile des Videos mit etwas Shell-Fu löschen und den Rest schließlich zu einem Clip verketten. Wütend.

…oder Sie könnten openCV verwenden. Hier ist ein fertiges Skript, das die Bewegungserkennung durchführt: https://github.com/RobinDavid/Motion-detection-OpenCV

wenn du sagst -vf crop=w:h:x:y, redest du von ffmpegbeschneiden , richtig? Wenn Sie einen "leeren Rahmen" sagen, bin ich mir nicht sicher, wie ich das in einer Videodatei finden würde ... Ich denke, das von Ihnen erwähnte Github-Projekt könnte der richtige Weg sein
"Leerer Rahmen" bedeutet einen Rahmen, in dem nichts passiert. Ja, verwenden Sie das Skript, es sei denn, Sie möchten wirklich eine Lernübung.