Gibt es einen automatisierten Prozess, um ein Video in Abschnitte mit Bewegung aufzuteilen?

Ich habe einige Videodateien mit einem ziemlich statischen Hintergrund und gelegentlichen Bewegungen in der Szene. Ich würde das Filmmaterial gerne auf die Abschnitte mit Bewegung reduzieren. Da es mehrere Stunden Filmmaterial gibt, würde ich es lieber nicht von Hand machen.

Ich hoffte, ein Skript oder Dienstprogramm zu finden, in das ich die Medien leiten und Segmente mit Bewegung auf der anderen Seite herausbekommen könnte. Meine begrenzte Suche hat nichts vorgeschlagen, was dies tun könnte, es sei denn, ich kann VLC dazu bringen, seinen Bewegungsfilter irgendwie zu verwenden, um Dinge zu markieren.

Ich würde lieber ein kostenloses oder FOS-System verwenden, da ich billig bin. Wenn das keine Option ist, dann überlege ich zu zahlen. Ich bin froh, dass die Software auf Windows oder Linux basiert. Ich würde lieber nicht alle Frames als Standbilder ausgeben, ein Diff ausführen und neu codieren, aber wenn das der einzige Weg ist, kann ich wahrscheinlich damit arbeiten. Ich kann in C, C++, Ruby und ein paar anderen Skriptsprachen programmieren, wenn es nötig ist. Es macht mir nichts aus, etwas Zeit damit zu verbringen, etwas zu schreiben, wenn nichts verfügbar ist und andere es hilfreich finden könnten. Ich habe jedoch keinen Hintergrund in der Medienverarbeitung. Obwohl ich die Konzepte verstehe, wäre ich eher verloren, wenn es darum geht, Bibliotheken als Ausgangspunkt auszuwählen und so weiter.

Das Video zeigt einen Vogelhäuschen mit einer Hecke und einem Zaun dahinter. Es gibt einige langsame Schattenbewegungen, wenn sich die Sonne bewegt, aber ansonsten scheint der Hintergrund stabil zu sein. Ich denke, dass etwa 5 % des Rahmens von der Bewegung ausgefüllt werden, die ich aufnehmen muss. Ich erwähne das nur, weil ich in der Vergangenheit die ZoneMinder-Bewegungserfassung eingerichtet habe, sodass ich mit den Filtereinstellungen vertraut bin.

Auch wenn mir jemand keine vollständige Antwort geben kann, wäre ich dankbar für einige Hinweise, Vorschläge und Schlüsselwörter, die mir helfen, dies voranzutreiben.

Ich würde mit der Erforschung von opencv beginnen. Vielleicht gibt es eine Open-Source-Anwendung, die es verwendet und bereits tut, was Sie wollen.
Ich denke auch, dass imageMagick Videos verarbeiten kann und eine Diff-Funktion enthält, die auch Bilder vergleicht. Vielleicht können Sie anweisen, Frames zu verwerfen, bei denen der Unterschied 0 ist, und Frames beizubehalten, wenn es einen tatsächlichen Unterschied gibt
Ein bisschen Klicken führte jedoch zu etwas hilfreichem „Schauen Sie hier, um Algorithmen wie Bewegungsextraktion für Ihren Videostream zu finden.“ docs.opencv.org/doc/tutorials/video/table_of_content_video/… Leider scheint es so zu sein noch kein Tutorial da. Ich werde sehen, ob ich etwas mit OpenCV finden oder einrichten kann, und dann vielleicht dort einige Notizen hinzufügen. Vielen Dank für den Vorschlag.

Antworten (2)

Es gibt eine ähnliche Frage im Stapelüberlauf

https://stackoverflow.com/questions/28320004/detect-if-video-file-contains-movement

Abgesehen von OpenCV schlagen sie auch SimpleCV http://simplecv.org/ und "Motion" http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome vor

Wenn Sie eine Ablehnung hinzufügen, fügen Sie zumindest einen Kommentar zum Grund hinzu. Wie kann ich diese Antwort sonst verbessern?

Ich habe es nicht getestet, aber ich glaube, dass es möglich wäre, es mit dem ausgewählten Szenenwechselfilter von zu tun ffmpeg. Sie können Folgendes versuchen:

ffmpeg -i input.ext -filter:v "select=gt(scene\,0.2)" -c:v copy output.ext

Beachten Sie, dass Sie das Komma maskieren müssen, obwohl der Wert in Anführungszeichen steht. Mit dem zweiten Parameter müssen Sie spielen, um zu bestimmen, was Sie als „Bewegung“ betrachten.

Ich habe die Idee von: https://www.bogotobogo.com/FFMpeg/ffmpeg_thumbnails_select_scene_iframe.php