【问题标题】:can't read mp4 in opencv3.2 (ubuntu, python3)无法在 opencv3.2(ubuntu,python3)中读取 mp4
【发布时间】:2017-08-10 16:19:17
【问题描述】:

我的 opencv 安装遇到问题,它无法打开 mp4 视频。我的系统是 ubuntu 16.04, 64bit, opencv3.2 使用自 python 3.5。

VideoCapture.read 返回FalseNone

这个问题还有其他问题,但是针对不同的平台或者不同的opencv版本。

显然,我缺少正确的编解码器。 所以我从我的构建目录中运行make uninstall,用apt 清除opencv* 并再次从源代码构建。这次确保在编译之前安装了ffmpeg

这是我的步骤:

  • 克隆 opencv 和 opencv_contrib
  • cd opencv/
  • mkdir build
  • cd build
  • cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D BUILD_EXAMPLES=ON ..
  • make -j 8
  • sudo make install

我检查了cmake的输出,有ffmpeg:

Video I/O:
--     DC1394 1.x:                  NO
--     DC1394 2.x:                  NO
--     FFMPEG:                      YES
--       avcodec:                   YES (ver 56.60.100)
--       avformat:                  YES (ver 56.40.101)
--       avutil:                    YES (ver 54.31.100)
--       swscale:                   YES (ver 3.1.101)
--       avresample:                NO
--     GStreamer:                   NO
--     OpenNI:                      NO
--     OpenNI PrimeSensor Modules:  NO
--     OpenNI2:                     NO
--     PvAPI:                       NO
--     GigEVisionSDK:               NO
--     Aravis SDK:                  NO
--     UniCap:                      NO
--     UniCap ucil:                 NO
--     V4L/V4L2:                    NO/YES
--     XIMEA:                       NO
--     Xine:                        NO
--     gPhoto2:                     NO

但问题仍然存在。我该如何解决这个问题?

更新

我不得不从 /usr/local 中手动删除一些 .so 文件。

然后我安装了我能找到的所有与 avi 相关的编解码器。 https://wiki.ubuntuusers.de/Codecs/ 加上 libavcodec-extra 和 ffmpeg

然后我重新编译,现在它可以工作了。

【问题讨论】:

    标签: python opencv ubuntu ffmpeg cmake


    【解决方案1】:

    mp4 视频通常包含使用 h264 编码的视频。这是获得专利的编解码器之一,有些可能需要许可证,这就是为什么它们不能在 ubuntu 中默认发布。您需要安装 libavcodec-extra 才能在 ffmpeg 中启用对 h264 的支持。

    【讨论】:

    • 我删除了opencv(sudo make uninstall),然后安装了libavcodec-extra,然后再次编译。问题没有改变
    • 这里有很多活动部件!嗯。您能否通过创建测试视频验证这实际上是 ffmpeg,而不是 python 选择了错误的 opencv 版本? this answer 展示了如何从内部的测试数据生成器生成视频文件。通过在命令行上执行 which ffmpeg 来验证您使用的是您想要的 ffmpeg 版本。
    • 您对活动部件的看法绝对正确。这次我不仅运行了 make uninstall 还手动搜索了 .so 文件和 python 包。确保没有留下任何配置或旧的导入路径。然后我安装了我能找到的所有与 avi 相关的插件,直到 cmake 为媒体 i/o 中列出的所有插件选择一个版本。包括 libavcodec-extra 和许多 gstreamer 插件等。现在它可以工作了。您关于安装正确编解码器的答案绝对是正确的方向。我不能 100% 说它是 libavcodec-extra,但你仍然为我解决了这个问题。谢谢
    猜你喜欢
    • 2015-12-05
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多