一、说明
本文分别介绍了windows和linux环境下编译windows下使用的ffmpeg,推荐使用linux交叉编译(可以用windows下的ubuntu子系统)。ubuntu交叉编译已经验证能正常运行,MSYS2+MinGW64编译的在MinGW64下能正常运行,在windows的cmd命令界面运行还存在问题。
二、使用MSYS2+MinGW64编译
1. 1. 下载msys2,官方地址:http://www.msys2.org/,这里选择64位的安装
2. 运行MSYS2,执行如下命令配置编译环境
pacman -S make
pacman -S yasm
pacman -S diffutils
pacman -S pkg-config
pacman -S mingw-w64-x86_64-gcc
pacman -S nasm //nasm用于编译x264的汇编代码
pacman -S mingw-w64-x86_64-SDL2 //ffplay编译依赖sdl2
pacman -S autoconf //用于编码fda-aac时运行。/autogen.sh生成configure文件
pacman -S automake
pacman -S libtool
3. 关闭MSYS界面,并运行MSYS2 MinGW x64
4. 下载并编译libfdk-aac
下载源码:$ git clone https://github.com/mstorsjo/fdk-aac.git
解压并进入到fdk-aac目录,在MinGW x64下,进入d盘的方式:
cd "/d/Study/ffmpeg/fdk-aac-master/" #需要加引号
#在fdk目录下执行如下命令
./autogen.sh
./configure --prefix=/mingw64/ --enable-shared
make -j4
make install
5. 下载并编译x264
下载源码:$ git clone https://code.videolan.org/videolan/x264.git
解压并进入x264源码根目录下依次执行:
./configure --prefix=/mingw64/ --enable-shared
make -j4
make install
6. 下载并编译ffmpeg
下载源码: https://ffmpeg.org/download.html
解压并进入ffmpeg源码跟目录下依次执行:
./configure --prefix=/usr/local/ --enable-libx264 --enable-libfdk-aac --enable-gpl --enable-nonfree --enable-shared --enalbe-static
make -j4
make install
三、ubuntu交叉编译
1. 搭建mingw-w64编译环境
网上有人写了一个搭建此环境的脚本,网址:https://github.com/Zeranoe/mingw-w64-build
运行下载的脚本:
./mingw-w64-build x86_64
/*
*如果运行脚本报如下错误:
*missing required executable(s): flex bison makeinfo m4
*说明flex bison等命令不支持,需要安装相应的工具
*/
//可以按照如下的方式安装相应的工具
caixuefeng@xuefeng:/mnt/d/Study/ffmpeg/mingw-w64-build-master$ flex
Command 'flex' not found, but can be installed with:
sudo apt install flex
sudo apt install flex-old
caixuefeng@xuefeng:/mnt/d/Study/ffmpeg/mingw-w64-build-master$ sudo apt install flex
脚本正常执行后,需要设置环境变量:
export PATH="$PATH:/home/caixuefeng/.zeranoe/mingw-w64/x86_64/bin"
可以通如下命令检查环境是否安装成功:
2. 编译libfaac
#安装autoconf
sudo apt install autoconf
#安装libtool
sudo apt install libtool-bin
#执行libfaac目录下的autogen.sh生成configure
./autogen.sh
./configure --host=x86_64-w64-mingw32 --prefix=/home/caixuefeng/libaac --enable-static
make -j32
make install
3. 编译x264
sudo apt install nasm
./configure --enable-static --host=mingw64 --prefix=/home/caixuefeng/libx264 --cross-prefix=x86_64-w64-mingw32-
make -j32
make install
4. 编译SDL2
下载地址:https://www.libsdl.org/
./configure --prefix=/home/caixuefeng/libSDL2 --host=x86_64-w64-mingw32
make -j32
make install
sudo apt install libsdl2-dev
5. 编译ffmpeg
./configure --arch=x86 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- --enable-libx264 --enable-libfdk-aac --enable-sdl2 --enable-shared --enable-nonfree --enable-gpl --enable-version3 --enable-ffplay --prefix=/home/caixuefeng/ffmpeg
# 修改ffbuild/config.mak使能FFPLAY,编译后才能生成ffplay
vim ffbuild/config.mak
#将!CONFIG_FFPLAY=YES修改为CONFIG_FFPLAY=YES(去掉!)
make -j32
make install
- 报错:ERROR: libx264 not found
可以通过pkg-config --cflags --libs libx264命令,看是否可以找到 libx264。
如果找不到,就说明确实是这个问题。解决的办法是设置环境变量。
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/caixuefeng/libx264/lib/pkgconfig
- 报错:ERROR: libfdk-aac not found
同上面的libx264 not found处理。
如果出现下图的错误:
将ffmpeg/ffbuild/config.mak文件下的下面两行改为如下内容即可链接成功。
EXTRALIBS-avdevice=-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi -lgdi32 -lm -latomic -lvfw32 -L/home/caixuefeng/libSDL2/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -lsetupapi -static-libgcc
EXTRALIBS-ffplay=-L/home/caixuefeng/libSDL2/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -lsetupapi -static-libgcc