import cv2 # Create a video capture object, in this case we are reading the video from a file vid_capture = cv2.VideoCapture('videos/test.avi') # Reading an Image Sequence # vid_capture = cv2.VideoCapture('Resources/Image_sequence/Cars%04d.jpg') if not vid_capture.isOpened(): print("Error opening the video file") # Read fps and frame count else: # Get frame rate information # You can replace 5 with CAP_PROP_FPS as well, they are enumerations fps = vid_capture.get(5) print('Frames per second : ', fps, 'FPS') # Get frame count # You can replace 7 with CAP_PROP_FRAME_COUNT as well, they are enumerations frame_count = vid_capture.get(7) print('Frame count : ', frame_count) while vid_capture.isOpened(): # vid_capture.read() methods returns a tuple, first element is a bool # and the second is frame ret, frame = vid_capture.read() if ret: cv2.imshow('Frame', frame) # 20 is in milliseconds, try to increase the value, say 50 and observe key = cv2.waitKey(20) if key == ord('q'): break else: break # Release the video capture object vid_capture.release() cv2.destroyAllWindows()
These are the main functions in OpenCV video I/O that we are going to discuss in this blog post:
- cv2.VideoCapture – Creates a video capture object, which would help stream or display the video.
- cv2.VideoWriter – Saves the output video to a directory.
- In addition, we also discuss other needed functions such as cv2.imshow(), cv2.waitKey() and the get() method which is used to read the video metadata such as frame height, width, fps etc.
import cv2 url = "http://YourIp/video" vid_capture = cv2.VideoCapture(url) # Obtain frame size information frame_width = int(vid_capture.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(vid_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) frame_size = (frame_width, frame_height) fps = 20 # Initialize video writer object output = cv2.VideoWriter('videos/output_video_from_file.avi', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 20, frame_size) while vid_capture.isOpened(): # vid_capture.read() methods returns a tuple, first element is a bool # and the second is frame ret, frame = vid_capture.read() if not ret: print('Stream disconnected') break # Write the frame to the output files output.write(frame) cv2.imshow('frame', frame) # 30 is in milliseconds, try to increase the value, say 50 and observe if cv2.waitKey(30) & 0xFF == ord('q'): break output.release() vid_capture.release() cv2.destroyAllWindows()