cv2.VideoWriter()
参考 cv2.VideoWriter() - 云+社区 - 腾讯云
用 OpenCV 开发难免会针对 Camera 或者是 Video 做处理,有的时候需要将画面保留下来,这个时候最佳方案是保存成一个 .avi 的文件。
OpenCV 底层是用 FFMEPG 进行多媒体开发的,所以 OpenCV 它的长项不在于此,它只是提供了这种能力而已,如果要针对多媒体文件做复杂的处理,推荐的还是 FFMEPG 专业库。
OpenCV 用来创建视频文件的类是 VideoWriter。
但首先,给大家普及一些视频类相关的知识点。
1. 文件后缀名
我们一般都知道视频文件是 .mp4、.3gp、.rmvb 等等格式的,但一个文件取这样的后缀名是为了告诉用户或者操作系统,它的内容是什么格式的。我们也可以将 rmvb 格式的文件取名为 ***.avi。后缀的目的是为了方便用专业的工具或者软件操作它们。
2. 文件格式
我们可以将一个视频文件看做一个容器。
简单地说就是可以看做是一个盒子。
这个盒子里面有视频画面数据、音频数据、字幕数据等等。
不同的文件格式如 mp4、avi、mkv 等等,它们存放 打包数据的方式不一样,文件内部文件编码方式也可能不一样。
3. 编码格式
视频容器中,一般有视频和音频数据,它们采取的编码方式不一样。
视频常见的编码方式通常有: x264、h264、mpeg-4
音频常见的编码方式通常有: mp3、AAC、flac
编码的目的主要是为了高效存储和传输,如果你不采用编码压缩的话,那么视频可以看做是一系列的图片序列,体积会非常大。
4. 编码器和解码器
把视频或者音频按照编码格式,编码成特定文件格式需要编码器的参与,不然每次开发重新写代码代价很高。
把特定文件格式解码成特定的编码格式数据,这个过程称为解码,需要解码器的存在。
解码器和编码器都有开源的或者收费的工具库,极大方便了开发者。
5. FPS 帧率
我们读初中物理时,大概了解过电影画面一秒钟 24 帧,其实对应的就是 24 fps,frame per second,有些手机有高速摄像的功能,原理就是能够 1 秒钟拍摄 960 张图片,然后用正常的速度放映出来,所以细节比较多。
fps 越高,细节越好,体验也越好,但是文件容量也越高。
VideoWriter
用 OpenCV 保存视频非常简单,通过调用它的 VideoWriter 这个类就好了。
VideoWriter(filename, fourcc, fps, frameSize[, isColor]) -> <VideoWriter object>
- 第一个参数是要保存的文件的路径
- fourcc 指定编码器
- fps 要保存的视频的帧率
- frameSize 要保存的文件的画面尺寸
- isColor 指示是黑白画面还是彩色的画面
fourcc
fourcc 本身是一个 32 位的无符号数值,用 4 个字母表示采用的编码器。 常用的有 “DIVX"、”MJPG"、“XVID”、“X264"。可用的列表在这里。
推荐使用 ”XVID",但一般依据你的电脑环境安装了哪些编码器。
如果 fourcc 采用 -1,系统可能会弹出一个对话框让你进行选择,但是我没有试验成功过。
代码示例
import numpy as np
import cv2cap = cv2.VideoCapture(0)fourcc = cv2.VideoWriter_fourcc(*'XVID')out = cv2.VideoWriter('testwrite.avi',fourcc, 20.0, (1920,1080),True)while(cap.isOpened()):ret, frame = cap.read()if ret==True:cv2.imshow('frame',frame)out.write(frame)if cv2.waitKey(10) & 0xFF == ord('q'):breakelse:breakcap.release()
out.release()
cv2.destroyAllWindows()
这段代码的目的就是获取摄像头的视频流,然后保存到本地,帧率是 20fps,尺寸是 1920x1080.
需要注意的是在 VideoWriter 中指定的尺寸要和 write() 中写进去的一样,不然视频会存储失败的。
如果需要读取视频文件,那么就将 VideoCapture 指定文件路径。
如果,将图片序列合成为视频文件,其实原理也一样,一张一张读取,然后写到 VideoWriter 当中去。
cv2.VideoWriter()相关推荐
- 【python】终于解决了cv2.VideoWriter生成视频后视频文件始终为1KB且无法播放的问题
把图片序列合成视频: import cv2 import imageio import ospath = r'D:\dataset\images' dir_name = os.listdir(path ...
- python opencv写视频——cv2.VideoWriter()
python opencv写视频--cv2.VideoWriter() 函数原型 cv2.VideoWriter() VideoWriter(filename, fourcc, fps, frameS ...
- opencv 将多帧图像合成为视频 cv2.VideoWriter()
目录 应用场景 代码 补充说明 应用场景 将文件夹下有时间戳或者有序的 *.jpg 图像合成为一个 mp4 格式的视频. 附加:加进度条看合成进度. 代码 import os import cv2 f ...
- cv2.VideoWriter生成avi文件无法打开
cv2.VideoWriter生成avi文件无法打开 在opencv的学习中会遇到用cv2.VideoWriter创建的avi文件无法打开的问题,很多问题其他的文章都有,这是我自己碰到的没有出现过的问 ...
- Python实战案例,CV2模块,Python实现抖音字符视频
前言 利用Python实现抖音字符视频.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: cv2模块: PIL模块: numpy模块: 以及一些Python自带 ...
- Opencv 使用cv2改变视频分辨率和尺寸
用 CV2 改变视频分辨率和尺寸.代码如下: import cv2 def video():videoCapture = cv2.VideoCapture('.mp4')fps = 30 # 保存 ...
- 【cv2】:关于opencv-Python的函数
关于opencv-Python的函数 发布时间: 2019-04-13 19:50:42 Chapter one:图片 读入图像 cv2.imread(filename[, flags]) → ret ...
- python 图片生成视频_python--通过cv2多张图片生成视频
1.安装cv pip install python-opencv 2.使用 # 图片合成视频 def picvideo(path,size): # path = r'C:\Users\Administ ...
- Python 之CV2详解
气死人不偿命,本来觉得看一下代码了解一下CV2挺好,但是发现此路不通.然后还是乖乖把代码复现一遍!!! 一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 file ...
最新文章
- 『ExtJS』01 009. ExtJS 4 方法重载
- Chrome开发者工具面板功能
- catia高级技巧54条1.0
- h.264 html播放,浏览器 – 我如何播放H264视频?
- ztree插件的使用
- 手把手教你写平衡二叉树
- CAS单点登录详细流程
- 12v电流表的正确接法_滑动变阻器的分压与限流接法
- working space和working set关系
- 计算机网络 第一章 计算机网络和因特网
- linux搭建博客-day 7安装Nginx
- 机器学习基石HOW BETTER部分(1)
- ospf-3型和5型汇总
- 如何在桌面添加计算机日历工具,如何在电脑桌面上添加日历小工具?
- html怎么创建表格,html怎么做表格
- 禁止Solaris系统不必要的网络服务
- jenkins配置svn提交一键自动部署
- Iptables详解七层过滤
- Java的本地内存 直接内存 元空间
- DataGridView控件页脚会总行的最佳实现。
热门文章
- 深度学习图像标注软件LabelMe使用方法
- 可能是全网最详细的 Python 安装教程(windows)
- 关于Verilog中readmemb系统函数
- 最全面的常用Delphi第三方控件汇总—报表、图表、界面、数据库等
- 数据结构的在C语言中的类型定义
- Failed to remove network i5unxjx3ahdfrhksw0fmyqpjd: Error response from daemon: network *
- scrum要素读书笔记
- 业务逻辑漏洞之水平越权和垂直越权
- CheckBox复选框全选以及获取值(转)
- VS用OLE方式对Excel进行读写操作