我成功地在包含 --enable-libnpp 的 linux 下针对 Windows 64 位成功交叉编译 ffmpeg。
我的环境是 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
这应该提供配置找到正确库和头文件的正确路径。
我用来编译linux版ffmpeg的命令行是:
./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(local) 版本。
在我的工作文件夹的根目录下,我创建了一个名为 tmp 的文件夹,我在其中复制了我在 cuda_8.0.61_win10.exe 包内的 npp_dev 下找到的子文件夹em>:
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 文件的简单转换。