安装msys2
msys2是一个交叉编译环境,允许在windows上模拟linux运行环境
再利用linux软件,编译出lib和dll
msys2的安装包,包括编译过程中用到的安装包,在下面有完整提供
lib和dll的使用方式
lib和dll都可以存储已经封装好了的代码,它们的区别在于
lib是静态库,在编译时使用,lib中的代码会被编译到exe当中
dll是动态库,在运行时使用,dll中的代码不参与编译,而是运行期间,到对应的dll文件当中去查找函数
使用静态链接方式时,只提供lib文件即可,这种情况下,lib文件包含完整代码,体积特别大
使用动态链接方式时,需要同时提供lib文件和dll文件
这种情况下,lib文件不存储代码,只存储dll文件中函数的调用地址,因此体积比较小,代码存于dll当中
编译时使用lib文件,而程序运行时,必须把对应的dll放在exe旁边,或者是系统目录中才行
ffmpeg的体积比较大,而且复用性比较强,基本都是通过动态链接的方式来使用的
安装和配置pacman
pacman是linux下的一个包管理器,方便从在线仓库自动安装和管理软件
打开msys2.exe,输入以下指令,全部选Y同意
pacman -Syu
安装完成后,窗口会自动退出,重新打开msys2.exe,再次输入以下指令
pacman -Syu
分别打开mirrorlist.clang32,mirrorlist.clang64,mirrorlist.msys三个文件
在配置文件的开头分别加入以下代码,将软件仓库的首选地址改为国内站点
## 清华大学
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
## 中科大
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686
## 清华大学
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
## 中科大
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64
## 清华大学
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
## 中科大
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch
安装依赖包
打开msys2.exe,输入以下指令,安装依赖
pacman -S make
pacman -S diffutils
pacman -S yasm
pacman -S nasm
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-i686-gcc
pacman -S mingw-w64-x86_64-gtk3
pacman -S mingw-w64-i686-gtk3
pacman -S git
下载pkg-config
pkg-config是一个软件包配置管理工具,通过它可以记录软件包的版本和安装路径
软件下载可以通过wget指令来进行
wget下载的文件,会被保存到msys2/home/用户名下,再手动解压即可
打开msys2.exe,执行以下指令
wget https://pkg-config.freedesktop.org/releases/pkg-config-0.23.tar.gz
将压缩包中的pkg-config-0.23目录解压到msys2/home下
将pkg-config/win32/bin/pkg-config.exe拷贝到msys2/mingw32/bin下
将pkg-config/win64/bin/pkg-config.exe拷贝到msys2/mingw64/bin下
下载ffmpeg
打开msys2.exe,执行以下指令
wget http://www.ffmpeg.org/releases/ffmpeg-4.3.5.tar.gz
将压缩包中的ffmpeg-4.3.5目录解压到msys2/home下
下载x264
打开msys2.exe,执行以下指令
wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2
将压缩包中的x264-master目录解压到msys2/home下
下载amf
打开msys2.exe,执行以下指令
wget https://github.com/GPUOpen-LibrariesAndSDKs/AMF/archive/1.4.16.1.tar.gz
将压缩包中的AMF-1.4.16.1目录解压到msys2/home下
手动创建msys2/usr/local/include/AMF目录,再打开msys2.exe,执行以下指令
cp -r /home/AMF-1.4.16.1/amf/public/include/* /usr/local/include/AMF
安装ffnvcodec
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make & make install
编译64位dll
这里以64位为例,32位同理,只不过改用mingw32程序,将脚本中的64改成32就行了
打开msys2/mingw64.exe,输入以下指令编译x264
cd /home/x264-master/
./configure \
--prefix=/mingw64 \
--enable-static \
--host=msys \
--disable-cli
make clean
make -j4
make install
打开msys2/home/ffmpeg-4.3.5目录,新建build.sh文件,输入以下脚本
#!/bin/bash
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
PREFIX="./bin-$1"
echo "Install dir: $PREFIX"
./configure \
--prefix=$PREFIX \
--extra-ldsoflags="-static-libgcc" \
--extra-cflags="-I/usr/local/include" \
--extra-ldflags="-L/usr/local/lib" \
--disable-iconv \
--disable-doc \
--disable-debug \
--disable-avdevice \
--disable-indevs \
--disable-outdevs \
--disable-postproc \
--disable-ffplay \
--disable-ffprobe \
--disable-encoders \
--disable-decoders \
--enable-small \
--enable-shared \
--enable-ffmpeg \
--enable-version3 \
--enable-nonfree \
--enable-w32threads \
--enable-avcodec \
--enable-avformat \
--enable-swresample \
--enable-swscale \
--enable-avfilter \
--enable-gpl \
--enable-amf \
--enable-nvenc \
--enable-x86asm \
--enable-libx264 \
--enable-encoder=flv \
--enable-encoder=h264_nvenc \
--enable-encoder=h264_amf \
--enable-encoder=hevc_nvenc \
--enable-encoder=hevc_amf \
--enable-encoder=libx264 \
--enable-encoder=pcm_s16le \
--enable-encoder=pcm_s24le \
--enable-encoder=aac \
--enable-encoder=ac3 \
--enable-encoder=dca \
--enable-encoder=opus \
--enable-encoder=vorbis \
--enable-encoder=srt \
--enable-encoder=ass \
--enable-encoder=subrip \
--enable-encoder=mjpeg \
--enable-encoder=gif \
--enable-decoder=mpeg4 \
--enable-decoder=flv \
--enable-decoder=h264 \
--enable-decoder=hevc \
--enable-decoder=vp9 \
--enable-decoder=h264_cuvid \
--enable-decoder=hevc_cuvid \
--enable-decoder=vp9_cuvid \
--enable-decoder=opus \
--enable-decoder=vorbis \
--enable-decoder=aac \
--enable-decoder=ac3 \
--enable-decoder=eac3 \
--enable-decoder=srt \
--enable-decoder=ass \
--enable-decoder=subrip \
--enable-decoder=pcm_s16le \
--enable-decoder=pcm_s24le \
--enable-decoder=dca \
--enable-decoder=mp3 \
--enable-decoder=flac \
--enable-decoder=ape \
--enable-decoder=mjpeg
make clean
make -j4
make install
打开msys2/mingw64.exe,输入以下指令编译ffmpeg
cd /home/ffmpeg-4.3.5
./build.sh 64
打开msys2/home/ffmpeg-4.3.5/bin-64/bin目录,可以看到编译成功的dll和lib文件