Also habe ich dieses Tutorial befolgt, aber es scheint nichts zu tun. Einfach nichts. Es wartet einige Sekunden und schließt das Programm. Was ist los mit diesem Code?
import cv2
vidcap = cv2.VideoCapture('Compton.mp4')
success,image = vidcap.read()
count = 0
success = True
while success:
success,image = vidcap.read()
cv2.imwrite("frame%d.jpg" % count, image) # save frame as JPEG file
if cv2.waitKey(10) == 27: # exit if Escape is hit
break
count += 1
Auch in den Kommentaren heißt es, dass dies die Frames auf 1000 begrenzt? Warum?
EDIT: Ich habe es success = True
zuerst versucht, aber das hat nicht geholfen. Es wurde nur ein Bild mit 0 Byte erstellt.
python
python-2.7
opencv
GShocked
quelle
quelle
success
?True
oderFalse
?print success
irgendwo ein hinzu.success
; Wenn es falsch ist, bedeutet dies, dass das Lesen des Videos aus irgendeinem Grund fehlgeschlagen ist. Sie müssen das Bit zuerst zum Laufen bringen.brew install opencv --python27 --ffmpeg
Wenn Sie eine andere Version von Python verwenden, müssen Sie diese in Ihre Version ändern.Antworten:
Laden Sie dieses Video von hier herunter, damit wir dieselbe Videodatei für den Test haben. Stellen Sie sicher, dass sich diese mp4-Datei im selben Verzeichnis wie Ihr Python-Code befindet. Stellen Sie dann auch sicher, dass Sie den Python-Interpreter aus demselben Verzeichnis ausführen.
Ändern Sie dann den Code, ein Graben
waitKey
, der auch ohne Fenster Zeit verschwendet und die Tastaturereignisse nicht erfassen kann. Außerdem drucken wir densuccess
Wert, um sicherzustellen, dass die Frames erfolgreich gelesen werden.Wie geht das
quelle
Read a new frame: False
Um diese Frage (& Antwort von @ user2700065) für etwas andere Fälle zu erweitern, wenn jemand nicht jeden Frame extrahieren möchte, sondern Frame jede Sekunde extrahieren möchte. Ein 1-minütiges Video liefert also 60 Bilder.
quelle
opencv-2.4.9
, also anstattcv2.CAP_PROP_POS_MSEC
ich musstecv2.cv.CAP_PROP_POS_MSEC
count = count + 5
cv2.imwrite()
am Anfang der Schleife keine geben, da Siecv2.imread()
vor der Schleife aufgerufen haben?Dies ist eine Optimierung der vorherigen Antwort für Python 3.x von @GShocked. Ich würde sie im Kommentar veröffentlichen, habe aber nicht genug Ruf
quelle
Dies ist eine Funktion, mit der die meisten Videoformate in die Anzahl der im Video enthaltenen Frames konvertiert werden. Es funktioniert weiter
Python3
mitOpenCV 3+
Es unterstützt
.mts
und normale Dateien wie.mp4
und.avi
. Versucht und getestet auf.mts
Dateien. Klappt wunderbar.quelle
Nach vielen Recherchen zum Konvertieren von Frames in Videos habe ich diese Funktion erstellt. Ich hoffe, dies hilft. Dafür benötigen wir opencv:
Ändern Sie den Wert von fps (Frames pro Sekunde), den Eingabeordnerpfad und den Ausgabeordnerpfad entsprechend Ihren lokalen Speicherorten
quelle
Die vorherigen Antworten haben den ersten Frame verloren. Und es wird schön sein, die Bilder in einem Ordner zu speichern.
Übrigens können Sie die Framerate per VLC überprüfen . Gehen Sie zu Windows -> Medieninformationen -> Codec-Details
quelle
cv.CAP_PROP_POS_AVI_RATIO
, aber ich weiß nicht wie. tnxDieser Code extrahiert Frames aus dem Video und speichert die Frames im JPG-Format
quelle
Ich verwende Python über die Spyder-Software von Anaconda. Unter Verwendung des Originalcodes, der in der Frage dieses Threads von @Gshocked aufgeführt ist, funktioniert der Code nicht (der Python liest die mp4-Datei nicht). Also habe ich OpenCV 3.2 heruntergeladen und "opencv_ffmpeg320.dll" und "opencv_ffmpeg320_64.dll" aus dem Ordner "bin" kopiert. Ich habe diese beiden DLL-Dateien in Anacondas Ordner "DLLs" eingefügt.
Anaconda hat auch einen "pckgs" -Ordner ... Ich habe den gesamten "OpenCV 3.2" -Ordner, den ich heruntergeladen habe, kopiert und in den Anaconda-Ordner "pckgs" eingefügt.
Schließlich hat Anaconda einen Ordner "Library", der einen Unterordner "bin" enthält. Ich habe die Dateien "opencv_ffmpeg320.dll" und "opencv_ffmpeg320_64.dll" in diesen Ordner eingefügt.
Nach dem Schließen und Neustarten von Spyder funktionierte der Code. Ich bin mir nicht sicher, welche der drei Methoden funktioniert hat, und ich bin zu faul, um zurück zu gehen und es herauszufinden. Aber es funktioniert so, Prost!
quelle
Diese Funktion extrahiert Bilder aus Videos mit 1 fps. Außerdem identifiziert sie das letzte Bild und hört auch auf zu lesen:
quelle
Das folgende Skript extrahiert alle halbe Sekunde Frames aller Videos im Ordner. (Funktioniert mit Python 3.7)
quelle