2017-04-20 4 views
1

Ich versuche, Video aus der Datei Es scheint, wie Video zu lesen geöffnet ist, aber ich kann keine Frames lesen:Lese Video mit OpenCV Python

Python 2.7.11 (default, Jan 22 2016, 08:29:18) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import cv2 
>>> cv2.__version__ 
'3.0.0' 
>>> 
>>> video = cv2.VideoCapture('action-recognition-train/0000.avi') 
>>> video.isOpened() 
True 
>>> nFrames = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) 
>>> print "frame number: %s" %nFrames 
frame number: 166 
>>> fps = video.get(cv2.CAP_PROP_FPS) 
>>> print "FPS value: %s" %fps 
FPS value: 25.0 
>>> height = video.get(cv2.CAP_PROP_FRAME_HEIGHT) 
>>> width = video.get(cv2.CAP_PROP_FRAME_WIDTH) 
>>> print "video size:", height, 'x', width 
video size: 240.0 x 320.0 
>>> video.read() 
(False, None) 

von Web-Cam mit cv2.VideoCapture Lesung (0) ist in Ordnung

+0

Die Interna von Videodateien können sehr komplex sein - das Wissen, dass es sich um eine AVI-Datei handelt, beschränkt die Dinge nur ein wenig. Ich erkenne das Problem mit CV2 nicht (meine Video Erfahrung ist mit anderen Tools). Um jedoch anderen zu helfen, zeigen Sie vielleicht den Videostream-Typ "ffprobe" oder "mediainfo" an - oder verknüpfen Sie einfach die Quelle Ihres Videos, wenn es öffentlich ist. Wahrscheinlichkeiten sind, dass die spezifischen Codecs und andere Wahlen innerhalb der Videodatei die Sie betreffen, die Rahmen zu erhalten. –

Antwort

0

Eine Möglichkeit, es zu beheben, ist es, die Frames zu extrahieren und in einem Verzeichnis zu speichern. Man kann ffmpeg verwenden, um es zu tun. Nach der Installation von ffmpeg, folgendermaßen Befehl von Python:

os.system ("ffmpeg -i path_to_video -R1 Pfad_zu store/VIDEO_NAME% 4d.jpg")

Hier -r ist die Rate, bei der Frames sollen aus dem Video extrahiert werden. -r 1 bedeutet extrahieren Frames bei 1fps.

Nach dem Speichern der Videoframes können wir sie auflisten und die einzelnen Frames nach Bedarf verwenden.