最近因为经常对视频进行操作,所以记录下Python用opencv来读写视频的方法。

一、opencv读视频

python调用opencv来读视频比较简单,可以直接调用cv2.VideoCapture来读取视频和摄像头,基本上,常见的avi和mp4都能够正常读取。cv2.VideoCapture是通过传入数字来读取对应的摄像头,或者通过传入一个路径字符串来读取对应的视频文件。

最简单直接的读取视频的例子如下:

import cv2

cap = cv2.VideoCapture(0) #读取摄像头

#cap = cv2.VideoCapture("video.mp4") #读取视频文件

while(True):

ret, frame = cap.read()

if ret:

cv2.imshow("frame", frame)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

else:

break

cap.release()

读取视频后,OpenCV提供了很多的视频相关的属性,我觉得常见且比较有用的几个属性见如下表格(完整表格见官网文档):

C/C++: CAP_PROP_POS_MSEC

Python: cv.CAP_PROP_POS_MSEC

Current position of the video file in milliseconds.当前视频帧在第几毫秒

C/C++: CAP_PROP_POS_FRAMES

Python: cv.CAP_PROP_POS_FRAMES

0-based index of the frame to be decoded/captured next.当前帧在视频中第几帧,从0开始

C/C++: CAP_PROP_POS_AVI_RATIO

Python: cv.CAP_PROP_POS_AVI_RATIO

Relative position of the video file: 0=start of the film, 1=end of the film.视频帧在视频中的相对位置

C/C++: CAP_PROP_FRAME_WIDTH

Python: cv.CAP_PROP_FRAME_WIDTH

Width of the frames in the video stream.视频帧宽度

C/C++: CAP_PROP_FRAME_HEIGHT

Python: cv.CAP_PROP_FRAME_HEIGHT

Height of the frames in the video stream.视频帧高度

C/C++: CAP_PROP_FPS

Python: cv.CAP_PROP_FPS

Frame rate.帧率

C/C++: CAP_PROP_FOURCC

Python: cv.CAP_PROP_FOURCC

4-character code of codec. see VideoWriter::fourcc .视频编码格式

C/C++: CAP_PROP_FRAME_COUNT

Python: cv.CAP_PROP_FRAME_COUNT

Number of frames in the video file.视频总帧数

有了上面的属性后,要获取对应的属性值,可以通过cv2.VideoCapture的get方法来获取,同样,可以通过set方法来写属性:

size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

fps = cap.get(cv2.CAP_PROP_FPS)

二、 opencv写视频

opencv写视频调用的是cv2.VideoWriter,cv2.VideoWriter需要传入的四个主要的参数:保存的视频路径、编码格式、帧率、视频帧尺寸。

简单的写视频的例子在上面读视频的例子基础上,稍微添加一点代码,例子如下:

import cv2

cap = cv2.VideoCapture(0) #读取摄像头

#cap = cv2.VideoCapture("video.mp4") #读取视频文件

fps = 15

size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

videoWriter = cv2.VideoWriter('video.mp4', cv2.VideoWriter_fourcc('M','P','E','G'), fps, size)

while(True):

ret, frame = cap.read()

if ret:

videoWriter.write(frame)

cv2.imshow("frame", frame)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

else:

break

cap.release()

videoWriter.release()

这里主要说下编码格式,常见的视频编码格式可以在找fourcc.org上面查找。

opencv中比较常见的编码格式有"DIVX"、”MJPG"、"XVID"、"MPEG"等,这几个基本上opencv都是自带的可以直接读写的,保存的文件格式可以是.mp4也可以是.avi,但是OpenCV并不是自带的支持所有格式的,有时候在工程中可能会遇到需要其它编码格式,例如在web中要显示的话,常见的还是h264这种支持流的格式,而这一种opencv是不自带的,所以需要通过其它途径来实现。

要想使用OpenCV来保存h264视频的话,需要使用额外的库,在windows上是比较简单的,直接下载openh264库来使用即可,使用方法也比较简单,到openh264的github上下载相关的文件,比如我用的opencv-python为3.4.3.18,它使用的openh264版本是1.7,所以就可以下载http://ciscobinary.openh264.org/openh264-1.7.0-win64.dll.bz2的版本,如下:

下载之后直接解压,放到脚本所在的路径下,然后修改上面写视频的编码格式,格式可以是'h','2','6','4'或者'x','2','6','4',如下:

videoWriter = cv2.VideoWriter('video.mp4', cv2.VideoWriter_fourcc('h','2','6','4'), fps, size)

Linux稍微麻烦一点,本来以为可以参照Windows这种做法从上面的路径下载库文件来使用,但实际上运行的时候并没有用,会有问题,所以没解决,后面在github上找到其他的方法,稍微麻烦一点点,这里还没整理好,就先不加了。

