ffmpeg错误:在Windows中找不到libnpp

时间:2017-01-26 09:16:03

标签: windows ffmpeg cuda nvenc

我正在尝试使用nvidia库在Windows中编译ffmpeg,以便使用MinGW / msys进行硬件加速。试图按照nvidias website上的说明进行操作(部分:使用NVIDIA GPU开始使用FFmpeg / libav)。配置为 - enable-nonfree --disable-shared --enable-nvenc --enable-cuda --enable-cuvid --enable-libnpp --extra-cflags = -Ilocal / include --extra-cflags = -I ../ common / inc --extra-ldflags = -L ../common / lib / x64 --prefix = ffmpeg 但停在"错误:未找到libnpp。 " NVIDIA Video Codec SDK 下载公共文件夹,但没有npp libs或头文件。那有什么解决方案吗?感谢edvice。

4 个答案:

答案 0 :(得分:9)

我设法成功地在linux下定位了 ffmpeg ,目标是使用 - enable-libnpp 包含Windows 64位。

我的环境是Ubuntu Server 16.10 64bit 在全新安装后,我使用以下命令安装了MinGW:

sudo apt-get install mingw-w64

首先,我按照NVIDIA开发网站Compile Ffmpeg with NVIDIA Video Codec SDK上的说明激活了 - enable-libnpp 选项,成功编译了Linux版本。
为此,您需要安装CUDA Toolkit。只需按照说明操作,软件包安装程序就会创建符号链接(我有CUDA Toolkit 8.0):

  

/ usr / local / cuda / include / - > /usr/local/cuda-8.0/targets/x86_64-linux/include
  / usr / local / cuda / lib64 / - > /usr/local/cuda-8.0/targets/x86_64-linux/lib

这应该提供配置正确的路径来查找正确的库和标题 我用来编译ffmpeg的linux版本的命令行是:

./configure --enable-nonfree --disable-shared --enable-nvenc --enable-cuda --enable-cuvid --enable-libnpp --extra-cflags=-I/usr/local/cuda/include/ --extra-ldflags=-L/usr/local/cuda/lib64/

您遇到的问题是,在使用交叉编译时,您需要提供配置正确的路径,以便在Windows版本的 libnpp 库中查找标头和库。
从上面提到的CUDA Toolkit下载页面,我只下载了Windows软件包的 exe(本地)版本。
在我的工作文件夹的根目录下,我创建了一个名为 tmp 的文件夹,其中我复制了在 cuda_8.0.61_win10.exe包中的 npp_dev 下找到的子文件夹

cuda_8.0.61_win10.exe\npp_dev\lib -> tmp/lib  
cuda_8.0.61_win10.exe\npp_dev\include -> tmp/include

作为最后一步,我使用以下参数再次启动配置

./configure --arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- --pkg-config=pkg-config --enable-nonfree --disable-shared --enable-nvenc --enable-cuda --enable-cuvid --enable-libnpp --extra-cflags=-I/usr/local/include --extra-cflags=-I/usr/local/cuda/include/ --extra-ldflags=-L/usr/local/cuda/lib64/ --extra-cflags=-I../tmp/include/ --extra-ldflags=-L../tmp/lib/x64/

汇编成功完成。当我将 ffmpeg.exe 文件复制到Windows并尝试执行它时,我收到一条错误消息,说可执行文件丢失了一些npp _ * .dll。
从包 cuda_8.0.61_win10.exe 我将包含在文件夹 npp \ bin 中的所有dll复制到我放入的同一目录 ffmpeg.exe
之后,应用程序正常运行,并按预期完成从4K文件的简单转换。

答案 1 :(得分:1)

这似乎是由FFmpeg代码库中的配置脚本损坏引起的。在最近的CUDA发行版中没有名为npp的库,而是在Windows平台上

nppc.lib
nppi.lib
npps.lib

并在linux上

libnppc.so
libnppi.so
libnpps.so

您需要自己修改配置系统或向项目开发人员提交错误请求以便为您完成。

使用MinGW构建项目可能还有其他问题,但这超出了Stack Overflow问题的范围。

答案 2 :(得分:1)

如果你检查config.log,可能会有很多链接警告:
LINK : warning LNK4044: unrecognized option '/L...'; ignored
导致
ERROR: libnpp not found
由于/ L不是msvc链接器的正确参数,因此为了包含库路径,参数应如下所示:
./configure .... --extra-cflags=-I/usr/local/cuda/... --extra-ldflags=-LIBPATH:/usr/local/cuda/...
这应该能够解决libnpp未找到的问题。 仅供参考,链接器选项列在以下链接中(包括 LIBPATH ): Linker Options

答案 3 :(得分:0)

实际上,我对ffmpeg的构建没有相同的问题发了疯。我最终设法使其在Windows 10 x64下工作:

  1. https://www.msys2.org/下载msys2并使用Pacman安装所有软件包
    1. pacman -Su
    2. pacman -S make
    3. pacman -S diffutils
    4. pacman -S yasm
    5. pacman -S mingw-w64-x86_64-gcc
    6. pacman -S mingw-w64-x86_64-toolchain
    7. 也许是可选步骤:将pkgconfig添加到环境变量PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
    8. 将其他已安装的工具链添加到路径PATH=$PATH:/opt/bin
  2. 从nVidia https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exenetwork下载并安装Cuda
  3. 复制nVidia文件

    1. 在硬盘上搜索nvcc包含目录,例如C:\Program Files\NVIDIA Corporation\Installer2\nvcc_10.1.{542BC78D-DEB7-47AA-B531-BA67A40AB678}\include并将文件复制到您的msys2,例如C:\msys64\tmp\nvidia_include
    2. 在硬盘上搜索npp_dev lib目录,例如C:\Program Files\NVIDIA Corporation\Installer2\npp_dev_10.1.{00719503-CFFE-40D7-A2A6-7108A2AE59B5}\lib\x64并将lib \ x64复制到您的C:\msys64\tmp\nvidia_lib\x64
    3. 在硬盘上搜索npp_dev包括例如C:\Program Files\NVIDIA Corporation\Installer2\npp_dev_10.1.{00719503-CFFE-40D7-A2A6-7108A2AE59B5}\include并将副本包含到C:\msys64\tmp\nvidia_npp_include
  4. git clone https://git.ffmpeg.org/ffmpeg.gitC:\msys64\home\<user>

  5. git clone https://github.com/libav/libavC:\msys64\home\<user>
  6. 可能是可选步骤:git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.gitC:\msys64\home\<user>
    1. make
    2. make install
    3. 将ffnvcodec.pc复制到C:\msys64\usr\local\lib\pkgconfig
  7. 以后需要ffmpeg时,需要构建libav avconv.exeavprobe.exe
    1. cd C:\msys64\home\<user>\libav
    2. ./configure
    3. make
    4. make install
  8. 最后构建ffmpeg:
    1. cd C:\msys64\home\<user>\ffmpeg
    2. ./configure --enable-nonfree --disable-shared --enable-nvenc --enable-cuda --enable-cuvid --enable-libnpp --extra-cflags=-I/tmp/nvidia_npp_include --extra-cflags=-I/tmp/nvidia_include --extra-ldflags=-L/tmp/nvidia_lib/x64
    3. make
    4. make install
    5. avconv.exeavprobe.exe复制到ffmpeg目录

完成。

广告定位:

  • 缺少DLL:在硬盘或Internet上找到x64缺少的DLL。
  • 使用依赖遍历器分析错误
  • 下载最新的nVidia驱动程序并使用nSight,以确保图形卡支持CUVID。