用 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>
  1. 第一个参数是要保存的文件的路径
  2. fourcc 指定编码器
  3. fps 要保存的视频的帧率
  4. frameSize 要保存的文件的画面尺寸
  5. 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 当中去。

OpenCV 用 VideoWriter 创建视频(Python 版本)相关推荐

  1. [python + opencv]根据图像创建视频

    做项目的时候,对每一帧的图像进行检测,检测之后输出图片,然后将输出的图片合并成视频. 1. 使用glob获取所有图像文件名称 2. 使用cv2.imread()读取所有图像 3.将所有图像存储到一个列 ...

  2. OpenCV中VideoWriter输出视频文件为空或6KB解决方法(java)

    最近因项目需要,刚刚开始接触OpenCV.使用videoWriter将处理完的视频帧转换为视频存到磁盘时视频大小总是为0KB(mp4)或者6KB(AVI).查找资料都说是视频编码的问题,但是换了好几种 ...

  3. conda创建指定python版本environment

    conda create -n env-name python=python-version

  4. anaconda降级python失败_如何降级Python版本安装spyder?

    如何降级 Python 版本安装 Spyder? 可能并不需要降级 Python 版本,使用 Spyder 独立安装包安装,然后指定 Python 解释器:另外一种方法是在 Anaconda 中安装. ...

  5. 学习opencv3示例2-11 写入AVI文件,用VideoWriter保存视频失败

    opencv用VideoWriter保存视频失败,报错 FFMPEG: tag 0x00000898/'\230???' is not found (format 'avi / AVI (Audio ...

  6. 虚拟环境工具pyenv的安装,配置和使用,完美控制python版本

    文章目录 前言 背景 使用 第 1 章:使用环境 1.安装 git 2.开启终端 3.安装 pyenv 4.安装 pyenv-virtualenv 第 2 章:使用 pyenv 1. 创建虚拟环境 2 ...

  7. Python Opencv 之 简单的视频裁剪功能的实现

    Python Opencv 之 简单的视频裁剪功能的实现 目录 Python Opencv 之 简单的视频裁剪功能的实现 一.简单介绍 二.实现原理 三.注意实现 四.效果预览 五.实现步骤 这里实现 ...

  8. opencv自动裁切_荐Python Opencv 之 简单的视频裁剪功能的实现

    Python Opencv 之 简单的视频裁剪功能的实现 目录 一.简单介绍 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随 ...

  9. python opencv读取视频没声音_python + opencv: 解决不能读取视频的问题

    博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像,程序如下: cap = cv2.VideoCapture(0) ret, frame = cap.read() 使用这个程序 ...

最新文章

  1. LeetCode 583. Delete Operation for Two Strings--动态规划 DP--Java,Python,C++解法
  2. android某个活动全屏,android – 重新组合活动布局,以便在旋转屏幕时全屏播放视频...
  3. Selenium3自动化测试——22.使用DDT运行同一测试用例
  4. 7-1 堆栈操作合法性(20 分)
  5. 黑客发现了欺骗华尔街的新方法
  6. LeetCode----13. 罗马数字转整数
  7. android获取imei兼容_Android获取IMEI号码
  8. 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送
  9. TD-SCDMA成为我国通信行业标准
  10. 【2016年第4期】分布式协商:建立稳固分布式 大数据系统的基石
  11. Fedora 10下应用网络模拟器NS心得
  12. 自学python能干些什么副业-学会Python有哪些可以做的兼职?
  13. Android游戏编程之从零开始pdf
  14. 长连接和短连接的定义区别,以及应用场景
  15. 2017年12月19-20日 阿里云 飞天/智能 云栖大会-北京峰会 会议笔记
  16. 因果推断笔记—— 相关理论:Rubin Potential、Pearl、倾向性得分、与机器学习异同(二)
  17. i12蓝牙耳机怎么设置成中文_耳朵里的小精灵——乐迈车载智能蓝牙耳机
  18. UiBot If(如果条件成立)
  19. DPDK在DPVS中的应用及原理分析
  20. 怎么把所有图片变成一样的大小

热门文章

  1. 零点漂移 时间戳拦截器
  2. 重庆大学自动化学院考研916微机原理简答题
  3. 前端性能优化学习 02 Web 性能指标
  4. 前端学习笔记之——初探HTML5
  5. 对微软CRM日期保存格式的分析
  6. Golang获取整点的时间戳
  7. CSS的position:fixed的使用(固定不动的div)
  8. 词云wordcloud+jieba
  9. 一些好用的IT学习网站
  10. 将windows2000升级到windows2003系统