2017-02-05 9 views
0

У меня есть видеофайл здесь /data/out.mp4 и его копия/данные/выход. Я нахожусь на Osx Sierra с Xcode 8.Ошибка открытия видеофайла с openCV cv2VideoCapture

Открыть видео с расширением mp4 в порядке, но получить ошибку без расширения или любого другого формата.

Я попробовал opencv 2.4 и самый последний 3.2 из git. Собраны с FFmpeg выпуском/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 .. 

I судимого различные другие форматы перекодирование моего оригинального видео (то есть: 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! 
+1

Итак, ваш вопрос: «Как сделать файл типа opencv infer, если файл не имеет расширения?» –

ответ

2

OpenCV может использовать различные API захвата. Можно применять 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).

+0

Это устраняет исходную ошибку, но при этом все еще не получается получить число кадров с помощью cv2.CAP_PRO_FRAME_COUNT возвращает 0.0, несмотря на то, что видео является 2M и доступно для чтения в VLC. – kollo

+0

Попробуйте получить и показать пару кадров из файла. Это нужно проверить, что файл был фактически загружен/обработан. –

+0

@ kollo любая вещь выяснила на этом еще. –

-1

У меня была эта же проблема, пожалуйста, укажите путь к файлу абсолютного носителя.

 Смежные вопросы

  • Нет связанных вопросов^_^