☞ ░ 老猿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通过摄像头进行视频录制相关推荐

  1. opencv python 从摄像头获取视频、帧率、分辨率等属性设置和使用

    opencv python 从摄像头获取视频.帧率.分辨率等属性设置和使用 文章目录: 1,为了获取视频,你应该创建一个 VideoCapture 对象.他的参数可以是设备的索引号,或者是一个视频文件 ...

  2. python读取摄像头或者视频文件、并在gui中实时显示_python:tkinter显示来自网络摄像头的视频并执行QR扫描...

    我一直在尝试创建一个tkinter顶级窗口,用于流式传输视频表单摄像头并执行QR扫描.我从SO和another code得到这个QR扫描代码,它只是从网络摄像头更新图像,而不是在tkinter标签上流 ...

  3. flex摄像头连接视频录制

    Flex提供了3个类实现与服务器端的通信:HTTPService,ReObject和WebService.另外,我们还可以根据外部中间插件来让Flex与服务器端进行通信,比如Blazeds(Lcds) ...

  4. android 摄像机程序,在APP当中调用Android系统摄像头进行视频录制

    1.获得摄像头Feature和写文件的权限 android:name="android.hardware.camera2" android:required="true& ...

  5. 利用python制作制作直播视频录制、下载、播放

    一.使用工具 python VLC #媒体播放工具 FFMPEG #媒体编辑工具 designer #界面UI制作工具 二.python库 import os import vlc from 脚本 i ...

  6. 短视频app源码开发,短视频录制的实现

    原理说明 利用SurfaceView预览视频 利用系统自带的MediaRecorder实现短视频app源码中短视频视频的录制 实例化 设置音频输入 设置输出格式 设置视频编码格式 设置输出路径 调用p ...

  7. 教你用Python控制摄像头录制视频~

    导语 ​Python如何下载网页上的图片呢? 哈喽哈喽铁汁萌~今天小编给大家分享另一个Python应用小程序,就是:用Python控制摄像头录制视频! 感兴趣的小伙伴耐心往下看哦

  8. python调用摄像头录制视频_Python OpenCV使用摄像头捕获视频

    我们知道,OpenCV是一款强大的跨平台的计算机视觉库,使用它能完成我们对于图像和视频处理的很多功能,今天,我们使用OpenCV来捕获计算机摄像头的视频. 使用OpenCV捕获摄像头视频 我们知道,视 ...

  9. python捕获摄像头帧_Xuggler教程:帧捕获和视频创建

    python捕获摄像头帧 注意:这是我们的" Xuggler开发教程 "系列的一部分. 到目前为止,在我们的Xuggler教程系列中,我们已经对视频处理的Xuggler进行了介绍, ...

  10. 摄像头 UIImagePickerController拍照和视频录制

    下面看一下在iOS如何拍照和录制视频.在iOS中要拍照和录制视频最简单的方法就是使用UIImagePickerController.UIImagePickerController继承于UINaviga ...

最新文章

  1. php完全手册下载_PHP: 序言 - Manual
  2. 字字带泪——写在三十岁到来这一天
  3. crawler_微信采集方案
  4. JVM类加载机制_字节码执行引擎_Java内存模型
  5. saltstack的简单安装和配置
  6. 与 Rust 社区亲密接触!Rust 大会火热报名!
  7. 链表的基本应用二及总结
  8. 补习系列(4)-springboot 参数校验详解
  9. 为什么没有看到webcontent_王者荣耀之战坦路玩家心理:队友为什么不支援!我想要和射手换线...
  10. java中计算明年今天的日期_计算今天之后的下一个周年日
  11. NOIP模拟测试25
  12. 蚂蚁金服数据库性能超甲骨文引热议;三大运营商 5G 预约用户接近 930 万;苹果发布新版 Mac 系统| 极客头条...
  13. 商业智能BI如何推进制造业转型
  14. 直接点oracle表编辑,ORACLE SQL 知识点(随时编辑)
  15. android开发01 --开发工具
  16. 小电托——1-1磁路的基本概念和基本定律
  17. java 文件夹排序,Java文件夹排序(先文件夹排序,后文件排序)
  18. vue echarts饼状统计
  19. 华为服务器显示乱码,本地正常 服务器乱码
  20. accept()使用

热门文章

  1. TypeScript(四)声明文件、全局变量(三斜线指令)、npm包、UMD库、发布声明文件
  2. oracel的安装和卸载
  3. 计算机学报论文字数要求,常见EI学报综述类文章分析
  4. 带你揭秘网络工程师群体!
  5. 谈谈我们熟悉但未必了解的磁带库
  6. 健康体检管理系统源码(PEIS) 医院系统源码
  7. 股票资金建仓分仓补仓计算器
  8. 【超详细】R语言实现各种数据可视化
  9. Unity iTween初探
  10. xposed框架_把安卓手机开发到极致的框架xposed