Writing a frame stream into video
In this recipe, you will learn how to capture frames from a USB camera live and simultaneously write frames into a video file using a specified video codec.
Getting ready
You need to have OpenCV 3.x installed with Python API support.
How to do it...
Here are the steps we need to execute in order to complete this recipe:
- First, we create a camera capture object, as in the previous recipes, and get the frame height and width:
import cv2 capture = cv2.VideoCapture(0) frame_width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) print('Frame width:', frame_width) print('Frame height:', frame_height)
- Create a video writer:
video = cv2.VideoWriter('../data/captured_video.avi', cv2.VideoWriter_fourcc(*'X264'), 25, (frame_width, frame_height))
- Then, in an infinite
while
loop, capture frames and write them using thevideo.write
method:
while True: has_frame, frame = capture.read() if not has_frame: print('Can\'t get frame') break video.write(frame) cv2.imshow('frame', frame) key = cv2.waitKey(3) if key == 27: print('Pressed Esc') break
- Release all created
VideoCapture
andVideoWriter
objects, and destroy the windows:
capture.release() writer.release() cv2.destroyAllWindows()
How it works...
Writing video is performed using the cv2.VideoWriter
class. The constructor takes the output video path, four characted code (FOURCC) specifying video code, desired frame rate and frame size. Examples of codec codes include P
, I
, M
, and 1
for MPEG-1; M
, J
, P
, and G
for motion-JPEG; X
, V
, I
, and D
for XVID MPEG-4; and H
, 2
, 6
, and 4
for H.264.