FFmpeg介绍
工业场景下,图像模型部署往往需要配合多路视频流硬件解码。而FFmpeg 是最流行的多媒体转码软件,集成了市面上大部分编解码器:
https://trac.ffmpeg.org/wiki/HWAccelIntro
其中英伟达的NVENC/NVDEC支持最广
英伟达NVDEC和NVENC
https://docs.nvidia.com/video-technologies/video-codec-sdk/12.2/ffmpeg-with-nvidia-gpu/index.html
FFmpeg定制管道在GPU上进行解码与AI推理,市面上开源的案例很少:
https://cloud.tencent.com/developer/article/2257849(开源,ffmpeg命令行启动)
https://cloud.tencent.com/developer/article/2013062(腾讯,暂未开源)
下面是一个博主,写了一些硬件解码的博客:
OpenCV+NVDEC
https://blog.csdn.net/jiexijihe945/article/details/125084488
OpenCV+GStreamer
https://blog.csdn.net/jiexijihe945/article/details/125928135
英特尔的dxva2解码+d3d9渲染方式作者不推荐使用,但是调用的坑比较少,易上手。
https://blog.csdn.net/COCO56/article/details/89517157
ffmpeg+NVDEC python示例
https://blog.csdn.net/qq_43513908/article/details/138194947
ffmpeg命令 通过命令 ffmpeg -hwaccels
可以查询系统支持的硬件加速器。
https://juejin.cn/post/7034411980316213256
FFmpeg编译
ffmepg编译静态库相对于动态库更简单,但是需要注意,如果使用Pytorch调用ffmpeg,必须使用动态库。以下是一些安装方式:
1. media-autobuild_suite工具
对网络要求很高,即使使用VPN也很难编译完成
https://trac.ffmpeg.org/wiki/CompilationGuide
github.com/m-ab-s/media-autobuild_suite
https://www.youtube.com/watch?v=Z8UOtaxHGIU
2. MSYS2编译(编译动态库推荐)
https://blog.csdn.net/dbyoung/article/details/100030912
参考https://blog.csdn.net/m0_63230155/article/details/132216971先安装MSYS2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 1.需要编译安装nv-codec-headers库,打开一个mingw64的窗口 git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git cd /d/patch/nv-codec-headers # 切换到对应cuda版本 git checkout remotes/origin/sdk/12.1 make make install # 新建一个mingw64的窗口 声明编译好的nv-codec-headers 继续安装ffmpeg export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" export PATH="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.0/bin:$PATH" export CUDACXX="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.0/bin/nvcc" export CUDA_HOME="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.0" # 2.安装ffmpeg 版本6.1.1,最新的版本7有问题 cd /d/patch/ffmpeg-6.1.1/ffmpeg-6.1.1 # 直接安装ffmpeg报错 使用pacman安装缺失的包,缺啥装啥 pacman -S nasm ... # 编译安装 chocolatey --enable-avisynth --enable-libvo-amrwbenc --enable-amf --enable-cuda-llvm ./configure --prefix=../ffmpeg_buildout --disable-static --enable-shared --enable-gpl --enable-version3 --disable-ffplay --enable-ffmpeg --disable-x86asm --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband make -j4 make install -j4 # ffmpeg同级路径会出现一个ffmpeg_builtout目录,修改为ffmpeg,添加至环境变量 |
3. 直接下载编译好的(编译静态库推荐)
windows下载编译好的ffmpeg,自带nvdec nvenc等外部库。将源码目录下的bin文件夹增加至环境变量。
https://trac.ffmpeg.org/wiki/CompilationGuide
https://www.cnblogs.com/kongbursi-2292702937/p/17564385.html
https://github.com/BtbN/FFmpeg-Builds/releases(直接下载就能用)
命令行测试可以调用GPU100%
1 2 3 4 |
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4 # -hwaccel nvdec也可以 ffmpeg -y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4 |
ffmpeg-python
https://github.com/kkroening/ffmpeg-python/issues/284