关于ffmpeg:Windows-下-FFmpeg-X264-x265的编译和配置

99次阅读

共计 3478 个字符,预计需要花费 9 分钟才能阅读完成。

工具和源码筹备

  1. ffmpeg https://ffmpeg.org/download.h…
  2. libx264 https://www.videolan.org/deve…
  3. libx265 https://www.videolan.org/deve…
  4. MSYS2 官网地址:https://www.msys2.org/
    (MSYS 2.0 提供了 pacman 软件管理器,通过它来装置依赖的软件。msys2 不能够装置再 FAT* 分区。msys2 不能够装置再 winXP 零碎上
  5. VS2015
  6. CMAKE
    (a) 对于 VS 版本:VS2010 不反对 C99,当初很多开源代码(比方 x264,ffmpeg)中的 C 代码都采纳 c99 标准,前 vs2010,vs2012 都不反对 c99 标准,从 vs2013 开始才局部反对 c99 标准。如果是 VS2010 编译,须要先采纳 C99 to C89 转换工具进行预处理 )
    (b)VS 须要应用英文语言包。否则前面编译 ffmpeg 会大量报错,命令行 error D8000:cl

编译形式

很多教程用 MinGW 来编译,最初编译进去的动态库是个 .a 的模式。
然而 Windows 下的动态库是 .lib,间接用 CMake 去链接 .a 库必定不行。
须要先把 .a 库转成 .def 文件,而后再把 .def 文件转成 .lib 文件,甚至再把 .lib 文件转成 .dll 的动静库。windows 平台下倡议用 MSVC 编译器编译。

启动环境

开始菜单中找到并关上 Visual Studio 2015 Command line。

Visual Studio Command line 分为 32 位版本和 64 位版本。
用 32 位版本编译的程序就是 32 位的。用 64 位版本编译的程序就是 64 位的。编译进去的 exe 或者 dll 能够用 dumpbin 判断是 32 位还是 64 位。
查看 32 位还是 64 位:
dumpbin /headers libx264.dll
查看符号清单(导出函数):
dumpbin /exports libx264.dll > libx264-exports.txt

在 Visual Studio 2015 Command line 命令行终端中,进入到 MSYS 装置目录,关上 msys2_shell.cmd,如下命令

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>c:/msys64/msys2_shell.cmd -use-full-path

留神 -use-full-path 的应用。因为在调用 msys 时如果不增加 -use-full-path,前面在 msys2 的 shell 中就会不认 cc=cl。即无奈在 msys 中应用 MSVC。一下办法是等价的。倡议第二种。

  • msys2_shell.cmd 中勾销一行的正文:set MSYS2_PATH_TYPE=inherit
  • 调用 msys2_shell.cmd 时应用 -use-full-path 参数
  • 在 windows 零碎的环境变量中增加 MSYS2_PATH_TYPE=inherit

MSYS2 窗口关上后,先把根本的环境装置好

pacman -Syu
pacman -S make
pacman -S diffutils
pacman -S yasm
pacman -S nasm

x264

在该窗口中进入到 LibX264 的源码目录下,把如下代码保留成 .sh 文件并执行:

OPTIONS="--enable-shared 
        --enable-static  
      "BUILD_DIR="./../build32"

CC=cl ./configure $OPTIONS --prefix=$BUILD_DIR/

make -j 16
make install
make clean

留神 configure 命令前缀有个 CC=cl,代表应用 MSVC 来编译了。
将编译后的 libx264.dll.lib 改成 libx264.lib,这就是动态库了。如果不批改名字,后续 FFMPEG 编译的时候会提醒找不到 libx264。
编译实现之后,关上生成门路下 /lib/pkgconfig/x264.pc 文件。检查一下 prefix 的门路。倡议间接改成绝对路径。pc 文件前面编译 ffmpeg 要用到。
如果要编译

x265

x265 采纳 cmake 编译。相比 x264 而言,其 build 目录下曾经把各个平台的 sh 文件提供了:

在 msys2 窗口中 cd 进入 msys-cl 目录,关上 make-Makefiles.sh 稍作批改如下:

#!/bin/sh
# This is to generate visual studio builds with required environment variables set in this shell, useful for ffmpeg integration
# Run this from within an MSYS bash shell

INSTALL_DIR="./../../../build32/"

if cl; then
    echo 
else
    echo "please launch msys from'visual studio command prompt'"
    exit 1
fi

cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4"  ../../source

if [-e Makefile]
then
    nmake
fi

nmake install

相比默认的 sh, 增加如下三行:

INSTALL_DIR="./../../../build32/"
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
nmake install

而后在 MSYS2 下执行 sh make-Makefiles.sh。一键期待即可。
如果要编译 64 位的 x265,把 make-Makefiles-64bit.sh 作相似批改,从 visual studio command line 64 位进入,关上 msys2, 再执行 sh make-Makefiles-64bit.sh 即可。

ffmpeg

持续在 MSYS 2.0 窗口中进入到下载好 FFmpeg 的源码目录,将如下代码保留成 .sh 文件并执行:

X264_INSTALL="/d/zsc/VSCODE_CPP_DIR/FFMPEG-H264-TEST/x264-master/build32"
X265_INSTALL="/d/zsc/VSCODE_CPP_DIR/FFMPEG-H264-TEST/x265-master/build32"

X264_INCLUDE=$X264_INSTALL/include
X264_LIB=$X264_INSTALL/lib
X264_BIN=$X264_INSTALL/bin

X265_INCLUDE=$X265_INSTALL/include
X265_LIB=$X265_INSTALL/lib
X265_BIN=$X265_INSTALL/bin

export PATH=$X264_BIN:$PATH
export PATH=$X265_BIN:$PATH

export PKG_CONFIG_PATH=$X264_LIB/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=$X265_LIB/pkgconfig:$PKG_CONFIG_PATH

echo $PKG_CONFIG_PATH

BUILD_DIR="../build32"

OPTIONS="--toolchain=msvc 
         --arch=x86 
         --enable-yasm  
         --enable-asm 
         --enable-shared 
         --enable-static 
         --disable-programs 
         --enable-swresample 
         --enable-swscale 
         --enable-gpl 
         --enable-libx264 
         --enable-libx265   
         --enable-ffmpeg 
         --enable-ffplay 
         "

CC=cl ./configure $OPTIONS --prefix=$BUILD_DIR/

make -j 16
make install
make clean

通过十几分钟的期待,编译出 ffmpeg 库:

–arch=x86 示意编译 32 位的 ffmpeg 库。也能够从 visual studio command line 64 位进入,关上 msys2,改 sh,编译 64 位的 ffmpeg 库(x264 x265 也得用 64 位的 dll)。

正文完
 0