Python OpenCV读取与保存视频文件完整指南

Dylan
Dylan
发布时间:2026-10-13| 7人浏览过
原创

本文详细介绍如何使用Python的OpenCV库进行视频文件的读取与保存。内容涵盖VideoCapture对象的创建、摄像头索引选择、帧读取与状态检查、视频属性获取与修改,以及VideoWriter对象的配置、FourCC编码格式选择与视频写入流程。

要获取视频流,首先需要实例化一个VideoCapture对象。该对象的参数可以是摄像头的设备索引号,也可以是本地视频文件的路径。当使用设备索引号时,它指定了要调用的具体摄像头设备。

大多数笔记本电脑都内置了摄像头,因此通常使用索引号0即可调用内置摄像头。若需选择其他外接摄像头,可将参数设置为1或更高的数值。初始化后,即可逐帧捕获视频画面。需要注意的是,在操作结束后,务必调用相关方法停止视频捕获并释放资源。

import numpy as np 
import cv2 
cap=cv2.VideoCapture(0) 
while (True): 
  ret,frame=cap.read() 
  gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 
  cv2.imshow("shiyan",gray) 
  if cv2.waitKey(1)&0xFF==ord('q'): 
    break 
cap.release() 
cv2.destroyAllWindows() 

其使用逻辑与C++版本的OpenCV非常相似。

调用cap.read()方法会返回一个布尔值(True或False)。如果当前帧读取成功,则返回True。

因此,可以通过检查该返回值来判断视频文件是否已播放至结尾。有时,VideoCapture对象可能无法成功初始化摄像头设备,导致代码报错。此时,可以使用cap.isOpened()方法来检查初始化状态。如果该方法返回True,说明初始化成功;否则,需要尝试使用cap.open()函数重新打开设备。

可以使用cap.get(propId)函数来获取视频流的各项参数信息。其中,propId是一个介于0到18之间的整数,每个数值对应视频的一个特定属性。部分参数可以通过cap.set(propId, value)进行修改,其中value为希望设置的新值。例如,可以使用cap.get(3)和cap.get(4)分别获取每一帧的宽度和高度,默认值通常为640x480。若需调整分辨率,可执行ret=cap.set(3, 320)和ret=cap.set(4, 240),将宽高设置为320x240。

2、保存视频

在捕获视频并对每一帧进行处理后,通常需要保存处理后的视频。对于静态图片,直接使用cv2.imwrite()即可保存;但对于视频文件,则需要执行更复杂的步骤。

首先,需要创建一个VideoWriter对象,并指定输出文件的名称。接着,必须指定FourCC编码格式。此外,还需确定视频的播放帧率(FPS)以及每一帧的尺寸。最后一个参数是isColor标志,若为True,则每一帧保存为彩色图像;若为False,则保存为灰度图像。FourCC是一个4字节代码,用于确定视频的编码格式。完整的可用编码列表可参考fourcc.org网站,具体支持情况依赖于操作系统平台。以下列举了一些常用的编码器。

• 在Fedora系统中:支持DIVX、XVID、MJPG、X264、WMV1、WMV2等编码。(推荐优先使用XVID;MJPG生成的视频文件体积较大;X264生成的视频文件体积非常小) • 在Windows系统中:支持DIVX(更多编码格式待测试和添加) • 在OSX系统中:(笔者未拥有OSX环境,无法提供具体信息,欢迎补充)

FourCC码在传递给程序时,需采用以下格式,以MJPG编码为例:

可以使用cv2.cv.FOURCC('M', 'J', 'P', 'G')或者cv2.cv.FOURCC(*'MJPG')的方式指定。

以下代码示例展示了如何从摄像头捕获视频,沿水平方向对每一帧进行翻转处理,并将结果保存为视频文件。

import numpy as np 
import cv2 
cap = cv2.VideoCapture(0) 
# Define the codec and create VideoWriter object 
fourcc = cv2.cv.FOURCC(*'XVID') 
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) 
while (cap.isOpened()): 
 ret,frame=cap.read() 
 if ret==True: 
  frame=cv2.flip(frame,0) 
  out.write(frame) 
  cv2.imshow("实验",frame) 
  if cv2.waitKey(0)&0xFF==ord('q'): 
   break 
 else: 
  break 
cap.release() 
out.release() 
cv2.destroyAllWindows() 

以上即为本文的全部内容,希望对读者学习有所帮助,也欢迎大家继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。