You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu16.04下编译带FFmpeg的OpenCV遇问题求助

解决Ubuntu16.04下OpenCV与FFmpeg集成的两大问题

我来帮你一步步捋清楚这两个问题,都是老版本Ubuntu+OpenCV/FFmpeg组合里常见的坑:

一、OpenCV3.1编译时缺失libavresample.a的问题

你说FFmpeg里libavresample已经被弃用,这刚好戳中了问题的核心——OpenCV3.1的默认构建配置还在依赖这个已被移除的库,但你编译的FFmpeg已经把它去掉了。

有两个可行的解决方向:

  • 方向1:给FFmpeg补回libavresample
    虽然这个库已经被弃用,但为了兼容OpenCV3.1,只能临时启用它。重新编译FFmpeg时,在configure命令里加上--enable-avresample参数:

    ./configure --prefix=/home/nyan/ffmpeg_build --enable-avresample [你的其他FFmpeg编译参数]
    make -j$(nproc) && sudo make install
    

    编译完成后,再重新配置OpenCV3.1的CMake,应该就能找到这个库了。

  • 方向2:让CMake精准指向你编译的FFmpeg
    有时候CMake会优先找系统自带的FFmpeg(可能版本不匹配),所以要明确指定路径:

    # 先清理之前的CMake缓存
    rm -rf CMakeCache.txt CMakeFiles/
    # 重新配置
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
          -D CMAKE_INSTALL_PREFIX=/usr/local \
          -D WITH_FFMPEG=ON \
          -D FFMPEG_INCLUDE_DIR=/home/nyan/ffmpeg_build/include \
          -D FFMPEG_LIB_DIR=/home/nyan/ffmpeg_build/lib \
          ..
    

    这样CMake就会直接用你自己编译的FFmpeg,不会去碰系统里的旧版本。

二、OpenCV3.4.1编译成功但未集成FFmpeg、无法读取摄像头的问题

首先得先确认OpenCV到底有没有真的集成FFmpeg,你可以跑这个命令检查:

opencv_version --verbose

看输出里有没有FFmpeg: YES的标记,如果没有,说明CMake配置阶段就没正确找到FFmpeg,后续的问题都是由此引发的。

具体解决步骤:

  1. 重新配置CMake,强制关联FFmpeg并开启视频设备支持
    先清空之前的缓存,然后重新配置,重点加上WITH_V4L=ON(这个是让OpenCV支持V4L2设备,也就是你的摄像头),同时明确指定FFmpeg路径:

    rm -rf CMakeCache.txt CMakeFiles/
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
          -D CMAKE_INSTALL_PREFIX=/usr/local \
          -D WITH_FFMPEG=ON \
          -D FFMPEG_INCLUDE_DIR=/home/nyan/ffmpeg_build/include \
          -D FFMPEG_LIB_DIR=/home/nyan/ffmpeg_build/lib \
          -D WITH_V4L=ON \
          -D WITH_GSTREAMER=OFF \  # 避免和FFmpeg冲突,不需要的话就关掉
          ..
    

    配置完成后,看CMake的输出日志,确认FFmpeg: YES已经出现,再继续编译。

  2. 检查FFmpeg的编译参数是否足够
    你编译FFmpeg时,要确保启用了OpenCV需要的核心模块和设备支持,比如:

    ./configure --prefix=/home/nyan/ffmpeg_build \
                --enable-gpl \
                --enable-nonfree \
                --enable-swscale \
                --enable-avcodec \
                --enable-avformat \
                --enable-v4l2_m2m \  # 支持V4L2硬件加速,可选但推荐
                --disable-avresample \  # 3.4.1不需要这个废弃库了
                [你的其他参数]
    make -j$(nproc) && sudo make install
    

    这些参数能保证FFmpeg具备被OpenCV调用的必要功能。

  3. 编译完成后的验证步骤
    重新编译安装OpenCV:

    make -j$(nproc) && sudo make install
    sudo ldconfig  # 更新系统库缓存
    

    然后再次用opencv_version --verbose确认FFmpeg已集成。接下来测试摄像头:

    • 先检查系统里的视频设备是否存在:ls /dev/video*,如果能看到/dev/video0之类的设备,说明硬件没问题。
    • 可以用OpenCV自带的测试程序验证:./opencv/build/bin/opencv_test_videoio,看是否能成功读取摄像头画面。

最后,Ubuntu16.04的系统依赖比较旧,如果你遇到一些奇怪的编译错误,可以先补全这些基础依赖:

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev

内容的提问来源于stack exchange,提问作者batuman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:59:56