python opencv 读取本地视频文件 修改ffmpeg的方法

下面是详细讲解“python opencv 读取本地视频文件 修改ffmpeg的方法”的完整攻略:

一、前置条件

在进行本文讲解前,请确保你已经安装好了 Python 和 OpenCV,以及正确配置了环境变量。

二、读取本地视频文件

使用 Python 调用 OpenCV 读取本地视频文件,可以采用以下代码:

import cv2

cap = cv2.VideoCapture('test.mp4') # test.mp4 是你要读取的视频文件名称
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret:
        cv2.imshow('frame',frame)
        if cv2.waitKey(25) & 0xFF == ord('q'): # 弹出的视频窗口可点击 q 键关闭
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()

上述代码会读取 test.mp4 视频文件,并且将每一帧图像在一个 OpenCV 窗口中展示。注意,弹出窗口不能命名为 win32cv,否则opencv自带的无法打开新的窗口

三、修改FFmpeg的方法

由于 FFmpeg 的格式支持很广泛,但默认情况下,OpenCV 无法读取一些格式的视频文件,比如 .avi、.flv 等。这时可以通过修改 FFmpeg 的方式来支持这些格式的视频文件。

以下是两种示例方法:

1.在 Python 中使用 ffmpeg-python 库

这种方法可以使用 Python 中的 ffmpeg-python 库,通过在 Python 中调用 FFmpeg 命令来读取不支持的视频文件格式。

使用方法如下:

import ffmpeg

input_file = 'test.avi' # 要读取的视频文件路径
output_file = 'test.mp4' # 要输出的新文件路径,需要与读取文件路径不同
ffmpeg.input(input_file).output(output_file).run()

上述代码将会使用 FFmpeg 将 test.avi 视频文件转换为 test.mp4 格式的新文件。

2.手动修改 FFmpeg

当然,你也可以手动修改 FFmpeg 以支持更多格式的视频文件。以下是详细步骤:

  1. 打开 opencv\sources\3rdparty\ffmpeg\ 目录下的 CMakeLists.txt 文件
  2. 将以下内容添加到文件末尾:
set(LIBAVCODEC_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include/libavcodec")
set(LIBAVFORMAT_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include/libavformat")
set(LIBAVUTIL_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include/libavutil")
set(LIBSWSCALE_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include/libswscale")
  1. 在 Windows 系统下,还需要修改 opencv\sources\3rdparty\ffmpeg\version.h 文件

在文件末尾添加以下内容:

#define AV_CODEC_ID_H264               (CODEC_ID_H264)
#define AV_CODEC_ID_MPEG4              (CODEC_ID_MPEG4)

然后保存并关闭文件。

  1. 打开 opencv\sources\3rdparty\ffmpeg\common.mak 文件,找到以下内容:
DEMDEC_LIBS = $(call map_deps,$(4),$(5),$(D)/libavcodec/libavcodec.a,$(D)/libavutil/libavutil.a) $(EXTRALIBS)

将其修改为:

DEMDEC_LIBS = $(call map_deps,$(4),$(5),$(D)/libavcodec/libavcodec.a,$(D)/libavformat/libavformat.a,$(D)/libavutil/libavutil.a,$(D)/libswscale/libswscale.a)  $(EXTRALIBS)
  1. 最后使用 CMake 重新编译 OpenCV,即可使用修改后的 FFmpeg。

四、总结

以上就是关于“python opencv 读取本地视频文件 修改ffmpeg的方法”的完整攻略,希望对你有所帮助。如有疑问,欢迎在评论区留言。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python opencv 读取本地视频文件 修改ffmpeg的方法 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • OpenCV中Grabcut算法的具体使用

    OpenCV中Grabcut算法是一种基于图像分割的算法,通常用于将图像中的前景和背景分离。本篇文章将分为以下几个部分,分别介绍使用OpenCV中Grabcut算法实现图像分割的流程以及对应的代码实现。 1. 环境搭建 在使用Grabcut算法之前,我们需要搭建OpenCV的开发环境。具体可以参考以下文档: 环境搭建文档链接 2. Grabcut算法流程 实…

    人工智能概论 2023年5月24日
    00
  • Android开发教程之获取系统输入法高度的正确姿势

    Android开发教程之获取系统输入法高度的正确姿势 在Android开发中,有时候需要获取系统输入法的高度,以便处理界面上控件的布局。但是由于不同版本的系统输入法可能存在差异,因此需要采用正确的方法获取系统输入法的高度。 使用ViewTreeObserver实时监听输入法高度变化 在Activity的onCreate方法中可以通过ViewTreeObser…

    人工智能概览 2023年5月25日
    00
  • Pytorch中的 torch.distributions库详解

    Pytorch中的 torch.distributions库详解 Pytorch中的torch.distributions库是一个用于生成随机变量的子库,旨在为深度学习和概率建模提供强大的支持。可以使用该库生成多种概率分布(例如正态分布、均匀分布、泊松分布等),并使用相关函数进行采样、求概率密度函数、计算累积分布函数等操作。本篇文章将详细讲解torch.di…

    人工智能概论 2023年5月24日
    00
  • python pyaudio音频录制的实现

    安装pyaudio库 在Python中使用Pyaudio库来录制音频,首先需要安装该库,可以使用pip工具来安装,命令如下所示: pip install pyaudio 创建Pyaudio对象 在使用Pyaudio进行录音之前,需要创建PyAudio对象,并指定参数。代码如下所示: import pyaudio # 创建PyAudio对象 p = pyaud…

    人工智能概览 2023年5月25日
    00
  • SpringCloud可视化链路追踪系统Zipkin部署过程

    下面我将详细讲解“SpringCloud可视化链路追踪系统Zipkin部署过程”的完整攻略。 一、Zipkin介绍 Zipkin是一个开源的分布式跟踪系统,它可以帮助我们监控和调试微服务架构中的调用链路。Zipkin圆形对以下方面提供支持:- 请求跟踪和调用时间分析- 单个请求的耗时分析- 端到端的请求跟踪- 链路的拓扑结构分析 二、Zipkin Serve…

    人工智能概览 2023年5月25日
    00
  • Python列表的切片取值详解

    Python列表的切片取值是列表操作中的重要部分,通过切片操作可以方便的截取列表中的元素。下面是针对Python列表的切片取值的详细攻略。 什么是切片取值? 切片取值是通过指定切片范围,在列表中截取需要的元素的操作。切片操作的结果又是一个新列表,并不会改变原来的列表。 切片的语法 切片操作使用的语法格式为:list[start:end:step],其中: s…

    人工智能概论 2023年5月25日
    00
  • mongodb 3.4下远程连接认证失败的解决方法

    下面是“mongodb 3.4下远程连接认证失败的解决方法”的完整攻略。 问题描述 在使用mongodb 3.4版本进行远程连接时,可能会出现认证失败的情况。详细表现为,当使用用户名和密码进行远程连接时,会提示“Authentication failed”错误。 问题分析 一种可能的原因是,在mongodb 3.4中,启用了SCRAM-SHA-1身份验证机制…

    人工智能概论 2023年5月25日
    00
  • nginx限流方案的实现(三种方式)

    下面是对于“nginx限流方案的实现(三种方式)”完整攻略的讲解。 一、什么是nginx限流 nginx限流(Rate Limiting)是指在系统中对于某些接口或某些操作的并发数、请求速率等进行限制,以避免因为某些操作造成系统过载,从而导致系统的不可用。nginx限流是一个很重要的生产环境的安全性和稳定性问题,Nginx提供了基于连接数限流和基于请求限流两…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部