在 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的主要内容,如果未能解决你的问题,请参考以下文章