Skip to content

Instantly share code, notes, and snippets.

@keithweaver
Created March 9, 2017 15:01
Show Gist options
  • Save keithweaver/4b16d3f05456171c1af1f1300ebd0f12 to your computer and use it in GitHub Desktop.
Save keithweaver/4b16d3f05456171c1af1f1300ebd0f12 to your computer and use it in GitHub Desktop.
Stream and save video in Python with OpenCV
# For more info: http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html
import cv2
import numpy as np
import os
FILE_OUTPUT = 'output.avi'
# Checks and deletes the output file
# You cant have a existing file or it will through an error
if os.path.isfile(FILE_OUTPUT):
os.remove(FILE_OUTPUT)
# Playing video from file:
# cap = cv2.VideoCapture('vtest.avi')
# Capturing video from webcam:
cap = cv2.VideoCapture(0)
currentFrame = 0
# Get current width of frame
width = cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH) # float
# Get current height of frame
height = cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT) # float
# Define the codec and create VideoWriter object
fourcc = cv2.cv.CV_FOURCC(*'X264')
out = cv2.VideoWriter(FILE_OUTPUT,fourcc, 20.0, (int(width),int(height)))
# while(True):
while(cap.isOpened()):
# Capture frame-by-frame
ret, frame = cap.read()
if ret == True:
# Handles the mirroring of the current frame
frame = cv2.flip(frame,1)
# Saves for video
out.write(frame)
# Display the resulting frame
cv2.imshow('frame',frame)
else:
break
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# To stop duplicate images
currentFrame += 1
# When everything done, release the capture
cap.release()
out.release()
cv2.destroyAllWindows()
# Potential Error:
# OpenCV: Cannot Use FaceTime HD Kamera
# OpenCV: camera failed to properly initialize!
# Segmentation fault: 11
#
# Solution:
# I solved this by restarting my computer.
# http://stackoverflow.com/questions/40719136/opencv-cannot-use-facetime/42678644#42678644
@scandav
Copy link

scandav commented Jun 21, 2022

For those using cv2 v4+, I solved using

width = self.video.get(cv2.CAP_PROP_FRAME_WIDTH)  
height = self.video.get(cv2.CAP_PROP_FRAME_HEIGHT)

fourcc = cv2.VideoWriter.fourcc(*'X264')

as explained here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment