mingw64 编译ffmpeg 64 for Windows Width CUDA
Download msys2
首先我们在http://msys2.github.io/ 下载msys2
lauch mingw64
msys2_shell.cmd -mingw64
install gcc g++
pacman -S gcc make pkg-config vim
pacman -Sl | grep "gcc"查看gcc是否安装完成
关闭mingw 然后写一个bat脚本来启动mingw64
set MSYS2_PATH_TYPE=inherit
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
msys2_shell.cmd -mingw64
install CUDA codec headers
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make
sudo make install
if you need low version, you should git fetch origin sdk/8.0 && git checkout sdk/8.0
Compile && install
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" ./configure --prefix=./build \ --extra-cflags="-I/usr/local/include" \--arch=x86_64 --toolchain=msvc --as=yasm \ --enable-static \ --disable-shared \--enable-cuvid \ --enable-nvenc \ --enable-nonfree \
--disable-filters
make
make install
如果需要编译cuda 滤镜 需要加上这两个
--enable-cuda \
--enable-cuda-nvcc \
若使用Clang 编译
步骤和上述类似, 只是有两个地方需要更改
- 启动msys2 后面的选项为 msys2_shell.cmd -clang64
- --extra-ldflags 加入 msvcrt.lib
可能遇到的问题
uncoded_frame' doesn't match the target pattern
解决办法 ffmpeg 不知道改了啥东西, 删了重新编译就好了
ffnvcode 依赖问题
编译nv的那个头文件库, 记得PKG_CONFIG_PATH 设置为/usr/local/lib/pkgconfig
使用时出现 MFCreateMediaType
avcodec.lib(mfenc.o) : error LNK2019: 无法解析的外部符号 MFCreateMediaType,函数 mf_choose_output_type 中引用了该符号
1>avcodec.lib(mfenc.o) : error LNK2001: 无法解析的外部符号 IID_ICodecAPI
#pragma comment(lib, "Mfuuid.lib")
#pragma comment(lib, "Strmiids.lib")
#pragma comment(lib, "Mfplat.lib")
#pragma comment(lib, "Bcrypt.lib")
#pragma comment(lib, "Secur32.lib")
#pragma comment( lib, "ws2_32.lib")
clang 编译时遇到错误
LINK : error LNK2001: 无法解析的外部符号 mainCRTStartup
该编译为编译静态库, --cc 不要去定义为clang 默认就好了 具体原因未知
使用时hw_get_frame_buffer 获得的指针为空:
ffmpeg版本问题 从4.1.7 升级到 4.4.1 就没有这个问题了
编译FFmpeg4.4 出现libavfilter/vf_scale_cuda_bicubic.ptx.c(2818): fatal error C1060: compiler is out of heap space
不要将scale_cuda 编译进去或者 --disable-filters
configure 出现 ERROR: cuvid requested, but not all dependencies are satisfied: ffnvcodec
ffnvcodec 太低了 用的 8.2 版本
运行出现驱动崩溃bug cuGraphicsGLRegisterImage
388 驱动有bug 需要升级驱动