windows编译ffmpeg源码(32位库)

一、编译安装工具

1:MSYS2

官网下载太慢,还要授权本人提供一个msys2-x86_64-20220603.exe安装包

https://download.csdn.net/download/weixin_38887743/88359602

2:Visual Studio

本人用的是vs2017版本

二、环境准备

ffmpeg源码 

官网:https://ffmpeg.org/

系统版本:windows10

x264源代码

x264是一个用于将视频流编码为H.264/MPEG-4 AVC压缩格式的免费软件库和应用程序。为了支持ffmpeg的H264编解码必须编译这个。

官网:https://www.videolan.org/developers/x264.html

版本:master分支

三、编译

1 :启动msys2

通过vs2017的命令行启动msys2,这样msys2可以获取到vs的环境变量。

编译32位和64位的动态库,只是启动的vs2017命令行不一样,其他执行操作都一样。下面以编译32位的动态库为例,启动msys2:

修改msys2的配置文件

修改msys2_shell.cmd文件,打开set MSYS2_PATH_TYPE=inherit的注释(使其能继承vs2017的命令行环境)
windows编译ffmpeg源码(32位库)_第1张图片

windows编译ffmpeg源码(32位库)_第2张图片

2:启动vs2017 x86(32位)命令行

如下可以看到32和64的命令行,这里我们启动x86 Native ToolsCommand Prompt for Vs2017

windows编译ffmpeg源码(32位库)_第3张图片

3:测试cl.exe的版本确实是x86(32)

4:启动msys2

windows编译ffmpeg源码(32位库)_第4张图片

启动后的msys2:

windows编译ffmpeg源码(32位库)_第5张图片

5:安装依赖项

# 安装mingw工具链
pacman -S mingw-w64-x86_64-toolchain

# 安装linux base-devel
pacman -S base-devel

# 安装汇编工具,gcc等
pacman -S yasm nasm gcc

6:源代码解压

将ffmpeg和x264源码解压放在如下对应目录:

windows编译ffmpeg源码(32位库)_第6张图片

7:编译

进入该目录编译脚本整理如下,该编译文件放置在x264-master和ffmpeg-5.1.2的同级目录。切换到该脚本目录执行脚本。

# 当前脚本的目录
base_path=$(cd `dirname $0`;pwd)

# 设置输出目录:64还是32位
archtarget="x64"
isContrainX64=$(which cl)

if [[ $isContrainX64 =~ $archtarget ]];then
	archtarget="x64"
else
	archtarget="win32"
fi

echo $archtarget

# x264的源文件目录和编译后的安装目录
x264_src_path=$base_path/x264-master
x264_lib_path=$base_path/install/$archtarget/x264

# ffmpeg的源文件目录和编译后的安装目录
ffmpeg_src_path=$base_path/ffmpeg-5.1.2
ffmpeg_lib_path=$base_path/install/$archtarget/ffmpeg

# -------------编译x264-------------
echo "[info] begin compile x264"

cd $x264_src_path

CC=cl ./configure --prefix=$x264_lib_path --enable-static

make clean
make -j8
if [ $? -eq 0 ];then
	echo "[info] x264 build sucessed."
else
	echo "[error] x264 build failed."
	exit 1
fi

make install

# -------------编译ffmpeg静态库-------------
echo "[info] begin compile ffmpeg"

export  PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$x264_lib_path/lib/pkgconfig

cd $ffmpeg_src_path

# --prefix:生成文件目录
# --enable-shared:构建shared库
# --arch:目标架构(常用有aarch64,arm,ia64,x86,x86_32,x86_64)
# --enable-libx264:通过x264使用h.264编码 #类似 
# --enable-libopenh264
# --extra-cflags:(c)编译参数 # --extra-cflags="-MDd" debug版本
# --extra-libs:链接参数 
# --extra-ldflags="/NODEFAULTLIB:libcmt"
# --enable-debug:debug版本
# --toolchain:使用编译器vs2019
CC=cl ./configure --prefix=$ffmpeg_lib_path --enable-shared --enable-libx264 --enable-gpl --arch=x86 --toolchain=msvc \
--extra-cflags=-l$x264_lib_path/include \
--extra-ldflags=-L$x264_lib_path/lib

# 修改config.h的内容,防止中文字符引起不能编译
# #define CC_IDENT "用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.29.30146 版" -> #define CC_IDENT "Microsoft (R) C/C++"
sed -i "/#define CC_IDENT.*/c\#define CC_IDENT \"Microsoft (R) C/C++\"" config.h

make clean
make -j8
if [ $? -eq 0 ];then
	echo "[info] ffmpeg build sucessed."
else
	echo "[error] ffmpeg build failed."
	exit 1
fi

make install

# 保存PDB
mkdir $ffmpeg_lib_path/pdb
find . -iname "*.pdb" -type f -exec cp {} $ffmpeg_lib_path/pdb \;

exit 0

windows编译ffmpeg源码(32位库)_第7张图片windows编译ffmpeg源码(32位库)_第8张图片

windows编译ffmpeg源码(32位库)_第9张图片

大功告成 编译成功!!!!!!

下面是我编译成功的ffmpeg5.12及6.0版本的x86库,需要的话自己下载或者私聊我

https://download.csdn.net/download/weixin_38887743/88359760

https://download.csdn.net/download/weixin_38887743/88359866

你可能感兴趣的:(windows,c++,ffmpeg)