python - Opencv 视频捕获的永久修复

标签 python opencv video ffmpeg

这个问题在很多网站上被提出过无数次,但没有确定的解决方案。我正在尝试使用以下函数通过视频运行 Opencv:

import cv2
cap = cv2.VideoCapture('video.mp4')
if(cap.isOpened()==False):
print "Error opening camera"

但是每次都失败。我已经尝试了来自不同站点的几乎所有步骤,但无法让它工作(包括单独重建 ffmpeg)。

如有任何帮助,我们将不胜感激。

我的平台是Ubuntu17和Python3。

最佳答案

这个答案是在考虑 Linux 和 Python 的情况下编写的,但总体思路可以应用于 OpenCV 支持的任何操作系统和语言。

VideoCapture 类无法打开视频文件的原因有很多,但以下三种情况适用于大多数情况。

OpenCV FFMPEG 支持:

默认情况下,OpenCV 使用 ffmpeg 读取视频文件。 OpenCV 可能没有使用 FFMPEG 支持构建。要确定 OpenCV 是否支持 FFMPEG,请在终端中输入:

python -c "import cv2; print(cv2.getBuildInformation())" | grep -i ffmpeg

输出应该是这样的:

FFMPEG: YES

如果输出为No,则按照在线指南从支持 ffmpeg 的源代码构建 OpenCV。

FFMPEG 编解码器:

FFMPEG 可能没有针对您的特定文件的编解码器。我们将使用 this video例如,显示 FFMPEG 是否具有对该文件的解码能力。

首先,我们需要找到这个视频文件使用的编码格式。我们将使用 mediainfo 程序。在终端中输入:

mediainfo video_file.mp4

在输出中,在video 标题下,查找format。在这种情况下,使用的视频编码是 AVC,这是 H264 的另一个名称。

pic

现在,我们尝试查找 FFMPEG 是否支持解码 AVC 编码文件的编解码器。在终端中:

ffmpeg -codecs | grep -i avc

在我的机器上,输出是:

DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_crystalhd h264_vdpau ) (encoders: libx264 libx264rgb )

我们对 DEV 感兴趣,它代表解码、编码和视频。这意味着 AVC 是一种视频编码格式,FFMPEG 支持这种格式的编码和解码功能。

文件路径

最后检查文件路径是否正确,甚至文件是否存在。

关于python - Opencv 视频捕获的永久修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47112642/

相关文章:

python - Numpy:矢量化滞后差异之和

python - pidbox 收到方法 enable_events() [reply_to :None ticket:None] in Django-Celery

opencv - 在 Windows 环境下构建 Opencv Blob dLib

java - 如何使用 Java 从网络摄像头获取视频和音频流?

linux - "D:, H:, V:"在fbset中意味着什么?

video - 用ffmpeg剪辑视频

python - 无法在 AWS Lambda 函数中导入 sqlalchemy

python - 如果对象存在则从对象获取属性

c++ - 由于 DirectX,OpenCV 构建失败

c++ - Visual Studio 2015 错误 C4996 'std::_Copy_impl' : Function call with parameters that may be unsafe