使用 nvidia/cuda 编译 ffmpeg 加载 nvcuvid 失败
Posted
技术标签:
【中文标题】使用 nvidia/cuda 编译 ffmpeg 加载 nvcuvid 失败【英文标题】:compiling ffmpeg with nvidia/cuda failed loading nvcuvid 【发布时间】:2019-01-20 20:15:55 【问题描述】:我正在尝试编译支持使用 nvidia GPU 的 ffmpeg 二进制文件,我正在运行:
os: ubuntu 18.04
nvidia driver: nvidia-driver-390
cat /usr/local/cuda-9.0/version.txt => CUDA Version 9.0.176
gpu: 2x 1080ti
根据https://developer.nvidia.com/ffmpeg 上显示的说明,是:
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
./configure --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
我首先发现了错误ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec
,在https://superuser.com/questions/1299064/error-cuvid-requested-but-not-all-dependencies-are-satisfied-cuda-ffnvcodec 的帮助下得到了解决。以下是摘要(make 和 make install 只是给出了要运行的命令列表):
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
sed 's#@@PREFIX@@#/usr/local#' ffnvcodec.pc.in > ffnvcodec.pc
sudo install -m 0755 -d '/usr/local/include/ffnvcodec'
sudo install -m 0644 include/ffnvcodec/*.h '/usr/local/include/ffnvcodec'
sudo install -m 0755 -d '/usr/local/lib/pkgconfig'
sudo install -m 0644 ffnvcodec.pc '/usr/local/lib/pkgconfig'
完成后,我删除了 ffmpeg 文件夹,重新克隆它并在该文件夹中运行:
./configure --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda-9.0/include --extra-ldflags=-L/usr/local/cuda-9.0/lib64
make -j 10
请注意,路径 /usr/local/cuda-9.0 确实包含 include 和 lib64 文件夹,这不会导致任何错误,只是会出现弃用警告。
现在,当使用绝对路径运行这个特定的 ffmpeg 二进制文件时,使用标志 -hwaccel cuvid
会导致:
~/Documents/ffmpeg-cuda/ffmpeg/ffmpeg -y -hwaccel cuvid -c:v h264_cuvid -vsync 0 -i ~/test.mp4 -vf "scale_npp=1920:1072" -vcodec h264_nvenc ~/out1.mp4 -vf scale_npp=1280:720 -vcodec h264_nvenc out2.mp4
这正是他们在他们的网站上测试它的结果:
[h264_cuvid @ 0x556348eb94c0] Cannot load cuvidGetDecodeStatus
[h264_cuvid @ 0x556348eb94c0] Failed loading nvcuvid.
我在./configure
之前也加了:PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
,但也没什么区别。
我做错了什么?我错过了什么重要的事情吗?
【问题讨论】:
【参考方案1】:使用 ffmpeg 存储库 https://github.com/FFmpeg/nv-codec-headers,即 “与 Nvidia 编解码器 API 接口所需的 FFmpeg 版本的标头”,我看到了 Linux 需要 “396.24 或更高版本的事实司机”。并且至少只有 CUDA 工具包 9.2 支持此驱动程序版本。所以,我使用命令的顺序我已经忘记了,但大致如下所示,以便删除 nvidia 驱动程序和 cuda 软件;
sudo apt remove cuda
sudo aot-get autoremove --purge cuda
cd /var
# Here I removed files like cuda-repo-9-0-local-xxx
cd /etc/apt/sources.list.d
# Here I removed files like cuda-9-0-xxx.list/save
现在使用 GUI 软件和更新,在附加驱动选项卡中,有时不允许我从 390 更改为 396,所以我很确定我先更改为 Nouveau 显示驱动程序,重新启动计算机,然后选择 396 NVIDIA驱动程序(开源),再次重新启动计算机,然后现在使用 396,检查 nvidia-smi
显示 396.51。
然后我去了https://developer.nvidia.com/cuda-downloads并下载了 9.2 Linux Ubuntu 17.04 .deb 文件然后:
wget https://developer.nvidia.com/compute/cuda/9.2/Prod2/local_installers/cuda-repo-ubuntu1710-9-2-local_9.2.148-1_amd64
mv cuda-repo-ubuntu1710-9-2-local_9.2.148-1_amd64 cuda-repo-ubuntu1710-9-2-local_9.2.148-1_amd64.deb
sudo dpkg -i --force-overwrite cuda-repo-ubuntu1710-9-2-local_9.2.148-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-2-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda
现在安装了带有 nvidia-drvier 版本 396.51 的 CudaToolKit 9.2,重新执行我的问题中发布的步骤,在使用 -hwaccel cuvid
运行 ffmpeg 时没有错误。顺便说一句,这会产生 MASSIVE 的不同!
【讨论】:
哇,谢谢你,我从 ffmpeg 收到的错误消息非常具有误导性。我在 debian/unstable 上,nvidia 的 396.52 仍处于试验阶段,apt install -t experimental nvidia-kernel-dkms nvidia-cuda-dev
,重启,重建 ffmpeg 并启用 cuda,你应该一切顺利。以上是关于使用 nvidia/cuda 编译 ffmpeg 加载 nvcuvid 失败的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow/nvidia/cuda docker 版本不匹配
markdown 使用NVIDIA CUDA support.md在OSX上构建张量流