Windows ffmpeg 构建x264 for android

本文介绍了如何在Windows环境中下载NDK,配置x264和ffmpeg进行针对armeabi-v7a和arm64-v8a架构的跨平台编译,包括安装必要的库、脚本编写和编译过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自行在谷歌下载Windows使用的NDK

下载x264源码:
https://www.videolan.org/developers/x264.html

下载msys2:
https://www.msys2.org/

安装msys2后,“以管理员身份运行” MSYS2 MinGW x64

写文件脚本
这里我将脚本文件(.sh)libx264 源码还有ffmpeg 源码放在了F:/Android目录下
写完脚本后, msys2进入到F:/Android目录,直接运行脚本即可, 先运行x264脚本,再运行ffmpeg脚本
msys2需要安装某些库,编译失败时会提示,自行安装即可,无非是一些依赖库
pacman -S安装

x264_armeabi_v7a.sh

#!/bin/bash

CUR_DIR=F:/Android
SRC_DIR=$CUR_DIR/x264-master

export NDK=$CUR_DIR/android-ndk-r21 					# your android ndk folder
export HOST_TAG=windows-x86_64 					# adjust to your building host
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
export API=21
export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang 		# c compiler path
export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++		# c++ compiler path

CPU=armeabi-v7a

cd $SRC_DIR

function build_armeabi-v7a
{
	echo ">> configure $CPU libx264"

	./configure \
	--prefix=$CUR_DIR/x264_lib/$CPU \
	--enable-static \
	--enable-pic \
	--disable-asm \
	--disable-opencl \
	--disable-cli \
	--host=armv7a-linux-androideabi \
	--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
	--sysroot=$TOOLCHAIN/sysroot \

	echo ">> make $CPU libx264"
	make clean
	make
	make install
	echo ">> build $CPU libx264 finished"
}

build_armeabi-v7a
echo build_armeabi-v7a finished

x264_arm64-v8a.sh

#!/bin/bash

CUR_DIR=F:/Android
SRC_DIR=$CUR_DIR/x264-master

export NDK=F:/Android/android-ndk-r21 				# your android ndk folder
export HOST_TAG=windows-x86_64 					# adjust to your building host
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
export API=21
export CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang		# c compiler path
export CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++		# c++ compiler path

CPU=arm64-v8a

cd $SRC_DIR

function build_arm64-v8a
{
	echo ">> configure $CPU libx264"
	./configure \
	--prefix=$CUR_DIR/x264_lib/$CPU \
	--enable-static \
	--enable-pic \
	--disable-asm \
	--disable-opencl \
	--disable-cli \
	--host=aarch64-linux-android \
	--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
	--sysroot=$TOOLCHAIN/sysroot \

	echo ">> make $CPU libx264"
	make clean
	make
	make install
	echo ">> build $CPU libx264 finished"
}

build_arm64-v8a
echo build_arm64-v8a finished

需要哪个 cpu的库就构建哪个
在x264目录下会有个新目录 android, 里面有对应CPU的.a库

ffmpeg 编译
注意API和cc, cxx要和x264保持一致

ffmpeg_armeabi_v7a.sh

#!/bin/bash

FFMPEG_VERSION=4.4.2
CUR_DIR=F:/Android
SRC_DIR=$CUR_DIR/ffmpeg-$FFMPEG_VERSION
DST_DIR=$CUR_DIR/ffmpeg_lib-$FFMPEG_VERSION
NDK=$CUR_DIR/android-ndk-r21/toolchains/llvm/prebuilt/windows-x86_64
API=21

# x264
X264_LIB_DIR=$CUR_DIR/x264_lib/armeabi-v7a
echo ">> x264 dir: $X264_LIB_DIR"

cd $SRC_DIR
echo ">> cd $SRC_DIR"
 
function build_onearch
{
	echo ">> configure $CPU, ffmpeg version: $FFMPEG_VERSION"
	./configure \
	--enable-cross-compile --target-os=android  \
	--prefix=$DST_DIR/$ANDROID_ABI --cross-prefix=$CROSS_PREFIX  \
	--cc=$CLANG_PREFIX --cxx=$CLANG_PREFIX++  \
	--arch=$ARCH --cpu=$CPU --sysroot=$NDK/sysroot \
	--enable-shared --disable-static \
	--enable-small --disable-programs --disable-doc \
	--enable-asm --disable-neon \
	--enable-jni \
	--enable-mediacodec --enable-hwaccels \
	--enable-version3 --enable-gpl --enable-libx264 \
	--extra-ldflags="-L$X264_LIB_DIR/lib" \
	--extra-cflags="-I$X264_LIB_DIR/include -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD"
	
	echo ">> make $CPU"
	make clean
	make
	make install
	echo ">> build ffmpeg $CPU finished"
}
 
ANDROID_ABI=armeabi-v7a
ARCH=arm
CPU=armv7-a
CROSS_PREFIX=$NDK/bin/arm-linux-androideabi-
CLANG_PREFIX=$NDK/bin/armv7a-linux-androideabi$API-clang
build_onearch

ffmpeg_arm64-v8a.sh

#!/bin/bash

FFMPEG_VERSION=4.4.2
CUR_DIR=F:/Android
SRC_DIR=$CUR_DIR/ffmpeg-$FFMPEG_VERSION
DST_DIR=$CUR_DIR/ffmpeg_lib-$FFMPEG_VERSION
NDK=$CUR_DIR/android-ndk-r21/toolchains/llvm/prebuilt/windows-x86_64
API=21

# x264
X264_LIB_DIR=$CUR_DIR/x264_lib/arm64-v8a
echo ">> x264 dir: $X264_LIB_DIR"

cd $SRC_DIR
echo ">> cd $SRC_DIR"
 
function build_onearch
{
	echo ">> configure $CPU"
	./configure --enable-cross-compile --target-os=android  \
	--prefix=$DST_DIR/$ANDROID_ABI  --cross-prefix=$CROSS_PREFIX  \
	--cc=$CLANG_PREFIX --cxx=$CLANG_PREFIX++  \
	--arch=$ARCH  --cpu=$CPU  --sysroot=$NDK/sysroot \
	--enable-shared --disable-static \
	--enable-small --disable-programs --disable-doc \
	--enable-asm --enable-neon \
	--enable-jni \
	--enable-mediacodec --enable-hwaccels \
	--enable-version3 --enable-libx264 --enable-gpl \
	--extra-ldflags="-L$X264_LIB_DIR/lib" \
	--extra-cflags="-I$X264_LIB_DIR/include -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD"
	
	echo "<< make $CPU"
	make clean
	make
	make install
}
 
ANDROID_ABI=arm64-v8a
ARCH=arm64
CPU=armv8-a
CROSS_PREFIX=$NDK/bin/aarch64-linux-android-
CLANG_PREFIX=$NDK/bin/aarch64-linux-android$API-clang
build_onearch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值