FFmpeg NVIDIA环境配置过程

前言

本人近期在研究雄迈网络摄像头的拉流解码和人脸识别,在使用opencv-tensorflow实现了人脸识别后,发现其CPU的占用率在15%以上,考虑到后续的扩展希望将拉流的工作转移至FFmpeg-gpu来实现。本文目的是对新version的ffmpeg在windows操作系统条件下,使用msys配置环境。

官方文档

NVIDIA官方FFmpeg文档
FFmpeg-wiki官方文档
有兴趣的同学可以去学习,由于每个版本的升级变化,每次配置的方式都是不同的,所以留下来会有很多的问题需要处理。

前序安装

  1. Visual Studio Professional 2017(含所有的SDK);
  2. CUDA;
  3. CMAKE;
  4. msys2;
  5. Git;
  6. Vulkan;
  7. Video_Codec_SDK;

相关库文件下载

FFmpeg 4.3.1 release
VideoLAN/ x264
nv-codec-headers
注意可以使用最新版本

编译步骤

1. CMAKE-Video_Codec_SDK

根据Video_Codec_SDK官方文档说明,需要使用CMAKE进行配置,其中source指向/Video_Codec_SDK_11.0.10/Samples(文件夹位置自行调整),build指向/Video_Codec_SDK_11.0.10/build。
本人首次配置时,出现了VULKAN-PATH的报错,后下载Vulkan,path环境变量指向安装路径\Program Files\VulkanSDK\1.2.154.1\Bin(文件夹位置自行调整),问题解决。之后就是配置生成过程,在VS中ALL_BUILD&INSTALL即可。

2. 配置msys2

安装msys2后,找到x64 native tools command prompt for vs 2017。打开确认[vcvarsall.bat] Environment initialized for: ‘x64’。根据msys2安装目录,输入\msys64\msys2_shell.cmd -mingw64 -use-full-path(文件夹位置自行调整)

启动msys2后,开始执行以下操作:

pacman -Syu
pacman -Su
pacman -S diffutils make pkg-config nasm

完成操作后,需进行以下确认:

which yasm
which nasm
which make

这里值得注意的是,NVIDIA官方文档给出的pacman安装步骤中,要执行yasm的安装,实际是无法下载安装包的。这里在pacman -Syu这一步就执行了yasm的安装,如果执行which yasm出现问题,自行下载yasm安装包,配置环境变量即可。例如:

export PATH="/msys/var/cache/pacman/pkg/yasm-1.3.0-2-x86_64/usr/bin":$PATH
#(文件夹位置自行调整)

3. 配置X264

找到cl.exe文件在Visual Studio中的位置,例如:/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/
然后在msys2中,输入:

export PATH="/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/":$PATH
#(文件夹位置自行调整)

验证配置情况,输入:

which cl
which link

在确认无误后,cd进X264文件夹进行脚本配置:

CC=cl ./configure --enable-static --prefix=/x264config --disable-cli
#(/x264config文件夹位置自行调整)

结果无误后,顺序执行

make
make install

打开x264config\lib\pkgconfig文件夹,将x264.pc文件拷贝至\msys64\usr\lib\pkgconfig

4.配置nv-codec-headers

在msys2中,cd进入nv-codec-headers文件夹,输入:

make install PREFIX=/usr

打开nv-codec-headers文件夹,将ffnvcodec.pc文件拷贝至\msys64\usr\lib\pkgconfig

5.配置lib&include文件

按下列步骤执行:

