5

Ich habe eine Videoschulung als AVI-Dateien zur Verfügung gestellt. Die meisten Bildschirme werden als Folien dargestellt, auf denen sich ein Mauszeiger bewegt.So extrahieren Sie Folien aus einem Video mit Python

Ich möchte einen Screenshot der Folie automatisch zu erfassen, wenn der Bildschirm (ohne Berücksichtigung, wenn das Bild eine geringe Menge aufgrund der Mauszeiger verändert um zu bewegen.)

Ich möchte diese so tun, ich kann Fügen Sie die Bilder in ein Word- oder HTML-Dokument ein, dem ich Notizen hinzufügen kann, während ich lerne, während ich Screenshots mache, aber es ist sehr langsam und langwierig und der Kurs ist sehr lang (ungefähr 24 Stunden Gesamtspielzeit).

Ich kenne Python gut, bin aber unsicher, wie ich Stills aus einer Videodatei extrahieren würde und wie man dann noch mit einem anderen vergleicht, um zu sehen, wie unterschiedlich sie sind, um zu entscheiden, welche behalten und welche verwerfen.

Kann jemand vorschlagen, wie man das macht?

Antwort

10

Ein Tool wie ffmpeg eignet sich zum Extrahieren von Bildern aus einem Video. Aus dem Handbuch:

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg 

Dies wird eine Video-Frame pro Sekunde aus dem Video und ausgeben wird sie in Dateien extrahiert foo-001.jpeg genannt, foo-002.jpeg usw. Bilder neu skaliert werden, um die neuen BxH Werte passen.

Vergleichen Sie sie für Unterschiede möglicherweise dann durch PIL und/oder OpenCV.

EDIT: ich gerade festgestellt, dass es wahrscheinlich wäre effizient, nur den key frames (Intra-Frame) greifen, weil die auftreten, wenn eine drastische Veränderung in der Szene passiert. Eine schnelle google später haben wir das:

ffmpeg -i foo.avi -vsync 0 -vf select="eq(pict_type\,PICT_TYPE_I)" -s WxH -f image2 foo-%03d.jpeg 
+0

danke. Das zweite Beispiel, an dem ich nicht arbeiten konnte, sogar mit der neuesten Version von ffmpeg. Das erste Beispiel funktioniert für das, was ich brauche. – zio

5

Was Sie im Grunde wollen, ist Szenenerkennung. framedifferenceanalyzer ist ein pädagogischer Proof-of-Concept in Python, der genau dies tut und einen guten Ausgangspunkt für das Lernen des Problems selbst bieten sollte.

Für die Implementierung selbst ist ffmpeg das ideale Werkzeug für die Umwandlung eines Videos in eine Sequenz von Frames - ich würde wahrscheinlich nicht versuchen, diesen Teil in reinem Python zu tun.

Um den Unterschied zwischen den Bildern zu berechnen, könnte man ImageMagick verwenden (insbesondere das Werkzeug compare). Es gibt mehrere Python-Bindungen für ImageMagick, zum Beispiel oder magickwand, um nur zwei zu nennen.

Sie könnten auch OpenCV verwenden, um die Bildanalyse durchzuführen. OpenCV ist eine Bibliothek von leistungsstarken, qualitativ hochwertigen Computer Vision Algorithmen und wahrscheinlich eines der leistungsfähigsten Tools, die es gibt. Es setzt jedoch voraus, dass Sie ein gewisses Wissen über Computer Vision/Bildverarbeitung haben und schon eine gute Vorstellung davon haben, was Sie suchen.

+0

danke. Das Vergleichstool funktioniert gut für mich zusammen mit Imagemagick in Python. – zio

Verwandte Themen