东风夜放花千树。更吹落、星如雨。

宝马雕车香满路。

凤箫声动,玉壶光转,一夜鱼龙舞。

蛾儿雪柳黄金缕。笑语盈盈暗香去。

众里寻他千百度。

蓦然回首,那人却在,灯火阑珊处。

--辛弃疾 《青玉案·元夕》

python调用opencv处理视频_Python调用OpenCV读写视频相关推荐

  1. python调用webservice接口实例_python调用各种接口,webservice,c接口,com接口,socket协议方法...

    python调用webservice接口(SOAP) (2)调用示例: 需要先安装suds库:pip install suds from suds.client import Client #如果需要 ...

  2. python 编辑视频_python也能玩视频剪辑!moviepy操作记录总结

    moviepy库安装 今天咱们需要使用的第三方是moviepy,moviepy是用于视频编辑的Python模块,可用于基本操作(例如剪切,串联,标题插入),视频合成(也称为非线性编辑),视频处理或创建 ...

  3. python批量下载b站_python 批量下载bilibili视频的gui程序

    运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ...

  4. python批量下载bilibili视频_python 批量下载bilibili视频的gui程序

    运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ...

  5. python爬app无水印视频_Python爬虫:短视频平台无水印下载 (上)

    导入: 虽然目前有些软件还没适配,但是,我发了 Blink 后有一写人留言或者私信找我要源码,不过我还在增加适配的软件,所以还没有时间写这篇博客,今天呢,就先把我目前适配了的代码拿出来,后续还会继续适 ...

  6. python打开摄像头获取图片_Python基于opencv调用摄像头获取个人图片的实现方法

    接触图像领域的应该对于opencv都不会感到陌生,这个应该算是功能十分强劲的一个算法库了,当然了,使用起来也是很方便的,之前使用Windows7的时候出现多该库难以安装成功的情况,现在这个问题就不存在 ...

  7. python opencv 录制视频_Python利用opencv实现录制视频

    import cv2 import threading    #python 多线程操作库 class RecordingThread(threading.Thread): def __init__( ...

  8. python opencv 录制视频_python - 使用Opencv Python多线程录制视频 - 堆栈内存溢出

    我认为您的工作方向正确,但是我无法使用您的代码保存文件. 这是一个使用多线程获取帧的视频流到视频小部件. 每个摄像机流都有两个线程: 线程#1-专用于仅读取摄像机流中的帧. 线程#2-专用于处理帧(显 ...

  9. python批量处理视频_Python调用ffmpeg开源视频处理库,批量处理视频

    代码示例 # coding=utf-8 import os import subprocess import datetime import json, pprint import re, time ...

最新文章

  1. java文件锁定_如何使用java锁定文件(如果可能的话)
  2. 数据蒋堂 | 前半有序的大数据排序
  3. 【linux练习】基础作业一
  4. Yii2配置Nginx伪静态的方法
  5. 精算模型10 非参数模型0 精算数据、非参数建模的思路概述
  6. 文巾解题 1646. 获取生成数组中的最大值
  7. 打印网页时背景图片的问题
  8. 百练 03 复杂的整数划分问题
  9. 一台电脑两种jdk_jdk和jre有什么区别?
  10. win11定时关机命令
  11. python通信系统仿真_详解MATLAB/Simulink通信系统建模与仿真 PDF 高清版
  12. 冲压模板自动标注LISP_自动标注.LSP
  13. 带通滤波器中心频率计算公式中R是哪个值_LCC-HVDC 交流滤波器选择策略
  14. 推荐一款专家级网站流量分析软件-逆火(Nihuo)
  15. Android朋友圈怎么换行,微信朋友圈个性签名怎么换行
  16. 关于一些Ubuntu网络问题的解决办法
  17. pwm一个时间单位_详解PWM原理、频率与占空比
  18. 监控系统体系1-数据流监控系统
  19. 专题7:动态规划 记忆化搜索
  20. 华为海思人脸识别方案 海思 3516嵌入式 Linux系统人脸识别开发模组套件

热门文章

  1. 【TypeScript】TS 看这一篇就够了
  2. 张朝阳赞赏的IT界美女--TOM副总裁(组图)
  3. 赛码网,股神问题,用C语言自己实现的一个程序,仅供参考
  4. 计算机错误代码字母,电脑开机蓝屏英文字母的解决方法
  5. JS和jQuery基础
  6. python编写存储过程_python call 存储过程
  7. 180912 其它-实习总结
  8. 【Python】基础入门
  9. amazon海淘+CUL中美速递转运详细教程(免税)
  10. unix常用命令对照表及常用命令资料