mkdir /usr/local/include/
mkdir /usr/local/lib64
cp -R /C/Program\ Files/NVIDIA\ GPU\ Computing\ Toolkit/CUDA/v10.1/include/* /usr/local/include/
cp -R /C/Program\ Files/NVIDIA\ GPU\ Computing\ Toolkit/CUDA/v10.1/lib/x64/* /usr/local/lib64/
cp -R /x264config/include/* /usr/local/include/
cp -R /x264config/lib/* /usr/local/lib64/

X264文件夹自行调整

6.配置FFmpeg

cd进FFmpeg文件夹,执行下列代码:

./configure --enable-gpl --enable-shared --enable-libx264 --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --prefix=/d/FFmpeg --extra-cflags=-I/usr/local/include --extra-ldflags=-libpath:/usr/local/lib64 --toolchain=msvc

问题1:cl.exe问题
如果出现类似问题,请关闭msys2,在x64 native tools command prompt for vs 2017中输入\msys64\msys2_shell.cmd -mingw64。在msys2中重新配置

export PATH="/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/":$PATH

并检查cl&link的配置路径是刚才配置的路径

which cl
which link

问题2:–enable-libnpp报错
配置nv-codec-headers出现问题,需执行步骤4,并重新拷贝ffnvcodec.pc文件

问题3:有libx264警报
打开x264config\lib\pkgconfig文件夹,将x264.pc文件拷贝至\msys64\usr\lib\pkgconfig

执行./configure需要很长的时间,可进入FFmpeg/ffbuild文件中,观察config.log的执行状态。

完成上述配置后,顺序执行

make
make install

make过程同样会遇到问题
问题1:libx264配置出现问题,编译报错文件是ffmpeg_g.exe。
可以查看这个链接进行解决:https://stackoverflow.com/questions/62077528/compiling-static-libs-of-ffmpeg-with-x264-in-msys2-for-visual-studio-but-libx26

问题2:.c文件编译出现格式error
重新执行pacman进行安装。

pacman -Syu
pacman -Su
pacman -S diffutils make pkg-config nasm

验证结果

cmd进入D:\ffmpeg。执行下列代码进行验证:

ffmpeg -filters | findstr scale_npp

结果:

ffmpeg version 4.3.git-2b70201 Copyright (c) 2000-2020 the FFmpeg developers
  built with 用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.16.27043 版
  configuration: --enable-gpl --enable-libx264 --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --prefix=/d/FFmpeg --extra-cflags=-I/usr/local/include --extra-ldflags='-libpath:/usr/local/lib64' --toolchain=msvc
  	libavutil      56. 60.100 / 56. 60.100
  	libavcodec     58.111.101 / 58.111.101
  	libavformat    58. 62.100 / 58. 62.100
  	libavdevice    58. 11.102 / 58. 11.102
  	libavfilter     7. 88.100 /  7. 88.100
  	libswscale      5.  8.100 /  5.  8.100
  	libswresample   3.  8.100 /  3.  8.100
  	libpostproc    55.  8.100 / 55.  8.100
 ... scale_npp         V->V       NVIDIA Performance Primitives video scaling and format conversion

输入:

ffmpeg -encoders | findstr x264

结果:

ffmpeg version 4.3.git-2b70201 Copyright (c) 2000-2020 the FFmpeg developers
  built with 用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.16.27043 版
  configuration: --enable-gpl --enable-libx264 --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --prefix=/d/FFmpeg --extra-cflags=-I/usr/local/include --extra-ldflags='-libpath:/usr/local/lib64' --toolchain=msvc
  libavutil      56. 60.100 / 56. 60.100
  libavcodec     58.111.101 / 58.111.101
  libavformat    58. 62.100 / 58. 62.100
  libavdevice    58. 11.102 / 58. 11.102
  libavfilter     7. 88.100 /  7. 88.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
 V..... libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
 V..... libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)

输入:

ffmpeg -encoders | findstr nvenc

结果:

ffmpeg version 4.3.git-2b70201 Copyright (c) 2000-2020 the FFmpeg developers
  built with 用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.16.27043 版
  configuration: --enable-gpl --enable-libx264 --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --prefix=/d/FFmpeg --extra-cflags=-I/usr/local/include --extra-ldflags='-libpath:/usr/local/lib64' --toolchain=msvc
  libavutil      56. 60.100 / 56. 60.100
  libavcodec     58.111.101 / 58.111.101
  libavformat    58. 62.100 / 58. 62.100
  libavdevice    58. 11.102 / 58. 11.102
  libavfilter     7. 88.100 /  7. 88.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
 V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)
 V..... hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)

看到这里,我们的FFmpeg NVIDIA环境就配置成功了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值