opencv读取本地视频或摄像头并修改编码
读取本地视频
#打开视频
import cv2
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480) #设置读取时屏幕大小
cap=cv2.VideoCapture('./1.mp4')
#循环读取摄像头每一帧
#while cap.isOpenned();
while True:
#读一帧,返回标记,True表示读到数据,False表示没读到数据
flag,frame=cap.read()#frame一帧的意思
#根据flag做判断
if not flag:
break
#显示数据
cv2.imshow('video',frame)
key=cv2.waitKey(1)#双斜线,向下取整
#一个是视频是30帧,时间为1000/300取整
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
修改视频编码
VideoWriter_fourcc()常见的编码参数
cv2.VideoWriter_fourcc('M', 'P', '4', 'V') | MPEG-4编码 .mp4 可指定结果视频的大小 |
---|
cv2.VideoWriter_fourcc('X','2','6','4') | MPEG-4编码 .mp4 可指定结果视频的大小 |
cv2.VideoWriter_fourcc('I', '4', '2', '0') | 该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件 |
cv2.VideoWriter_fourcc('P', 'I', 'M', 'I') | 该参数是MPEG-1编码类型,文件名后缀为.avi |
cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') | 该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小 |
cv2.VideoWriter_fourcc('T', 'H', 'E', 'O') | 该参数是Ogg Vorbis,文件名后缀为.ogv |
cv2.VideoWriter_fourcc('F', 'L', 'V', '1') | 该参数是Flash视频,文件名后缀为.flv |
控制录制视频的码率和大小,按q键停止录制
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')#*表示解包,把mp4v分割
#fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V')#VideoWriter_fourcc为视频编解码
vw = cv2.VideoWriter('output.mp4',fourcc,30,(640,480))
while cap.isOpened():
ret,frame = cap.read()
if not ret:
print('出错了')
break
vw.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
vw.release()# 释放后数据从缓存到磁盘
cv2.destroyAllWindows()