Search code examples
python-2.7opencvvideo-capturevideo-processing

Can not Read or Play a Video in OpenCV+Python using VideoCapture


import cv2
import numpy as np

cap = cv2.VideoCapture('traffic.avi')

retval, frame = cap.read()

print retval

================ RESTART: J:\Python For DIP\traffic_video.py ================
False
>>> 

The Value of retval is always False, which means the video is not read by the command. It must be True to read frames. I don't know what to do. However when I use my default webcam it turns to be True. I tried many videos and the same problem appears. Note: I have installed the ffmpeg correctly.

Note: This is not the full code, in this step I am only validating cap.read() either True or False


Solution

  • This method is guaranteed 100%

    first of all check your version of OpenCV, say for instance 2.4.11. you can check it by typing the following commands in your Python Shell:

    >>> from cv2 import __version__
    >>> __version__
    '2.4.11'
    >>> 
    

    Then go to C:\opencv\build\x86\vc12\bin and copy opencv_ffmpeg2411.dll. Finally go to root directory of Python ex: C:\Python27 and paste opencv_ffmpeg2411.dll in it

    check the name of the file opencv_ffmpeg2411.dll, whether the version of opencv is written or not, if not do the following opencv_ffmpeg(version of your opencv without dots).dll

    After that create a new Python file and copy this code and paste it loading your own video

    import numpy as np
    import cv2
    
    # Capture video from file
    cap = cv2.VideoCapture('your video')
    
    while True:
    
        ret, frame = cap.read()
    
        if ret == True:
    
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
            cv2.imshow('frame',gray)
    
    
            if cv2.waitKey(30) & 0xFF == ord('q'):
                break
    
        else:
            break
    
    cap.release()
    cv2.destroyAllWindows()
    

    you will have an output video for example like this: Result