我在 16.04 系统上工作,并已成功安装 opencv 3.1 并启用了 FFMPEG 标志。我通过 cv2.getBuildInformation() 仔细检查了这是否属实,结果显示 FFMPEG = YES。
我正在尝试打开一个存放在我工作单位的私人服务器上的视频(我已登录 VPN,以防万一),我可以通过浏览器访问该视频。但使用 cv2 进行视频捕获失败。
>>> cap = cv2.VideoCapture("https://xxx.mp4", cv2.CAP_ANY) #dummy url
>>> cap
<VideoCapture 0x7f63300fa4b0>
>>> cap.isOpened()
False
对于 https url 来说,情况总是如此。它似乎能够很好地处理本地视频。我尝试了很多不同的方法:最初以为是 gstreamer 的问题,所以我检查了我的插件,发现有一些 gst-bad 版本(参考:https://github.com/GStreamer/gst-plugins-ugly),删除了那些并替换为好的版本,没有成功。还尝试在读取视频时明确告诉 videoCapture 使用 cv2.CAP_ANY 和 cv2.CAP_FFMPEG 标志,仍然没有成功。
我在编译 opencv 时禁用了 Gstreamer 标志,但即使将其设置为 ON,我的问题也没有任何变化。
我一直找不到这个问题的解决方案,几天来一直在寻找和尝试不同的方法!有什么想法吗?
答案1
最终,我放弃了安装并重新安装 opencv3.1 的尝试,转而使用 opencv 3.4.1。有了它,以及我当前(作为原始问题帖子)的 gstreamer 和 ffmpeg 配置,我只需要为 gstreamer 正在寻找的 libopencv_core.so.2.4 创建符号链接,其余部分工作正常。希望这对某人有帮助!我还没有弄清楚 opencv3.1 到底出了什么问题(就像我提到的,这是我其他同事的配置,功能对他们来说很好),但这是我花了几天时间解决这个问题后最终做的事情。