我在这里有一个视频文件/data/out.mp4及其copy / data / out。 我和Oscode Sierra一起使用Xcode 8。
使用mp4扩展程序打开视频是可以的,但是没有扩展程序或任何其他格式的错误。
我从git尝试了opencv 2.4和最新的3.2。 用ffmpeg release / 2.0编译并尝试发布/ 3.0
使用opencv 3.2版:
Python 2.7.10 (default, Jul 30 2016, 19:40:32)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.2.0-dev'
>>> cv2.__file__
'/Users/johndoe/work/myproject/venv/local/lib/python2.7/site-packages/cv2.so'
如果视频有扩展程序:
>>> v=cv2.VideoCapture('/data/out.mp4')
>>> v.get(cv2.CAP_PROP_FRAME_COUNT)
61117.0
如果视频没有扩展程序:
>>> v=cv2.VideoCapture('/data/out')
VIDEOIO(cvCreateFileCapture_AVFoundation (filename)): raised unknown C++ exception!
>>> v.get(cv2.CAP_PROP_FRAME_COUNT)
0.0
我的FFmpeg配置:
./configure --prefix=/usr \
--bindir=/usr/local/bin/ \
--shlibdir=/usr/lib64 \
--datadir=/usr/share/ffmpeg \
--incdir=/usr/include/ffmpeg \
--libdir=/usr/lib64 \
--mandir=/usr/share/man \
--extra-cflags='-O2 -g' \
--extra-version=rpmfusion \
--enable-bzlib \
--enable-nonfree \
--enable-libopenjpeg \
--enable-libx264 \
--enable-avfilter \
--enable-postproc \
--enable-pthreads \
--disable-static \
--enable-shared \
--enable-gpl \
--enable-runtime-cpudetect \
--arch=x86_64
我的opencv CMAKE:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/Users/johndoe/work/myproject/venv/local/ \
-D INSTALL_C_EXAMPLES=OFF \
-D PYTHON_PACKAGES_PATH=/Users/johndoe/work/myproject/venv/lib/python2.7/site-packages \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D PYTHON_EXECUTABLE=/Users/johndoe/work/myproject/venv/bin/python \
-D WITH_CUDA=OFF ..
我尝试了其他各种格式重新编码原始视频(例如:ffmpeg -i out.mp4 out.asf):
>>> v=cv2.VideoCapture('/data/out.avi')
VIDEOIO(cvCreateFileCapture_AVFoundation (filename)): raised unknown C++ exception!
>>> v=cv2.VideoCapture('/data/out.flv')
VIDEOIO(cvCreateFileCapture_AVFoundation (filename)): raised unknown C++ exception!
>>> v=cv2.VideoCapture('/data/out.asf')
VIDEOIO(cvCreateFileCapture_AVFoundation (filename)): raised unknown C++ exception!
答案 0 :(得分:2)
OpenCV可能使用不同的Capture API。可以通过将其指定为VideoCapture()的第二个参数来强制执行API:
v = cv2.VideoCapture('/data/out', cv2.CAP_FFMPEG)
我已尝试使用cv2.VideoCapture(),文件具有扩展名且没有扩展名,并且使用默认的Capture API工作正常。请注意,我在OS X El Captain上使用python 3.5.2和OpenCV 3.1都安装了conda(Anaconda)。
答案 1 :(得分:0)
我遇到了同样的错误,但最终还是自己解决了!请参见下图。在我的错误中,我发现一行显示“名称CamTwist”-CamTwist是我几个月前安装的应用程序/插件,它阻塞了对我的网络摄像头的主要访问。几周前我已经卸载了该应用程序,但是硬盘驱动器上有一些剩余文件,所以我去了Finder>主页>搜索:CamTwist,瞧瞧! CamTwist包含两个文件,所以我将它们扔到了垃圾桶中,快速清空了该东西,重新运行了我的代码,然后是WALLAH!我真高兴。
我建议搜索“名称”行。也许您也已经安装了一些愚蠢的网络摄像头应用程序,该应用程序阻塞了访问权限!
Click to view screenshot of my terminal code and where I found the core issue for my bug
答案 2 :(得分:-1)
我有同样的问题,请把绝对媒体文件路径。