我正在尝试编译一个支持使用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.
我还先于PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
之前写了./configure
,但也没有改变。
我在做什么错?我错过了重要的事情吗?
答案 0 :(得分:3)
使用ffmpeg仓库https://github.com/FFmpeg/nv-codec-headers,它是“与Nvidias编解码器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 差异!