在 nvidia docker 中使用 nvenc 运行 ffmpeg

Gof*_*med 5 ffmpeg nvidia docker nvenc nvidia-docker

使用 nvidia-docker 在 docker 容器内安装了Nvidia Video Codec SDK 8.2 + ffmpeg但当我运行此命令时

ffmpeg -f rawvideo -s:v 1920x1080 -r 30 -pix_fmt yuv420p -i HeavyHand_1080p.yuv -c:v h264_nvenc -preset slow -cq 10 -bf 2 -g 150 output.mp4
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

无法加载 libnvidia-encode.so.1

nvenc 所需的最低 Nvidia 驱动程序为 390.25 或更高版本初始化输出流 0:0 时出错 - 打开输出流 #0:0 的编码器时出错 - 可能参数不正确,例如比特率、速率、宽度或高度

否则nvidia-smi显示此信息

在此输入图像描述

使用的GPU是GeForce 1050 Ticuda版本是9.0

mat*_*anb 11

在 Docker 容器内运行时,默认情况下并非所有 Nvidia 库都安装在容器内。请在此处此处阅读更多内容。您可以通过运行以下命令来查看 Docker 容器中可用的所有库:ldconfig -p | grep -E 'libcuda|libnvidia'

要解决此问题,您应该修改NVIDIA_DRIVER_CAPABILITIESDocker 映像中的环境变量。例如,您可以附加ENV NVIDIA_DRIVER_CAPABILITIES=all到 Dockerfile 以挂载 docker 容器中的所有库/二进制文件。

通过这样做,该libnvidia-encode库也将被安装,因此 FFMPEG 将能够使用 NVENC 编解码器。


小智 1

如果您使用 nvidia-docker 来运行 docker 镜像,那么一切都应该从主机获取。您应该首先在主机系统上安装 cuda。“sudo apt-get install cuda”,然后运行 ​​docker 映像。

您还应该使用 nvidia-cuda 映像而不是 linux (在 dockerfile 中)