用Python通过摄像头进行视频录制
☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░
用Python通过摄像头进行视频录制
一、引言
要实现摄像头录播摄像信息,通过Python有很多种实现方式,老猿在此介绍的是OpenCV-Python的实现方式。
很多人都知道OpenCV是个图像处理软件,但其实OpenCV也是可以处理视频的,因为视频是一帧帧图像构成的,OpenCV通过VideoCapture类可以实现视频文件或摄像头信息读取,通过VideoWriter可以写入视频。
二、VideoCapture读取视频
VideoCapture既支持从视频文件(.avi , .mpg格式)读取,也支持直接从摄像机(比如电脑自带摄像头)中读取。VideoCapture是一个类,要想获取视频需要先创建一个VideoCapture对象,VideoCapture对象的创建方式有以下三种:
- VideoCapture(deviceIndex,apiPreference = CAP_ANY):打开摄像头捕获视频。deviceIndex为摄像头序列号,打开缺省摄像头传0,apiPreference 为VideoCapture API后端标识符,老猿没有仔细研究,用缺省值即可
- VideoCapture(filename,apiPreference = CAP_ANY):打开filename指定的视频文件
- VideoCapture():创建一个对象,但没有确认捕获数据来源,需要通过VideoCapture其他方法来确认捕获数据来源
更多VideoCapture的内容请参考《opencv学习—VideoCapture 类基础知识》。
三、VideoWriter写入视频
VideoWriter是个视频写入类,用于将一帧帧图像写入视频文件中。VideoWriter共有五个构造方法,在本文重点推荐如下构造方法:
VideoWriter(filename, fourcc, fps, frameSize, bool isColor = True)
相关参数分别为视频文件名、视频编码格式、帧率、视频帧大小、是否彩色。
视频编码格式参数fourcc相关取值及含义主要有如下:
CV_FOURCC('I','4','2','0') :未压缩的YUV编码,4:2:0色度子采样。这种编码广泛兼容,但会产生大文件。文件扩展名应为.avi
CV_FOURCC('P','I','M','1') :MPEG-1编码。文件扩展名应为.avi。
CV_FOURCC('X','V','I','D') :相对较旧的MPEG-4编码。如果要限制结果视频的大小,这是一个很好的选择。文件扩展名应为.avi。
CV_FOURCC('M','P','4','V') :另一个相对较旧的MPEG-4编码。如果要限制结果视频的大小,这是一个很好的选择。文件扩展名应为.mp4
CV_FOURCC('X','2','6','4'): 一种比较新的MPEG-4编码方式。如果你想限制结果视频的大小,这可能是最好的选择。文件扩展名应为.mp4
CV_FOURCC('F','L','V','1') :此选项为Flash视频。文件扩展名应为.flv
以上表达方式结合Python函数的分配参数功能,可以将4个字母用分配参数(调用函数传递实参时使用星号来传递多个参数,相关介绍请参考《python基础教程 https://blog.csdn.net/laoyuanpython/category_9831699.html》的《 第5.3节 详说Python风格的函数分配参数 https://blog.csdn.net/LaoYuanPython/article/details/90670154》)的形参方式表示,如:CV_FOURCC('X','V','I','D')
可以写成CV_FOURCC(*'XVID')
四、捕获摄像头输入写入视频文件的代码案例
下面的代码打开缺省摄像头捕获视频,并将捕获内容显示为窗口视频,并写入视频文件中保存,按q终止退出:
import cv2 def captureVideoFromCamera():cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)WIDTH = 1920HEIGHT = 1920FILENAME = r'f:\video\myvideo.avi'FPS = 24cap.set(cv2.CAP_PROP_FPS, 24)# 建议使用XVID编码,图像质量和文件大小比较都兼顾的方案fourcc = cv2.VideoWriter_fourcc(*'XVID')out = cv2.VideoWriter(FILENAME, fourcc=fourcc, fps=FPS,frameSize=(WIDTH,HEIGHT))if not cap.isOpened():print("Cannot open camera")exit()while True:# 逐帧捕获ret, frame = cap.read()# 如果正确读取帧,ret为Trueif not ret:print("Can't receive frame (stream end?). Exiting ...")breakframe = cv2.flip(frame, 1) # 水平翻转ret = out.write(frame)gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 显示结果帧ecv2.imshow('frame', frame)if cv2.waitKey(1) == ord('q'): break# 完成所有操作后,释放捕获器out.release()cap.release()cv2.destroyAllWindows()captureVideoFromCamera()
五、小结
本文介绍了使用OpenCV-Python操作视频的方案,介绍了视频读取和写入类的构造方法,并提供了一个读取摄像头视频写入视频文件的方法,有助于大家理解OpenCV-Python的视频操作相关方法。但需要强调的是,OpenCV是一个强大的计算机图像处理库,而不是视频流编码器或者解码器,它的长项不在于此,只是提供了这种能力而已,如果要针对多媒体文件做复杂的处理,推荐的还是 FFMEPG 或Moviepy库。
各位大神,你用程序实现过视频录播吗?有什么更简单的方法吗?另外说OpenCV这种方式生成的视频文件限制文件大小为2G,老猿没有验证过,不知是否有大神愿意指教。
写博不易,如果觉得本文还有点作用,大家能否帮忙集齐10个赞、10条评论?
更多图像处理的介绍请参考专栏《OpenCV-Python图形图像处理 https://blog.csdn.net/laoyuanpython/category_9979286.html》和《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》相关文章。
如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询。
老猿Python, 跟老猿学Python!
☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░
用Python通过摄像头进行视频录制相关推荐
- opencv python 从摄像头获取视频、帧率、分辨率等属性设置和使用
opencv python 从摄像头获取视频.帧率.分辨率等属性设置和使用 文章目录: 1,为了获取视频,你应该创建一个 VideoCapture 对象.他的参数可以是设备的索引号,或者是一个视频文件 ...
- python读取摄像头或者视频文件、并在gui中实时显示_python:tkinter显示来自网络摄像头的视频并执行QR扫描...
我一直在尝试创建一个tkinter顶级窗口,用于流式传输视频表单摄像头并执行QR扫描.我从SO和another code得到这个QR扫描代码,它只是从网络摄像头更新图像,而不是在tkinter标签上流 ...
- flex摄像头连接视频录制
Flex提供了3个类实现与服务器端的通信:HTTPService,ReObject和WebService.另外,我们还可以根据外部中间插件来让Flex与服务器端进行通信,比如Blazeds(Lcds) ...
- android 摄像机程序,在APP当中调用Android系统摄像头进行视频录制
1.获得摄像头Feature和写文件的权限 android:name="android.hardware.camera2" android:required="true& ...
- 利用python制作制作直播视频录制、下载、播放
一.使用工具 python VLC #媒体播放工具 FFMPEG #媒体编辑工具 designer #界面UI制作工具 二.python库 import os import vlc from 脚本 i ...
- 短视频app源码开发,短视频录制的实现
原理说明 利用SurfaceView预览视频 利用系统自带的MediaRecorder实现短视频app源码中短视频视频的录制 实例化 设置音频输入 设置输出格式 设置视频编码格式 设置输出路径 调用p ...
- 教你用Python控制摄像头录制视频~
导语 Python如何下载网页上的图片呢? 哈喽哈喽铁汁萌~今天小编给大家分享另一个Python应用小程序,就是:用Python控制摄像头录制视频! 感兴趣的小伙伴耐心往下看哦
- python调用摄像头录制视频_Python OpenCV使用摄像头捕获视频
我们知道,OpenCV是一款强大的跨平台的计算机视觉库,使用它能完成我们对于图像和视频处理的很多功能,今天,我们使用OpenCV来捕获计算机摄像头的视频. 使用OpenCV捕获摄像头视频 我们知道,视 ...
- python捕获摄像头帧_Xuggler教程:帧捕获和视频创建
python捕获摄像头帧 注意:这是我们的" Xuggler开发教程 "系列的一部分. 到目前为止,在我们的Xuggler教程系列中,我们已经对视频处理的Xuggler进行了介绍, ...
- 摄像头 UIImagePickerController拍照和视频录制
下面看一下在iOS如何拍照和录制视频.在iOS中要拍照和录制视频最简单的方法就是使用UIImagePickerController.UIImagePickerController继承于UINaviga ...
最新文章
- php完全手册下载_PHP: 序言 - Manual
- 字字带泪——写在三十岁到来这一天
- crawler_微信采集方案
- JVM类加载机制_字节码执行引擎_Java内存模型
- saltstack的简单安装和配置
- 与 Rust 社区亲密接触!Rust 大会火热报名!
- 链表的基本应用二及总结
- 补习系列(4)-springboot 参数校验详解
- 为什么没有看到webcontent_王者荣耀之战坦路玩家心理:队友为什么不支援!我想要和射手换线...
- java中计算明年今天的日期_计算今天之后的下一个周年日
- NOIP模拟测试25
- 蚂蚁金服数据库性能超甲骨文引热议;三大运营商 5G 预约用户接近 930 万;苹果发布新版 Mac 系统| 极客头条...
- 商业智能BI如何推进制造业转型
- 直接点oracle表编辑,ORACLE SQL 知识点(随时编辑)
- android开发01 --开发工具
- 小电托——1-1磁路的基本概念和基本定律
- java 文件夹排序,Java文件夹排序(先文件夹排序,后文件排序)
- vue echarts饼状统计
- 华为服务器显示乱码,本地正常 服务器乱码
- accept()使用