参考 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>
  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 当中去。

cv2.VideoWriter()相关推荐

  1. 【python】终于解决了cv2.VideoWriter生成视频后视频文件始终为1KB且无法播放的问题

    把图片序列合成视频: import cv2 import imageio import ospath = r'D:\dataset\images' dir_name = os.listdir(path ...

  2. python opencv写视频——cv2.VideoWriter()

    python opencv写视频--cv2.VideoWriter() 函数原型 cv2.VideoWriter() VideoWriter(filename, fourcc, fps, frameS ...

  3. opencv 将多帧图像合成为视频 cv2.VideoWriter()

    目录 应用场景 代码 补充说明 应用场景 将文件夹下有时间戳或者有序的 *.jpg 图像合成为一个 mp4 格式的视频. 附加:加进度条看合成进度. 代码 import os import cv2 f ...

  4. cv2.VideoWriter生成avi文件无法打开

    cv2.VideoWriter生成avi文件无法打开 在opencv的学习中会遇到用cv2.VideoWriter创建的avi文件无法打开的问题,很多问题其他的文章都有,这是我自己碰到的没有出现过的问 ...

  5. Python实战案例,CV2模块,Python实现抖音字符视频

    前言 利用Python实现抖音字符视频.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: cv2模块: PIL模块: numpy模块: 以及一些Python自带 ...

  6. Opencv 使用cv2改变视频分辨率和尺寸

    用 CV2 改变视频分辨率和尺寸.代码如下: ​​import cv2 def video():videoCapture = cv2.VideoCapture('.mp4')fps = 30 # 保存 ...

  7. 【cv2】:关于opencv-Python的函数

    关于opencv-Python的函数 发布时间: 2019-04-13 19:50:42 Chapter one:图片 读入图像 cv2.imread(filename[, flags]) → ret ...

  8. python 图片生成视频_python--通过cv2多张图片生成视频

    1.安装cv pip install python-opencv 2.使用 # 图片合成视频 def picvideo(path,size): # path = r'C:\Users\Administ ...

  9. Python 之CV2详解

    气死人不偿命,本来觉得看一下代码了解一下CV2挺好,但是发现此路不通.然后还是乖乖把代码复现一遍!!! 一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 file ...

最新文章

  1. 『ExtJS』01 009. ExtJS 4 方法重载
  2. Chrome开发者工具面板功能
  3. catia高级技巧54条1.0
  4. h.264 html播放,浏览器 – 我如何播放H264视频?
  5. ztree插件的使用
  6. 手把手教你写平衡二叉树
  7. CAS单点登录详细流程
  8. 12v电流表的正确接法_滑动变阻器的分压与限流接法
  9. working space和working set关系
  10. 计算机网络 第一章 计算机网络和因特网
  11. linux搭建博客-day 7安装Nginx
  12. 机器学习基石HOW BETTER部分(1)
  13. ospf-3型和5型汇总
  14. 如何在桌面添加计算机日历工具,如何在电脑桌面上添加日历小工具?
  15. html怎么创建表格,html怎么做表格
  16. 禁止Solaris系统不必要的网络服务
  17. jenkins配置svn提交一键自动部署
  18. Iptables详解七层过滤
  19. Java的本地内存 直接内存 元空间
  20. DataGridView控件页脚会总行的最佳实现。

热门文章

  1. 深度学习图像标注软件LabelMe使用方法
  2. 可能是全网最详细的 Python 安装教程(windows)
  3. 关于Verilog中readmemb系统函数
  4. 最全面的常用Delphi第三方控件汇总—报表、图表、界面、数据库等
  5. 数据结构的在C语言中的类型定义
  6. Failed to remove network i5unxjx3ahdfrhksw0fmyqpjd: Error response from daemon: network *
  7. scrum要素读书笔记
  8. 业务逻辑漏洞之水平越权和垂直越权
  9. CheckBox复选框全选以及获取值(转)
  10. VS用OLE方式对Excel进行读写操作