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   需要升级驱动

posted @ 2022-03-02 11:16  洛笔达  阅读(718)  评论(0编辑  收藏  举报