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

1. 预先条件

  • cmake
  • nasm
  • mingw-w64
  • mingw-w64-tools
sudo apt install cmake nasm mingw-w64 mingw-w64-tools

2. 交叉编译 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

3. 交叉编译 X265

参考X265 CrossCompile

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

4. 交叉编译 FFMPEG

参考 CrossCompilingForWindows

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

PREFIX_FFMPEG=/path/to/install/ffmpeg
../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=${PREFIX_FFMPEG}

make
make install
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
要编译适用于 ARM64 架构的 FFmpeg,您需要使用交叉编译工具链。以下是在 Ubuntu 上编译适用于 ARM64 架构的 FFmpeg 的步骤: 1. 安装交叉编译工具链 您需要安装交叉编译工具链,以便在 Ubuntu 上编译适用于 ARM64 架构的 FFmpeg。可以使用以下命令安装 aarch64-linux-gnu 工具链: ``` sudo apt-get update sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu ``` 2. 下载 FFmpeg 源代码 下载 FFmpeg 的源代码,可以从官方网站下载最新本: ``` wget https://ffmpeg.org/releases/ffmpeg-4.3.1.tar.bz2 tar -xvf ffmpeg-4.3.1.tar.bz2 cd ffmpeg-4.3.1 ``` 3. 配置 FFmpeg 以下是配置 FFmpeg 的命令: ``` ./configure --arch=aarch64 --target-os=linux --enable-cross-compile --cross-prefix=aarch64-linux-gnu- --sysroot=/usr/aarch64-linux-gnu/ --prefix=/usr/local/ffmpeg --extra-cflags="-I/usr/aarch64-linux-gnu/include" --extra-ldflags="-L/usr/aarch64-linux-gnu/lib" ``` 其中,--arch=aarch64 表示编译适用于 ARM64 架构的 FFmpeg,--target-os=linux 表示编译适用于 Linux 系统的 FFmpeg,--enable-cross-compile 表示启用交叉编译,--cross-prefix=aarch64-linux-gnu- 表示交叉编译工具链的前缀,--sysroot=/usr/aarch64-linux-gnu/ 表示系统根目录,--prefix=/usr/local/ffmpeg 表示安装目录,--extra-cflags="-I/usr/aarch64-linux-gnu/include" 表示指定编译的附加选项,--extra-ldflags="-L/usr/aarch64-linux-gnu/lib" 表示指定链接的附加选项。 4. 编译 FFmpeg 运行 make 命令编译 FFmpeg: ``` make ``` 5. 安装 FFmpeg 运行 make install 命令安装 FFmpeg: ``` sudo make install ``` 6. 测试 FFmpeg 在安装完成后,您可以在终端中运行 ffmpeg 命令测试 FFmpeg 是否成功安装: ``` ffmpeg -version ``` 如果一切顺利,您将看到 FFmpeg本信息。 希望这些步骤能够帮助您成功编译适用于 ARM64 架构的 FFmpeg。如果您有任何问题,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值