文章介绍
本文主要介绍在windows上编译音视频所需要的开源库,包括x264,ffmpeg和vmaf。
本文编译所使用配置:
os : win10 x64
vs : 2019
其他版本可以参考。
环境准备
ffmpeg是基于linux开发的,需要gc++来编译,windows平台下是MSVC++(Microsoft Visual C++),所以暂不支持直接编译,需要搭建类Linux的环境,用gc++来编译,环境搭建需要下载MSYS2。
下载安装MSYS2:
- 官网下载64位安装包
- 安装目录自己选择,本文安装目录为:D:\soft_install\msys2 (注意后边路径设置需要用自己的安装目录)
- 编辑安装目录下的msys2_shell.cmd 文件,将rem MSYS2_PATH_TYPE=inherit 这一行的 rem 移除。
- 运行 msys2_shell.cmd
- 在shell中依次输入命令:
pacman -Syu
#(中间会退出一次,重启继续执行这条命令)
pacman -S make
pacman -S diffutils
pacman -S nasm
mv /usr/bin/link.exe /usr/bin/link.exe.bak
#(上边这句是重命名link.exe,目的是避免与MSVC的link.exe冲突)
#编译vmaf需要
pacman -S --noconfirm --needed mingw-w64-x86_64-nasm mingw-w64-x86_64-meson
这篇文章中提到有两种方式可以编译:msys或者MinGW-w64,本文使用msys版本(亲测并没有题主所说的依赖msys-2.0.dll)进行编译。
编译x264
- 获得h264源码:
获得源码有两种方式:1)直接下载压缩包;2)用git下载
1.1)H264官网下载,下载之后解压就可以:
1.2)使用git下载源码
#安装git
pacman -S git
#源码路径,更改为自己的路径
cd f:/encode_test_project
#clone代码
git clone https://code.videolan.org/videolan/x264.git
cd x264
#切换到stable分支,也可以直接用master分支
git checkout -b stable remotes/origin/stable
使用git的一个好处是当源码有新的提交时可以用命令行更新代码及切换分支
- 配置脚本文件:
curl "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD" > config.guess
sed -i 's/host_os = mingw/host_os = msys/' configure
- 编译X264:
3.1 打开 x64 Native Tools Command Prompt for VS2019(适用于 VS 2017 的 x64 本机工具命令提示)
3.2 进入到MSYS的安装目录
3.3 运行msys2_shell.cmd
注意跨盘需要添加 /d 选项
然后在MSYS中运行:
cd f:/encode_test_project
mkdir -p build/x264
cd build/x264
#注意下面配置路径与自己相符
CC=cl ./../../x264/configure --prefix=./../../installed --enable-shared --enable-static
make -j 8
make install
mv ./../../installed/lib/libx264.dll.lib ./../../installed/lib/libx264.lib
编译ffmpeg
- 获得ffmpeg源码:
同x264
1.1)ffmpeg官网下载,下载之后解压就可以:
1.2)使用git下载源码
#源码路径,更改为自己的路径
cd f:/encode_test_project
#clone代码
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
#切换到4.4分支,也可以直接用master分支
git checkout -b release/4.4 remotes/origin/release/4.4
- 编译ffmpeg
同x264
2.1打开 x64 Native Tools Command Prompt for VS2019(适用于 VS 2017 的 x64 本机工具命令提示)
2.2 进入到MSYS的安装目录
2.3 运行msys2_shell.cmd
在打开的shell中运行下列:
cd f:/encode_test_project
mkdir -p build/ffmpeg
cd build/ffmpeg
#注意路径
CC=cl ./../../ffmpeg/configure \
--prefix=./../../installed \
--toolchain=msvc \
--arch=x86_64 \
--enable-x86asm \
--enable-asm \
--enable-shared \
--enable-static \
--disable-programs \
--enable-avresample \
--enable-libx264 \
--enable-w32threads \
--enable-gpl \
--extra-ldflags="-LIBPATH:./../../installed/lib/" \
--extra-cflags="-I./../../installed/include/"
make V=1 -j 8
make install
最后生成的lib和dll 都在installed/lib 里面了
编译vmaf
- 获得vmaf源码:
vmaf 的源码在github上: https://github.com/Netflix/vmaf,
1.1)vmaf官网下载,下载之后解压就可以:
1.2)使用git下载源码
#源码路径,更改为自己的路径
cd f:/encode_test_project
#clone代码
git clone https://github.com/Netflix/vmaf.git
cd vmaf
#切换到2.1.1分支,也可以直接用master分支
git checkout -b branch_v2.1.1 v2.1.1
- 编译vmaf
2.1 进入到MSYS的安装目录
2.2 运行mingw64.exe
在打开的shell中运行下列:
cd f:/encode_test_project
cd vmaf
#注意路径
meson setup libvmaf libvmaf/build --buildtype release --default-library both --prefix f:/encode_test_project/installed
meson install -C libvmaf/build
这种方式是官方推荐的方式,但是只能生成dll文件,没有生成lib文件,也许是设置不对,欢迎在评论区讨论。自定义开发的话只能动态调用dll文件了。
到这一步就完成了x264,ffmpeg和vmaf了,头文件在installed/include里面,生成的lib和dll在installed/lib 里面。