在 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 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)