【问题标题】:Permanent fix for Opencv videocapture永久修复 Opencv 视频捕获
【发布时间】:2018-04-17 04:21:22
【问题描述】:

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

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

但每次都失败。我已经尝试了各个站点的几乎所有步骤,但无法使其正常工作(包括单独重建 ffmpeg)。

任何帮助将不胜感激。

我的平台是 Ubuntu17 和 Python3。

【问题讨论】:

  • 是 github 上的修复。用 Opencv 试过,同样的问题。
  • @zindarod 更新了代码
  • @zindarod 第一个 - 没有正确构建。我已经查看了各种页面,我可以查看任何建议的链接以使用 ffmpeg 构建 opencv?
  • 我遇到了同样的问题。将视频的完整路径从 /home 开始为我解决了这个问题。

标签: python opencv video ffmpeg


【解决方案1】:

我关注了 来自Link的步骤

上面链接中的这个 Cmake 命令如下所示

cmake -DWITH_CUDA=OFF -DBUILD_TIFF=ON -DBUILD_opencv_java=ON -DWITH_FFMPEG=ON -DBUILD_opencv_python3=ON -DENABLE_AVX=ON -DWITH_OPENGL=ON -DWITH_OPENCL=ON -DWITH_IPP=ON -DWITH_TBB=ON -DWITH_EIGEN=ON -DWITH_V4L =ON -DWITH_VTK=OFF -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_opencv_python2=OFF -DCMAKE_INSTALL_PREFIX=$(python3 -c "import sys; print(sys.prefix)") -DPYTHON3_EXECUTABLE=$(which python3) -DPYTHON3_INCLUDE_DIR=$(python3 -c "从 distutils.sysconfig 导入 get_python_inc; print(get_python_inc())") -DPYTHON3_PACKAGES_PATH=$(python3 -c "从 distutils.sysconfig 导入 get_python_lib; print(get_python_lib())") -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D PYTHON_EXECUTABLE=/home/user/anaconda3/bin/python -D BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=RELEASE ..

我不太熟悉 OpenCV 构建,但确切的 PYTHON_EXECUTABLE=/home/user/anaconda3/bin/python 路径是我认为特定 python 的 OpenCV 绑定需要更新的点

【讨论】:

    【解决方案2】:

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

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

    OpenCV FFMPEG 支持:

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

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

    输出应该是这样的:

    FFMPEG:是的

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

    FFMPEG 编解码器:

    FFMPEG 可能没有针对您的特定文件的编解码器。我们将以this video 为例,说明FFMPEG 是否具有该文件的解码能力。

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

    mediainfo video_file.mp4
    

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

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

    ffmpeg -codecs | grep -i avc
    

    在我的机器上,输出是:

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

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

    文件路径

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

    【讨论】:

    • 我正在开发 Fedora 26,我遇到了同样的问题。在第一个命令中,我得到 FFMPEG: No. How to resolve this
    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    相关资源
    最近更新 更多