永久修复Opencv视频捕获

Ish*_*rma 7 python video opencv ffmpeg

这个问题已在很多网站上多次提出,但不是最终的解决方案.我正在尝试使用函数运行Opencv视频:

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

但它每次都失败了.我已尝试过各种网站的几乎所有步骤,但无法使其工作(包括单独重建ffmpeg).

任何帮助将非常感激.

我的平台是Ubuntu17和Python3.

zin*_*rod 17

这个答案是用Linux和Python编写的,但是一般的想法可以应用于OpenCV支持的任何操作系统和语言.

VideoCapture不打开视频文件的类可能有很多原因,但以下三种情况适用于大多数情况.

OpenCV FFMPEG支持:

默认情况下,OpenCV使用ffmpeg来读取视频文件.OpenCV可能尚未使用FFMPEG支持构建.要了解OpenCV是否使用FFMPEG支持构建,请在终端输入:

python -c "import cv2; print(cv2.getBuildInformation())" | grep -i ffmpeg
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的:

FFMPEG:是的

如果输出是No遵循在线指南,则使用ffmpeg支持从源构建OpenCV.

FFMPEG编解码器:

FFMPEG可能没有特定文件的编解码器.我们将以此视频为例,说明FFMPEG是否具有此文件的解码功能.

首先,我们需要找到此视频文件中使用的编码格式.我们将使用该mediainfo计划.在终端中,输入:

mediainfo video_file.mp4
Run Code Online (Sandbox Code Playgroud)

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

PIC

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

ffmpeg -codecs | grep -i avc
Run Code Online (Sandbox Code Playgroud)

在我的机器上,输出是:

DEV.LS h264 H.264/AVC/MPEG-4 AVC/MPEG-4第10部分(解码器:h264 h264_crystalhd h264_vdpau)(编码器:libx264 libx264rgb)

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

文件路径

最后,检查文件路径是否正确,或者即使文件存在也是如此.