一、编译安装工具
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的命令行环境)
2:启动vs2017 x86(32位)命令行
如下可以看到32和64的命令行,这里我们启动x86 Native ToolsCommand Prompt for Vs2017
3:测试cl.exe的版本确实是x86(32)
4:启动msys2
启动后的msys2:
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源码解压放在如下对应目录:
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
大功告成 编译成功!!!!!!
下面是我编译成功的ffmpeg5.12及6.0版本的x86库,需要的话自己下载或者私聊我