Docker
帶有 OpenCV 和 FFPMEG 的 Docker 映像
我正在建構一個支持支持的 Docker
OpenCV
映像ffmpeg
。我的 Dockerfile 看起來像
RUN apt-get update && apt-get install -y \ git \ curl \ wget \ unzip \ ffmpeg \ build-essential \ cmake git pkg-config libswscale-dev \ libtbb2 libtbb-dev libjpeg-dev \ libpng-dev libtiff-dev libjasper-dev \ python3-numpy RUN cd \ && wget https://github.com/opencv/opencv/archive/3.1.0.zip \ && unzip 3.1.0.zip \ && cd opencv-3.1.0 \ && mkdir build \ && cd build \ && cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_CUDA=OFF \ -D INSTALL_C_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D WITH_FFMPEG=ON \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D WITH_TBB=ON .. \ && make -j"$(nproc)" \ && make install \ && cd \ && rm 3.1.0.zip
當我建構我的容器時
ffmpeg
已安裝,但OpenCV
沒有檢測到它,因為我可以從一般配置中清楚地看到:-- Video I/O: -- DC1394 1.x: NO -- DC1394 2.x: NO -- FFMPEG: NO -- codec: NO -- format: NO -- util: YES (ver 54.31.100) -- swscale: YES (ver 3.1.101) -- resample: NO -- gentoo-style: YES -- GStreamer: NO -- OpenNI: NO -- OpenNI PrimeSensor Modules: NO -- OpenNI2: NO -- PvAPI: NO -- GigEVisionSDK: NO -- UniCap: NO -- UniCap ucil: NO -- V4L/V4L2: NO/YES -- XIMEA: NO -- Xine: NO
即使安裝了 ffpmeg
ffmpeg version 2.8.11-0ubuntu0.16.04.1 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609 configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
ffmpeg
二進制包用於ffmpeg
命令行工具。您需要編譯的開發標頭檔位於不同的包中——數量相當可觀。值得慶幸的是,它們都來自ffmpeg
原始碼包,因此您可以相對容易地獲得一個列表:在使用實際 ffmpeg 的 Stretch 上:
(stretch)$ grep-aptavail -s Package -F Source ffmpeg | grep -- '-dev$' Package: libavcodec-dev Package: libavdevice-dev Package: libavfilter-dev Package: libavformat-dev Package: libavresample-dev Package: libavutil-dev Package: libpostproc-dev Package: libswresample-dev Package: libswscale-dev Package: libffmpegthumbnailer-dev
或者在 Jessie 上,Debian 使用了 libav 分支:
(jessie)$ grep-aptavail -s Package -F Source libav | grep -- '-dev$' Package: libavcodec-dev Package: libavdevice-dev Package: libavfilter-dev Package: libavformat-dev Package: libavresample-dev Package: libavutil-dev Package: libswscale-dev Package: libavc1394-dev Package: libavl-dev
我沒有方便的 Ubuntu 框來檢查那裡。
請注意 OpenCV 如何說“是”/“否”以匹配這些庫名稱。