Docker中构建NVIDIA GPU加速FFmpeg时无法加载指定库的问题咨询
解决Docker镜像中缺失NVIDIA编码/解码库的方案
我基于nvidia/cuda:12.0.1-devel-ubuntu20.04镜像构建带GPU加速的FFmpeg后,运行测试命令:
ffmpeg -y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -i bbb.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4
出现以下错误:
[h264 @ 0x55bd878c2d80] Cannot load libnvcuvid.so.1 [h264 @ 0x55bd878c2d80] Failed loading nvcuvid. [h264 @ 0x55bd878c2d80] Failed setup for format cuda: hwaccel initialisation returned error. [h264_nvenc @ 0x55bd86f5e680] Cannot load libnvidia-encode.so.1 [h264_nvenc @ 0x55bd86f5e680] The minimum required Nvidia driver for nvenc is 520.56.06 or newer
宿主机nvidia-smi显示驱动版本525.85.05,CUDA版本12.0,确认libnvcuvid.so.1和libnvidia-encode.so.1不在当前Docker镜像中,以下是可行的添加方案:
可行方案
1. 挂载宿主机驱动库到容器
运行容器时通过--gpus all参数启用GPU支持,同时挂载宿主机的NVIDIA驱动库目录到容器内对应路径,让容器直接复用宿主机的编码/解码库:
docker run --gpus all -v /usr/lib/nvidia:/usr/lib/nvidia -v /usr/lib/x86_64-linux-gnu/nvidia:/usr/lib/x86_64-linux-gnu/nvidia your-ffmpeg-image
优点:无需修改镜像,操作简单;库版本和宿主机保持一致,兼容性有保障。
注意:需确保宿主机驱动版本(525.85.05)和容器内CUDA版本(12.0)兼容,当前版本组合符合要求。
2. 在Dockerfile中安装驱动运行时库
构建镜像时,添加步骤安装NVIDIA驱动运行时包,以Ubuntu20.04为例:
# 基于原镜像 FROM nvidia/cuda:12.0.1-devel-ubuntu20.04 # 添加NVIDIA软件源 RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub RUN echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 /" > /etc/apt/sources.list.d/cuda.list # 安装驱动运行时和编码库 RUN apt-get update && apt-get install -y --no-install-recommends \ nvidia-driver-525 \ nvidia-cuda-toolkit \ libnvcuvid1 \ libnvidia-encode1
优点:镜像自带所需库,不依赖宿主机驱动版本(只要满足最低要求);容器可独立运行。
注意:安装驱动可能需要构建时启用特权模式,镜像体积会增大。
3. 使用预构建的NVIDIA加速FFmpeg镜像
直接使用NVIDIA官方提供的预构建FFmpeg镜像,无需自行编译:
docker run --gpus all nvidia/ffmpeg -y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -i bbb.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4
优点:最省心,官方维护,确保库和FFmpeg版本兼容;无需编译和配置。
内容的提问来源于stack exchange,提问作者konovification
相关产品推荐
相关产品推荐

