Запуск 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)