我正在尝试在 Debian 9.3 上编译支持 Nvidia Cuda 的 FFMPEG。我使用的参数如下:
--enable-cuda --enable-cuvid --enable-nvenc --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-gpl --enable-libx264 --disable-x86asm --enable-libx265 --enable-libfdk-aac --enable-nonfree
已安装 Nvidia Cuda 及其驱动程序。当我尝试配置 ffmpeg 时,它显示:
ERROR: cuvid requested, but not all dependencies are satisfied: cuda
较新的 ffmpeg 将显示类似的、重新措辞的消息:
ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec
我完全不知道为什么我会遇到这个问题,因为我正在ffmpeg
我们所有的转码服务器上进行编译。
答案1
NVIDIA 标头已从 FFmpeg 代码库移出到独立存储库提交27cbbbb. 从提交信息中:
ffmpeg 代码库不再欢迎外部标头,因为它们会增加维护负担。但是,在 NVidia 的情况下,原始标头需要进行一些修改才能在 ffmpeg 中使用,因此我们仍然提供它们,但在单独的存储库中。
另外,来自FFmpeg 维基:HWAccelIntro:
FFmpeg 现在使用其自己的略微修改过的运行时加载器来处理 nvidias CUDA/nvenc/nvdec 相关库。如果您从 configure 中收到有关缺少 ffnvcodec 的错误,这就是您所需要的。
它有
Makefile
一个安装目标:make install PREFIX=/usr
FFmpeg 将查找
pkg-config
名为 的文件ffnvcodec.pc
。确保它在您的 中PKG_CONFIG_PATH
。
要编译 FFmpeg NVIDIA 标头(“ffnvcodec”):
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make
sudo make install
现在像往常一样编译ffmpeg
。应该自动检测标题。如果没有,则声明指向运行时位于FFmpegPKG_CONFIG_PATH
的路径。例如:ffnvcodec.pc
configure
PKG_CONFIG_PATH="/path/to/lib/pkgconfig" ./configure
答案2
我遇到了类似的错误,但结果发现,这是由于缺少工具包配置引起的。在 Ubuntu 16.04 上,你可以运行
apt-get install pkgconf
并检查丢失的包是否真的丢失:
pkgconf --list-all | grep package-name
答案3
这可能是由于 nv-codec-headers 和 FFmpeg 之间的版本不匹配而导致的。原因:我遵循了特定的说明,将 nv-codec-headers 固定为 n8.2.15.8,但将 FFmpeg 保留在 master 上。
从标签 n4.4 开始,FFmpeg 需要该CUVIDAV1PICPARAMS
结构。该结构仅在从标签 n11.0.10.0 开始的 nv-codec-headers 的 dynlink_cuviddec.h 中找到。
我已在 Ubuntu 18.04LTS nvidia-docker 镜像中成功配置/编译了 nv-codec-headersn11.1.5.1
和 FFmpegn5.1.2
以用于 CUDA 11.4(需要附加参数/环境变量:
PKG_CONFIG_PATH="<path_to_ffnvcodec.pc_folder>"
和--nvccflags="-gencode arch=compute_52,code=sm_52 -O2"
)
答案4
https://github.com/FFmpeg/FFmpeg/commit/27cbbbb33f259de7c795d2b75edf7b240f0f82e6
我发现此提交代码发生错误。使用以前的提交代码
git 克隆https://github.com/FFmpeg/FFmpeg.git
git 签出 7414d0bda7763f9bd69c26c068e482ab297c1c96
git reset --hard