windows ffmpeg msvc x64编译
libx265
libx264
编译参考文档: 在windows下使用MSVC编译ffmpeg
-
安装msys2:类似unix环境,用来编译
-
通过vs命令行进入,选择
x64 Native Tools Command Prompt for VS 2022
-
进入到安装好的msys2文件夹,找到一个msys2_shell.cmd的文件
-
修改C:\msys64\msys2_shell.cmd文件,将 rem set MSYS2_PATH_TYPE=inherit 修改成 set MSYS2_PATH_TYPE=inherit (
rem
是注释命令,取消是为了 让 MSYS2 环境兼容 Windows 原生工具),增加如下变量:set MSYS2_ARG_CONV_EXCL=*
,以防止标志服因为风格问题被篡改 -
进入到msys2的环境:
以默认终端,不打开新的新的命令行窗口(就是msys2提供的终端),然后继承当前环境的系统变量进入到当前目录,在mingw64的环境里
msys2_shell.cmd -defterm -full-path -no-start -here -mingw64
-
输入
cl
验证环境是否生效 -
msys2
link优先级降低,mv usr/bin/link.exe usr/bin/link.exe.bak
-
安装一些环境
pacman -Syu pacman -R mingw-w64-x86_64-pkgconf pacman -S mingw-w64-x86_64-pkg-config pacman -S pkg-config pacman -S diffutils pacman -S make
-
-
安装yasm nasm:用于优化的编码器 解码器
FFmpeg 中的许多编解码器(如 H.264、H.265、VP9 等)包含高度优化的汇编代码,这些代码需要 Yasm 或 NASM 进行编译
-
NASM:Windows 平台必备,用于编译 x86/x64 架构的优化代码
下载方式:
- 官网,类似如下路径:
[Index of /pub/nasm/releasebuilds/2.16.03/win64](https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/)
- 安装后解压,解压路径加入环境变量
nasm -v
验证是否安装成功
- 官网,类似如下路径:
-
Yasm:Linux/macOS 平台常用,但在 Windows 上也需要用于某些特定优化
下载方式:
- 官方下载:
[yasm.tortall.net](https://yasm.tortall.net/)
- 官网无法访问,可以github下载:
https://github.com/yasm/yasm/releases/tag/v1.3.0
.exe
文件改名为yasm.exe
- 将下载路径加入环境变量
- 验证:
yasm --version
- 官方下载:
-
-
编译x264
-
源码:
git clone https://code.videolan.org/videolan/x264.git
-
编译:
-
构建:执行以下脚本:最重要的是 CC=cl 因为x264的编译,选项没有提供CC的选项, CC=cl可以写入./configure, 头一次编译没生效,不确定是这里还是
link
问题BUILD_DIR="/home/X264msvc64" CC=cl ./configure --prefix=$BUILD_DIR/ --enable-static --enable-shared --enable-pic --disable-opencl --disable-cli
-
编译:
make&&make install
-
修改pc文件:链接库选择动态库导出库
prefix=/mingw64 exec_prefix=${prefix} libdir=${exec_prefix}/lib/x264 includedir=${prefix}/include/x264Name: x264 Description: H.264 encoder library Version: 0.165.3215M Libs: /LIBPATH:${libdir} libx264.dll.lib Libs.private: Cflags: /I${includedir} -DX264_API_IMPORTS
-
-
-
编译x265
-
源码:
git clone https://bitbucket.org/multicoreware/x265_git.git
-
编译:
-
x265是个cmake工程,已经提供了各种环境变异的脚本,进入到
x265_git\build\msys-cl\
,选择64bit版本,64bit
会对which cl
值和target_processor
,确认是64可以将这段注释掉 -
对脚本进行部分修改,添加
INSTALL_DIR
#!/bin/sh # This is to generate visual studio builds with required environment variables set in this shell, useful for ffmpeg integration # Run this from within an MSYS bash shelltarget_processor='amd64' path=$(which cl) INSTALL_DIR="/home/25094/x265Msvc64"if cl; thenecho elseecho "please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64'"echo "and then launch msys bash shell from there"exit 1 fi#if [[ $path == *$target_processor* ]]; then # echo #else # echo "64 bit target not set, please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64 | x86_amd64 | amd64_x86'" # exit 1 #ficmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4" ../../source if [ -e Makefile ] thennmake fi
-
./make-Makefiles-64bit.sh
-
修改pc文件:链接库选择动态库导出库
prefix=/mingw64 exec_prefix=${prefix} libdir=${exec_prefix}/lib/x265 includedir=${prefix}/include/x265Name: x265 Description: H.265/HEVC video encoder Version: 4.1 Libs: /LIBPATH:${libdir} libx265.lib Libs.private: Cflags: /I${includedir}
-
-
-
sdl编译,主要选2,不要选3
-
下载:Releases · libsdl-org/SDL
-
三方库配置
-
include:
mkdir -p /mingw64/include/SDL2; cp -r include /mingw64/include/SDL2/
-
lib:
mkdir -p /mingw64/lib/SDL2; cp -r lib/x64/* /mingw64/lib/SDL2/
-
pc:
touch /mingw64/lib/pkgconfig/SDL2.pc
内容如下:
prefix=/mingw64 exec_prefix=${prefix} libdir=${exec_prefix}/lib/SDL2 includedir=${prefix}/include/SDL2Name: SDL2 Description: SDL2 Description Version: 2.26.5 Libs: -L${libdir} -lSDL2 -lSDL2main Libs.private: Cflags: -I${includedir}
-
-
-
ffmpeg编译
-
cd到
ffmpeg
源码,开始构建,执行如下脚本echo $PKG_CONFIG_PATH; pkg-config --cflags --libs SDL2; #X264_INSTALL=D:/MSYS2/home/25094/new-X264msvc64;X264_LIB=$X264_INSTALL/lib; #X265_INSTALL=D:/MSYS2/home/25094/new-X265msvc64;X265_LIB=$X265_INSTALL/lib; #export PKG_CONFIG_PATH=$X264_LIB/pkgconfig:$X265_LIB/pkgconfig:$PKG_CONFIG_PATH pkg-config --cflags --libs x264; pkg-config --cflags --libs x265;#export CFLAGS="$CFLAGS -I/mingw64/include/x264 -I/mingw64/include/x265" #export LDFLAGS="$LDFLAGS -L/mingw64/lib/x264 -L/mingw64/lib/x265 -lx264 -lx265 -lstdc++" #export CFLAGS="$CFLAGS /ID:/MSYS2/mingw64/include/x264 /ID:/MSYS2/mingw64/include/x265" #export LDFLAGS="$LDFLAGS /LIBPATH:D:/MSYS2/mingw64/lib/x264 /LIBPATH:D:/MSYS2/mingw64/lib/x265 x264.lib x265.lib"#export CFLAGS="$CFLAGS -I/mingw64/include" # x265 头文件通常直接在 include/ 下 #export LDFLAGS="$LDFLAGS -L/mingw64/lib -lx265 -lstdc++" # x265 需要额外链接 libstdc++ BUILD_DIR="/home/25094/ffmpeg60_build"; ./configure \--target-os=win64 \--toolchain=msvc \--cc=cl \--cxx=cl \--arch=x86_64 \--enable-shared \--enable-libx264 \--enable-libx265 \--enable-gpl \--enable-nonfree \--prefix="$BUILD_DIR" #--pkg-config="/d/MSYS2/home/25094/ffmpeg-6.1.2/pkg-config"#--extra-cflags="/ID:/MSYS2/mingw64/include/x264 /ID:/MSYS2/mingw64/include/x265" \--extra-ldflags="/LIBPATH:D:/MSYS2/mingw64/lib/x264 /LIBPATH:D:/MSYS2/mingw64/lib/x265 x264.lib x265.lib libcmt.lib" \
-
faq
- 出现错误可以查看
ffbuild/config.log
- 一定要设置
MSYS2_ARG_CONV_EXCL
,否则路径风格 前缀转换会把/开头字符搞混乱 - x264 x265静态库用来连接会出问题,选择动态库导出表来连接
- 如果x264 x265的pc文件没有放入标准路径,需要修改
PKG_CONFIG_PATH
环境变量,将x264 x265的pc文件加入
- 出现错误可以查看
-
编译:
- 修改
config.h
: 将第9行CC_IDENT
那的中文删除 make -j4&& make install
- 修改
-