Запуск ffmpeg с nvenc внутри докера nvidia

Я установил Nvidia Video Codec SDK 8.2 + ffmpeg внутри контейнера докера с помощью nvidia-docker, но когда я запускаю это

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

Минимальный требуемый драйвер Nvidia для nvenc - 390,25 или более поздняя. Ошибка инициализации выходного потока 0:0 - Ошибка при открытии кодировщика для выходного потока #0:0 - возможно, неверные параметры, такие как bit_rate, rate, width или height

В противном случае nvidia-smi отображает это

этот графический процессор используется GeForce 1050 Ti, а версия cuda - 9.0

2 ответа

При работе внутри контейнера Docker по умолчанию не все библиотеки Nvidia монтируются внутри контейнера. Подробнее читайте здесь и здесь . Вы можете увидеть все библиотеки, доступные в вашем контейнере Docker, запустив это: ldconfig -p | grep -E 'libcuda|libnvidia'

Чтобы исправить это, вы должны изменить NVIDIA_DRIVER_CAPABILITIESпеременная среды в вашем образе Docker. Например, вы можете добавить ENV NVIDIA_DRIVER_CAPABILITIES=allв свой Dockerfile, чтобы смонтировать все библиотеки/двоичные файлы в вашем контейнере Docker.

Тем самым libnvidia-encodeбиблиотека также будет смонтирована, поэтому FFMPEG сможет использовать кодек NVENC.

Если вы используете nvidia-docker для запуска образа docker, то все должно быть взято с хоста. Сначала вы должны установить cuda на хост-систему. "sudo apt-get install cuda" и затем запустите образ докера.

Вы также должны использовать образ nvidia-cuda вместо linux (в dockerfile)

Другие вопросы по тегам