window x264编译

236 阅读3分钟

参考

过程可以参考我的博客 ffmepg编译,同样需要msys2,环境,本文还是说明一下环境的搭建。

目标版本

64 位debug版本的静态库,可以独立使用,可以放到ffmpeg作为依赖库

下载MSYS2

  • 地址: www.msys2.org/
  • 安装文件: msys2-x86_64-20240113.exe
  • 安装目录: C:\msys64
  • 增加环境变量 C:\msys64\mingw64\bin

安装工具链

  • 管理员身份运行 C:\msys64\mingw64.exe 文件 在里面执行脚本 pacman -S mingw-w64-x86_64-toolchain

  • 按下Enter默认全部安装

  • 执行 `pacman -S base-devel'

  • 执行 `pacman -S yasm nasm gcc'

下载x264源码

  • 地址:git clone https://code.videolan.org/videolan/x264.git

image.png

编译

  • 在mingw64.exe 的窗口里面跳转到ffmpeg的目录
  • 创建一个编译脚本文件 touch build.sh
  • 编写编译脚本
basepath=$(cd `dirname $0`;pwd)

echo ${basepath}

cd ${basepath}
pwd

./configure --prefix=${basepath}/x264_install --enable-static

make -j 16
make install
  • 在当前目录执行脚本

image.png

  • 结果

image.png

  • lib的格式,如图

image.png

显然这是一个unix的静态库,它不能被直接用于vs,但是它可以作为ffmpeg的依赖库,集成。

ffmpeg 集成以上编译好的x264

首先有一篇原来的ffmpeg编译过程文档:ffmpeg编译 可以参考一下

  • 首先,我将x264编译的静态库库放在ffmpeg的外层目录,结构如下:

image.png

  • 在ffmpeg3.4 目录里面创建编译文件 build-x264.sh
# 当前目录
basepath=$(cd `dirname $0`;pwd)

# 获取当前目录的上层目录
parent_dir=$(dirname "$(pwd)")

echo ${basepath}


cd ${basepath}

./configure \
--prefix=${basepath}/ffmpeg_install \
--disable-static --enable-shared  \
--disable-asm \
--enable-debug=3 \
--enable-libx264 --enable-gpl \
--extra-cflags="-I${parent_dir}/x264_install/include" \
--extra-ldflags="-L${parent_dir}/x264_install/lib" \

make -j4
#make install

--extra-cflags 指定了x264的头文件位置 --extra-ldflags 指定了库文件位置 --enable-libx264 --enable-gpl 指定了支持x264,但是开启x264必须要打开gpl

  • 在 ffmpeg3.4 目录里面,还是在 mingw64.exe 管理员打开的窗口里面执行脚本

image.png

image.png

这里面External libraries: 里面就是ffmpeg依赖的库,这里面有些是在mingw64的dll里面去找。如果你没把C:\msys64\mingw64\bin加入环境变量,那么你在引用ffmpeg的动态库的时候,会报找不到dll,比如zlib.dll。 你可以把 C:\msys64\mingw64\bin 里所有的dll拷贝到执行程序目录里面去解决。

但是对于x264,ffmpeg依赖的是libx264.a静态库。所以ffmpeg的avcode里面直接包含的,不需要另外添加dll。

  • 编译完成

image.png

编译完成后,lib和dll文件,就在ffmpeg_install的bin目录里面。其他引用的方法和之前ffmpeg编译的博客里面一样。

编译可以直接被visual studio使用的libx264静态库

ffmpeg 依赖x264后,我可以用ffmpeg实现264的编码。同时,我又想能够直接使用libx264的源码直接写264的编码。那么我就要再工程里面,再添加libx264.lib的库和头文件。 为此,我有编译了一个x264的 .lib格式静态库。过程如下

  • 首先找到这个目录

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2022\Visual Studio Tools\VC

这个目录是vs的控制窗口,我是编译64位的。所有我就用管理员权限,打开 x64 Native Tools Command Prompt for VS 2022

image.png

  • 用这个串口去打开msy2的窗口 C:\msys64\msys2_shell.cmd -use-full-path

image.png

image.png

这样visault studio的vs编辑器目录,就被带到了msy2的窗口里面

  • 用在打开的msy2的窗口,里面跳转到x264目录

然后在里面创建 build_mscv.sh

basepath=$(cd `dirname $0`;pwd)

echo ${basepath}

cd ${basepath}
pwd

CC=cl ./configure --prefix=${basepath}/x264_install_msv --enable-static

make -j4
make install

执行build_mscv.sh 后生成的库如下:

image.png

这个.lib库,和头文件,相应引入visual studio里面,就可以直接使用x264了