读、写视频

简介: 【5月更文挑战第7天】读、写视频。

OpenCV的VideoCapture类和VideoWriter类提供了视频处理功能,支持各种格式的视频文件。
视频处理的基本操作步骤如下。
(1)将视频文件或者摄像头作为数据源来创建VideoCapture对象。
(2)调用VideoCapture对象的read()方法获取视频中的帧,每一帧都是一幅图像。
(3)调用VideoWriter对象的write()方法将帧写入视频文件,或者调用cv2.imshow()函数在窗口中显示帧(即播放视频)。
1.播放视频
OpenCV播放视频的实质是逐帧读取和显示帧图像,示例代码如下。

test2-5.py:播放视频

import cv2
vc=cv2.VideoCapture('test2-5.mp4') #创建VideoCapture对象
fps=vc.get(cv2.CAP_PROP_FPS) #读取视频帧速率
size=(vc.get(cv2.CAP_PROP_FRAME_HEIGHT),
vc.get(cv2.CAP_PROP_FRAME_WIDTH)) #读取视频大小
print('帧速率:',fps)
print('大小:',size)
success,frame=vc.read() #读第1帧
while success: #循环读视频帧,直到视频结束
cv2.imshow('myvideo',frame) #在窗口中显示帧图像
success,frame=vc.read() #读下一帧
key=cv2.waitKey(25) #延迟时间
if key==27: #按【Esc】键退出
break
vc.release() #关闭视频
2.将视频写入文件
将视频写入文件与播放视频类似,需要逐帧将视频写入文件,示例代码如下。

test2-6.py:将视频写入文件

import cv2
vc=cv2.VideoCapture('test2-5.mp4') #创建VideoCapture对象
fps=vc.get(cv2.CAP_PROP_FPS) #读取视频帧速率
size=(int(vc.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT))) #读取视频大小
vw=cv2.VideoWriter('test2-6out.avi', #设置保存视频的文件名
cv2.VideoWriter_fourcc('X','V','I','D'), #设置视频解码器格式
fps,size) #设置帧速率和大小
success,frame=vc.read() #读第1帧
while success: #循环读视频帧,直到视频结束
vw.write(frame) #将帧写入文件
success,frame=vc.read() #读下一帧
vc.release() #关闭视频
常用的解码器格式如下。
cv2.VideoWriter_fourcc('P','I','M','1'):XVID的MPEG-1编码格式,视频文件扩展名为.avi。
cv2.VideoWriter_fourcc('M','P','4','2'):Microsoft的MPEG-4编码格式,视频文件扩展名为.avi。
cv2.VideoWriter_fourcc('X','V','I','D'):XVID的MPEG-4编码格式,视频文件扩展名为.avi。
cv2.VideoWriter_fourcc('F','L','V','1'):XVID的MPEG-4编码格式,视频文件扩展名为.flv。

目录
相关文章
|
4天前
|
算法 前端开发
可以读通讯稿的组数
可以读通讯稿的组数
22 0
|
4天前
读操作
读操作
14 0
|
4天前
读取数值
读取数值。
21 5
|
4天前
|
关系型数据库 MySQL 数据库
【mysql】当前读和快照读,幻读和可重复读
【mysql】当前读和快照读,幻读和可重复读
89 0
|
7月前
|
数据库
数据库事务——快照读与当前读
数据库事务——快照读与当前读
105 0
|
SQL Java 数据库
【事务与并发】- 不同事务读取相同数据问题
在加了事务的接口中,不同的业务或者是出现并发的时候,发现了一些SQL读取问题,两个都被事务包裹的方法,各自是隔离的,如果一方的事务延时提交,就会导致另一方读取出来的数据相同,并不是修改后的数据。
|
程序员
读《第一次把事情做对》有感
上班的时候,领导在群里发了一个 PDF 书籍《第一次把事情做对》,被这个书籍名称吸引住了,因为作为程序员每天有开发新任务,解决旧任务的 BUG,第一次就把事情做的完全正确几乎不可能呀,觉得很有看的必要,这个简单读了一下,跟大家分享一些文中要点。
81 0
|
SQL Oracle 关系型数据库
ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析
在ORACLE数据库中有物理读(Physical Reads)、逻辑读(Logical Reads)、一致性读(Consistant Get)、当前模式读(DB Block Gets)等诸多概念,如果不理解或混淆这些概念的话,对你深入理解一些知识无疑是一个障碍,但是这些概念确实挺让让人犯晕的。
1173 0