You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

2021年使用Android NDK编译FFMPEG实现webm转mp3问题求助

Android NDK r23+ 编译FFmpeg适配四架构解决方案

现有脚本问题

  • 变量缺失:配置项引用了$ARCH和$CPU,但脚本中未定义这两个变量,也没有做四架构的循环适配逻辑
  • 参数拼写错误:extra-cflags中的-0s是无效参数,正确写法为-Os(大写字母O,代表针对体积做优化),错误参数会导致编译阶段直接报错
  • 依赖缺失:开启了--enable-libshine参数,若未提前将shine库交叉编译为对应Android架构的版本,配置阶段会直接报错找不到依赖库
  • 冗余配置:重复写了两次--disable-everything,可删除其中一份

修正后的编译脚本

该脚本可自动完成aarch64、armv7、i686、x86_64四个架构的编译,使用前请修改开头的API、OUTPUT、NDK、SHINE_BUILD_ROOT四个参数为你本地的对应路径:

#!/bin/bash

# 自定义配置项
API=31 # 目标Android API版本
OUTPUT=/home/romain/dev/android/ffmpeg_build # 编译输出根路径
NDK=/home/romain/android-sdk/ndk/23.0.7599858 # NDK本地路径
SHINE_BUILD_ROOT=/home/romain/dev/android/shine_build # 提前交叉编译好的libshine输出根路径,子目录对应四个架构

# 固定配置项
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot
ARCH_CONFIGS=(
    "armv7a armv7-a arm-linux-androideabi"
    "aarch64 armv8-a aarch64-linux-android"
    "x86 i686 i686-linux-android"
    "x86_64 x86-64 x86_64-linux-android"
)

for config in "${ARCH_CONFIGS[@]}"; do
    read ARCH CPU TOOL_PREFIX <<< "$config"
    ARCH_OUTPUT=$OUTPUT/$ARCH
    mkdir -p $ARCH_OUTPUT

    # 定义编译工具链
    CC="$TOOLCHAIN/bin/${TOOL_PREFIX}${API}-clang"
    CXX="$TOOLCHAIN/bin/${TOOL_PREFIX}${API}-clang++"
    AR="$TOOLCHAIN/bin/llvm-ar"
    RANLIB="$TOOLCHAIN/bin/llvm-ranlib"
    STRIP="$TOOLCHAIN/bin/llvm-strip"

    # 清理上一次编译缓存
    make clean

    ./configure \
        --prefix=$ARCH_OUTPUT \
        --target-os=android \
        --arch=$ARCH \
        --cpu=$CPU \
        --disable-everything \
        --disable-network \
        --disable-autodetect \
        --enable-small \
        --enable-decoder=opus,vorbis \
        --enable-demuxer=matroska \
        --enable-muxer=mp3 \
        --enable-protocol=file \
        --enable-filter=aresample \
        --enable-libshine \
        --enable-encoder=libshine \
        --cc=$CC \
        --cxx=$CXX \
        --ar=$AR \
        --ranlib=$RANLIB \
        --strip=$STRIP \
        --sysroot=$SYSROOT \
        --extra-cflags="-Os -fpic -I$SHINE_BUILD_ROOT/$ARCH/include" \
        --extra-ldflags="-L$SHINE_BUILD_ROOT/$ARCH/lib"

    make -j$(nproc)
    make install
done

注意事项

  • 若不需要libshine,可删除配置中的--enable-libshine、--enable-encoder=libshine以及和shine路径相关的参数,替换为内置mp3编码器即可,不过内置编码器编译后体积会略大
  • 编译完成后可使用llvm-strip二次处理生成的二进制文件,可额外缩小10%~20%的体积,完全可以做到2MB以内的大小要求
  • 若不需要生成ffmpeg可执行文件仅需要调用库,可添加--disable-programs参数进一步压缩体积

内容的提问来源于stack exchange,提问作者Kyros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:54:02