OpenCV 3.0.0使FFMPEG

时间:2015-07-27 21:18:27

标签: c++ git opencv ffmpeg

我一直在使用OpenCV。但是我最近将我的系统更改为我没有任何管理员权限的群集。问题是这样的:

在我的主文件夹中,我安装了FFMPEG(ffmpeg网站上提供的最新稳定版本)。我在$ HOME中安装了它,因此在$ HOME / lib中安装了库文件。有关更多信息,我使用以下选项编译了FFMPEG:

./configure --prefix=$HOME --enable-shared --enable-pic

然后我下载了最新的稳定版OpenCV 3.0.0并使用ccmake进行了配置。当我尝试make -j8时,它会给我以下错误。

 Scanning dependencies of target opencv_videoio
[ 63%] [ 63%] [ 63%] [ 63%] [ 63%] [ 63%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_mjpeg_decoder.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_images.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_v4l.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_mjpeg_encoder.cpp.o
Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o
In file included from /home/uujjwal/libraries/opencv-nogpu/opencv-3.0.0/modules/videoio/src/cap_ffmpeg.cpp:45:0:
/home/uujjwal/libraries/opencv-nogpu/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1546:71: error: use of enum 'AVCodecID' without previous declaration
/home/uujjwal/libraries/opencv-nogpu/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1556:83: error: use of enum 'AVCodecID' without previous declaration
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....

然而,如果没有ffmpeg支持,它可以正常工作。但是由于我的工作性质,我需要ffmpeg支持。

在尝试解决问题时,我尝试安装OpenCV 2.4.11,但它也给出了此错误。最新的GIT版本不会给我这个错误,而是一个错误,其中一部分就像这样

Linking CXX shared library ../../lib/libopencv_highgui.so /usr/bin/ld: /home/matheus/ffmpeg_build/lib/../lib/libavcodec.a(avpacket.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used

我已将其他未解决的问题在线粘贴上述错误,因此文件夹名称不同,但重定位错误完全相同。

在尝试解决问题时,我搜索并找到以下链接http://answers.opencv.org/question/12597/build-problems-for-opencv-241-with-ubuntu-1204-lts/

然而,其中一个答案提到改变cap_ffmpeg_impl.hpp文件中的一些行。我尝试过这样做,但要么我无法正确地做到这一点,要么出现其他问题并且无法正常工作。没有提到确切的行号和确切的更改,所以我很难改变事情并确定。

我使用Fedora 19(Schrodinger Cat)作为操作系统我希望我的问题的细节是清楚的,我希望社区能够给我一个良好的回应。

此致 Ujjwal

3 个答案:

答案 0 :(得分:10)

我试图在Ubuntu 12.04上构建OpenCV 3.0.0。问题似乎是OpenCV中的一个错误。我编辑了opencv-3.0.0 / modules / videoio / src / cap_ffmpeg_impl.hpp,在所有地方AVCodecID替换了CV_CODEC_ID,但#define - 在第1174行(可选),1546 ,和1556 - 并且构建工作。

有关详细信息,请参阅OpenCV问题跟踪器上的post。作为this提交的一部分,我的帖子之前已在OpenCV主分支上修复了该错误。

答案 1 :(得分:1)

假设你没有在OpenCV中使用FFMPEG,你可以禁用它被编译:

当你运行Cmake时 即当你这样做时:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D PYTHON2_PACKAGES_PATH=~/.virtualenvs/cv/lib/python2.7/site-packages \
    -D PYTHON2_LIBRARY=/usr/local/Cellar/python/2.7.10/Frameworks/Python.framework/Versions/2.7/bin \
    -D PYTHON2_INCLUDE_DIR=/usr/local/Frameworks/Python.framework/Headers \
    -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON \
    -D BUILD_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..

将此标志添加到混合-DWITH_FFMPEG = 0以不编译FFMPEG部分

答案 2 :(得分:0)

此版本支持ffmpeg

conda install --channel conda-forge