Linux/Ubuntu 下交叉编译 Windows 版 FFMPEG, 带 X264 和 X265

文章目录

      • 预先条件
      • 交叉编译 X264
      • 交叉编译 X265
      • 交叉编译 FFMPEG

预先条件

  • cmake
  • nasm
  • mingw-w64
  • mingw-w64-tools

交叉编译 X264

  • 下载 x264 源码
git clone https://code.videolan.org/videolan/x264.git
cd x264
  • 配置并编译,本文只采用了静态链接。
PREFIX_X264=/path/to/install/x264
./configure --cross-prefix=x86_64-w64-mingw32- --host=mingw64 --disable-swscale --disable-lavf  --enable-pic --enable-static --prefix=$(PREFIX_X264) 
make
make install

交叉编译 X265

参考X265 CrossCompile

  • 下载 x265 源码
git clone https://github.com/videolan/x265.git
cd x265
或者
git clone https://bitbucket.org/multicoreware/x265_git.git
cd x265_git
  • 在build目录下新建一个文件夹, 例如"cross_for_win",再在该目录下新建一个toolchain文件(build.cmake),内容如下:
#!cmake

# this one is important
SET(CMAKE_SYSTEM_NAME Windows)

SET(cross_prefix x86_64-w64-mingw32-)

# specify the cross compiler
SET(CMAKE_C_COMPILER   $(cross_prefix)gcc)
SET(CMAKE_CXX_COMPILER $(cross_prefix)g++)
SET(CMAKE_RC_COMPILER  $(cross_prefix)windres)
SET(CMAKE_ASM_NASM_COMPILER nasm)

SET(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_C_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
  • 采用cmake配置生成工程,并编译
PREFIX_X265=/path/to/install/x265
cmake -DCMAKE_TOOLCHAIN_FILE=build.cmake -DCMAKE_INSTALL_PREFIX=$(PREFIX_X265) -DENABLE_SHARED=0 -DENABLE_PIC=1 ../../source 
make
make install
  • 然后,修改生成的x265.pc(在 $(PREFIX_X265)/lib/pkgconfig下),将Libs.private行的参数拷贝追加到Libs行,并添加-static。原始x265.pc文件中如下:(可能不同环境下不一样)
Libs: -L${libdir} -lx265
Libs.private: -lstdc++ -lgcc -lgcc
  • 改变后,如下:
Libs: -L${libdir} -lx265 -lstdc++ -lgcc -lgcc -static
Libs.private: -lstdc++ -lgcc -lgcc

交叉编译 FFMPEG

参考 CrossCompilingForWindows

  • 下载 ffmpeg 源码
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
  • 配置 PKG_CONFIG_PATH, 以便pkg-config能够正确找到x264, x265
export PKG_CONFIG_PATH=$(PREFIX_X264)/lib/pkgconfig:$(PREFIX_X265)/lib/pkgconfig
  • 配置并编译,生成动态库。(可新建一个目录,例如"build")
mkdir build
cd build

../configure --arch=x86 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- --enable-libx265 --enable-libx264 --enable-shared --enable-pic --enable-gpl --enable-version3 --prefix=/mnt/f/ffmpegs/ffmpeg_cross
make
make install

你可能感兴趣的:(视频编码,ffmpeg,交叉编译)