FFmeg源码vs2019编译
为了获取pdb文件,调试进入ffmpeg源码,以及定制某些功能需要修改ffmpeg源码时,都需要使用源码编译fffmpeg,这里记录下windows环境下编译的详细过程。
mysys2安装和配置
mysys2下载及镜像配置参考
配置国内的源还是很有必要的,使用国外的源,速度堪忧
VS2019编译工具运行
- 选择编译工具
- 打开32位mysy2
cd E:\Media\msys2
msys2_shell.cmd -mingw64
- mysys2继承vs2019的环境变量
msys2_shell.cmd中注释掉rem set MSYS2_PATH_TYPE=inherit这一行的rem,重启mysys2
在mysys下使用gcc进行编译出来的dll需要依赖mysys-2.0.dll。
- 使用pacman安装依赖环境
pacman -Sy
pacman -S mingw-w64-x86_64-toolchain
pacman -S nasm
pacman -S yasm //汇编工具
pacman -S make cmake //项目工具,编译工具
pacman -S autoconf
pacman -S diffutils //比较工具
pacman -S pkg-config //库配置,x264,x265需要
pacman -S perl
pacman -S mingw-w64-x86_64-SDL2 //编译ffplay需要
pacman -S git
- 其他工作
- 重命名 msys64/usr/bin/link.exe 为 msys64/usr/bin/link.bak , 避免和MSVC 的link.exe抵 触
编译x264
ffmpeg只支持h264解码,需要编码的话需要自己编译x264库
mkdir /home/0922/ffmpeg
git clone https://gitee.com/mirrors_addons/x264.git
cd进⼊x264⽬录下编译x264库:
- 编译x264
./configure --prefix=/home/0922/ffmpeg/build/libx264 --host=x86_64-w64-mingw32 --enable-shared --enable-static --extra-ldflags=-Wl,--output-def=libx264.def
make -j4
make install
- ⽣成libx264.lib
上⾯编译出来的结果没有包含lib⽂件,需要⾃⼰⼿⼯⽣成。
configure时我们⽣成了 libx264.def 此时就派上⽤场。
cp ./libx264.def /home/0922/ffmpeg/build/libx264/lib/
cd /home/0922/ffmpeg/build/libx264/lib
lib /machine:X64 /def:libx264.def
cd ../bin
cp libx264-164.dll libx264.dll
即得到 libx264 .lib ,然后将 /home/0922/ffmpeg/build/libx264/bin/libx264- 161.dll (具体名字和x264版本有关) 改名或者复制⼀份为 libx264.dll 。
编译fdk-aac
- 下载fdk-aac
git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git
cd fdk-aac
- 编译
./autogen.sh
./configure --prefix=/home/0922/ffmpeg/build/libfdk-aac --enable-static --enable-shared
make -j4
make install
或者使用vs2019编译环境直接nmake ,并安装到install文件夹下
(nmake是windows系统的make)
nmake -f Makefile.vc
nmake -f Makefile.vc prefix=/home/0922/ffmpeg/build/libfdk-acc --enable-static --enable-shared
编译ffmpeg
下载ffmpeg到x264同级目录下。
我使用的是4.3版本,自己修改了几行代码。
创建sh脚本build_ffmpeg.sh,内容如下:
./configure \
--prefix=/home/0922/ffmpeg/build/ffmepg-4.3 \
--arch=x86_64 \
--enable-shared \
--enable-gpl \
--enable-libfdk-aac \
--enable-nonfree \
--enable-libx264 \
--extra-cflags="-I/home/0922/ffmpeg/build/libfdk-aac/include" \
--extra-ldflags="-L/home/0922/ffmpeg/build/libfdk-aac/lib" \
--extra-cflags="-I/home/0922/ffmpeg/build/libx264/include" \
--extra-ldflags="-L/home/0922/ffmpeg/build/libx264/lib"
执行
sh build_ffmpeg.sh
或者直接执行
./configure --prefix=/home/0922/ffmpeg/build/ffmepg-4.3 --arch=x86_64 --enable-shared --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx264 --extra-cflags="-I/home/0922/ffmpeg/build/libfdk-aac/include" --extra-ldflags="-L/home/0922/ffmpeg/build/libfdk-aac/lib" --extra-cflags="-I/home/0922/ffmpeg/build/libx264/include" --extra-ldflags="-L/home/0922/ffmpeg/build/libx264/lib"
make:
make -j8
make install
此时ffmpeg库就已安装到/home/0922/ffmpeg/build/ffmepg-4.3路径下。
待检验
此时不会生成pdb文件,无法进入调试,采用msvc编译来解决。
CC=cl.exe ./configure --prefix=/home/0922/ffmpeg/build/ffmepg-4.3 --toolchain=msvc --arch=x86_64 --enable-shared --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx264 --extra-cflags="-I/home/0922/ffmpeg/build/libfdk-aac/include" --extra-ldflags="-L/home/0922/ffmpeg/build/libfdk-aac/lib" --extra-cflags="-I/home/0922/ffmpeg/build/libx264/include" --extra-ldflags="-L/home/0922/ffmpeg/build/libx264/lib"