OpenCV 提供了 cv2.VideoCapture和VideoWriter来做视频的读写操作
先定义下要打开的视频文件,初始化个指定大小的窗口用来显示视频
import cv2
videoFilename = r"F:\我的文档\video\testvideo\road.MP4"
cv2.namedWindow('video',0)
cv2.resizeWindow('video',1024,768)
可以通过get方法获取视频的一些参数:帧率,宽高等等信息
videoCapture = cv2.VideoCapture(videoFilename)
fps = videoCapture.get(cv2.CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fourccode = videoCapture.get(cv2.CAP_PROP_FOURCC)
print("openstate:{}".format(videoCapture.isOpened()))
print("fps:{}, size:{}, fourcc:{}".format(fps, size, fourccode))
VideoCapture 构造函数如果传入文件名,则打开的视频文件,传入序号,则打开的是本机连接的摄像头,比如写0就可以打开电脑自带的视频设备
通过isOpened可以知道打开视频是否成功,当成功后,就可以通过read方法读取一帧一帧的数据
success, frame = videoCapture.read()
需要指定要写入的文件名,编码,帧速率,大小
videoWriter = cv2.VideoWriter('out/road.avi', cv2.VideoWriter_fourcc('M','P','4','2'),
fps,size)
# 未压缩的YUV,.avi格式: cv2.VideoWriter_fourcc('I','4','2','0')
# MPEG-1编码类型,.avi格式: cv2.VideoWriter_fourcc('P','I','M','1')
# MPEG-4编码类型,.avi格式: cv2.VideoWriter_fourcc('X','V','I','D')
# MPEG-4.2编码类型,.avi格式: cv2.VideoWriter_fourcc('M','P','4','2')
# FLASH,.flv格式: cv2.VideoWriter_fourcc('F','L','V','1')
# Ogg Vorbis,.ogv格式: cv2.VideoWriter_fourcc('T','H','E','O')
我们这儿是要将读取的视频写入到另外一个视频文件,所以fps,size用从视频文件读取的值
调用write方法,讲一帧数据写入到视频文件中
videoWriter.write(frame)
写个循环,将读取到的视频帧全部写入到另外一个文件中去,同时也显示出来
success, frame = videoCapture.read()
while success:
videoWriter.write(frame)
success, frame = videoCapture.read()
if success:
cv2.imshow('video', frame)
pressKey = cv2.waitKey(1)
if pressKey == 27:
break
播放视频。。
本地文件夹中也有了新生成的文件,每次执行会覆盖
可以通过调整cv2.waitKey(1)的参数,来控制播放的速度。。
将
videoCapture = cv2.VideoCapture(videoFilename)
改为
videoCapture = cv2.VideoCapture(0)
笔记本买了后没打开过的摄像头开启了。。。。
还木有坏。。。。
完了,进行收尾工作。。
videoWriter.release()
videoCapture.release()
cv2.destroyAllWindows()