尝试录制"时间真实";带有openCV的视频。录制视频片段时,速度似乎略有加快。如果我把计时器举到网络摄像头上,然后播放它,保存的视频每分钟快3-5秒。
如果我从网络摄像头录制1分钟,如何将保存的视频精确设置为1分钟?还是录制2分钟,以导出2分钟的视频?
import cv2
cap = cv2.VideoCapture(0)
fps = cap.get(cv2.CAP_PROP_FPS)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # float `width`
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) # float `height`
fourcc = cv2.VideoWriter_fourcc(*'XVID')
videoWriter = cv2.VideoWriter('MYPATH\video.avi', fourcc, fps, (int(width),int(height)))
while (True):
ret, frame = cap.read()
if ret:
cv2.imshow('video', frame)
videoWriter.write(frame)
if cv2.waitKey(1) == 27:
break
cap.release()
videoWriter.release()
cv2.destroyAllWindows()
我不知道为什么要修复它……但将forcc更改为fourcc=cv2.VideoWriter_fourcc(*'MP4V'(,然后将输出文件从.avi更改为.mp4解决了这个问题。
您的程序可能会因为while
循环中第16行的True
语句而写入额外的帧,然后通过以下方式更改该值以检查为条件ret
:
...
ret, frame = cap.read()
while (ret):
cv2.imshow('video', frame)
videoWriter.write(frame)
ret, frame = cap.read()
if cv2.waitKey(1) == 27:
break
cap.release()
videoWriter.release()
cv2.destroyAllWindows()