在 nvidia docker 中使用 nvenc 运行 ffmpeg

Posted

技术标签:

【中文标题】在 nvidia docker 中使用 nvenc 运行 ffmpeg【英文标题】:running ffmpeg with nvenc inside nvidia docker 【发布时间】:2019-02-03 09:12:17 【问题描述】:

我使用 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

我收到了这个错误

无法加载 libnvidia-encode.so.1

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

否则nvidia-smi会显示这个

使用的这个 gpu 是 GeForce 1050 Ti 并且 cuda 版本是 9.0

【问题讨论】:

也许调整 ffmpeg 代码以告诉您它认为它是什么版本... 【参考方案1】:

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

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

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

【讨论】:

你的评论怎么不是接受答案?你只需要从字面上做到这一点。【参考方案2】:

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

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

【讨论】:

以上是关于在 nvidia docker 中使用 nvenc 运行 ffmpeg的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NVidia NVEnc 硬件编码器通过 UDP 流式传输 H.264 视频?

如何在ffmpeg中指定nvenc使用的GPU [关闭]

如何在ffmpeg中指定nvenc要使用的GPU [关闭]

如何在 ffmpeg 3.2.0 的多个 nvidia gpu 中选择 gpu?

ffmpeg,英伟达jetson盒子看不到显卡驱动版本问题源码分析(The minimum required Nvidia driver for nvenc is xxx or newer)

ffmpeg,英伟达jetson盒子看不到显卡驱动版本问题源码分析(The minimum required Nvidia driver for nvenc is xxx or newer)