1、视频录制
获取的视频帧,不论是从视频中获取的还是从多媒体文件中获取的,拿到的都是原始的数据,但如果要保存到多媒体文件中,数据帧需要是压缩后的数据,所以在VideoWrite进行write操作时除了将数据输出到文件中,还需要编码,将原始数据压缩之后写入文件中去。所以在写入时需要编码格式、帧率(一秒钟存多少帧)、分辨率(视频的宽和高是多少)。
通常写入数据是把数据写入缓存,在从缓存写入文件系统中,release也是类似此功能,释放资源,同时将缓存中的数据强制输出到磁盘中
import cv2
#创建fourcc
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
#创建videowriter对象为写多媒体文件,参数:输出文件,fourcc:多媒体文件格式,帧率,分辨率,分辨率需要和采集数据的摄像头的分辨率保持一致
vw = cv2.VideoWriter('/Users/lililiee/Desktop/out.mp4',fourcc,25,(1280,720)) #这里的文件名如果是avi就不会报错
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)
#获取视频设备
cap = cv2.VideoCapture(0) #数字0代表从摄像头采集数据
while cap.isOpened(): #如果摄像头被打开,则进入循环,否则摄像头无法正常打开,进入循环无意义
#从摄像头获取视频帧
ret,frame = cap.read() #返回两个值,第一个为状态值,读到帧为true。第二个值为视频帧
if ret==True: #读到了帧则展示,否则break
#将视频帧在窗口显示
cv2.imshow('video',frame)
#在展示时重新将窗口大小进行调整,设为指定大小
cv2.resizeWindow('video', 640, 360)
vw.write(frame) #将帧写入到多媒体文件
#等待键盘事件,如果为,退出
key = cv2.waitKey(30) #这里的数字可以理解为帧与帧之间的间隔,如果一个视频是25帧,间隔设置为40以内,比如30会比较正常,否则会慢速播放
if(key & 0xFF == ord('q')):
break
else:
break
#释放VideoCapture视频设备
cap.release()
#释放多媒体资源
vw.release()
#释放窗口
cv2.destroyAllWindows()