当前位置: 首页 > news >正文

编译可以在Android手机上运行的ffmpeg程序

下载代码

git clone git@github.com:FFmpeg/FFmpeg.git
git checkout n7.0

建立build目录

mkdir build
cd build

创建build.sh脚本

vim build.sh

这段脚本的主要功能是配置和编译 FFmpeg,使其能够在 Android 平台上运行,通过设置不同的架构和 API 级别,可以生成适用于不同 Android 设备的 FFmpeg 库。

#!/bin/bash

# 设置 NDK 路径(需替换为实际路径)

NDK=/home/hui/Android/Sdk/ndk/21.0.6113669/

# 选择目标架构(armv7a/arm64/x86/x86_64)

ARCH=arm64
API=21

# 工具链路径
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64

# 输出目录
PREFIX=$(pwd)/android/$ARCH

# 根据架构配置参数
case "$ARCH" in
  armv7a)
    CPU=armv7-a
    TARGET_TRIPLE=armv7a-linux-androideabi
    ;;
  arm64)
    CPU=armv8-a
    TARGET_TRIPLE=aarch64-linux-android
    ;;
  x86)
    CPU=i686
    TARGET_TRIPLE=i686-linux-android
    ;;
  x86_64)
    CPU=x86_64
    TARGET_TRIPLE=x86_64-linux-android
    ;;
esac

# 编译器路径
CC=$TOOLCHAIN/bin/$TARGET_TRIPLE$API-clang
CXX=$TOOLCHAIN/bin/$TARGET_TRIPLE$API-clang++
STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip

# FFmpeg 配置参数
../configure \
  --prefix=$PREFIX \
  --disable-shared \
  --enable-static \
  --enable-gpl \
  --enable-cross-compile \
  --enable-jni \
  --enable-ffmpeg \
  --disable-doc \
  --target-os=android \
  --arch=$ARCH \
  --cpu=$CPU \
  --cc=$CC \
  --cxx=$CXX \
  --strip=$STRIP \
  --sysroot=$TOOLCHAIN/sysroot \
  --extra-cflags="-march=$CPU -O3 -fPIC" \
  --extra-ldflags="-Wl,-rpath-link=$TOOLCHAIN/sysroot/usr/lib"

make clean
make -j16
make install

关键步骤说明

设置路径:包括 NDK 路径、工具链路径和输出目录。

配置参数:根据目标架构设置相应的编译参数。

调用 FFmpeg 配置脚本:传递所有必要的参数以配置 FFmpeg 编译环境。

编译和安装:清理之前的编译结果,进行编译并安装生成的库文件。

FFmpeg 配置脚本

../configure \
  --prefix=$PREFIX \
  --disable-shared \
  --enable-static \
  --enable-gpl \
  --enable-cross-compile \
  --enable-jni \
  --enable-ffmpeg \
  --disable-doc \
  --target-os=android \
  --arch=$ARCH \
  --cpu=$CPU \
  --cc=$CC \
  --cxx=$CXX \
  --strip=$STRIP \
  --sysroot=$TOOLCHAIN/sysroot \
  --extra-cflags="-march=$CPU -O3 -fPIC" \
  --extra-ldflags="-Wl,-rpath-link=$TOOLCHAIN/sysroot/usr/lib"

参数解释:

--prefix=$PREFIX:指定安装目录。

--disable-shared:禁用共享库生成。

--enable-static:启用静态库生成。

--enable-gpl:启用 GPL 许可证的功能。

--enable-cross-compile:启用交叉编译。

--enable-jni:启用 JNI 支持。

--enable-ffmpeg:启用 FFmpeg 应用程序。

--disable-doc:禁用文档生成。

--target-os=android:指定目标操作系统为 Android。

--arch=$ARCH:指定目标架构。

--cpu=$CPU:指定目标 CPU 架构。

--cc=$CC--cxx=$CXX:指定 C 和 C++ 编译器路径。

--strip=$STRIP:指定用于剥离调试符号的工具路径。

--sysroot=$TOOLCHAIN/sysroot:指定系统根目录。

--extra-cflags="-march=$CPU -O3 -fPIC":指定额外的编译标志。

--extra-ldflags="-Wl,-rpath-link=$TOOLCHAIN/sysroot/usr/lib":指定额外的链接标志。

--disable-shared & --enable-static好处是把ffmpeg编译成一个独立的可执行文件,放到手机里面的时候只需要把ffmpeg程序push进去即可。

在手机上运行

adb push ffmpeg /data/local

adb shell
$ chmod +x /data/local/ffmpeg
$ /data/local/ffmpeg -i /sdcard/

执行ffmpeg命令:

phone:/sdcard $ /data/local/ffmpeg -i input.mp4 

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2025-03-03T07:01:49.000000Z
    com.android.version: 14
  Duration: 00:02:31.20, start: 0.000000, bitrate: 21470 kb/s
  Stream #0:0[0x1](eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 2160x3840, 21371 kb/s, 60 fps, 60 tbr, 90k tbn (default)
      Metadata:
        creation_time   : 2025-03-03T07:01:49.000000Z
        handler_name    : VideoHandle
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96 kb/s (default)
      Metadata:
        creation_time   : 2025-03-03T07:01:49.000000Z
        handler_name    : SoundHandle
        vendor_id       : [0][0][0][0]

相关文章:

  • nginx accesslog 打印自定义header
  • 厦门大学第3弹:DeepSeek大模型及其企业应用实践(150页PPT,企业人员的大模型宝典)
  • 21.<基于Spring图书管理系统②(图书列表+删除图书+更改图书)(非强制登录版本完结)>
  • 历年湖南大学计算机复试上机真题
  • 【AI Guide】AI面试攻略只用看这一篇就够了!力争做全网最全的AI面试攻略——大模型(二十六)词表与词表扩充
  • Mysql学习笔记(六)Django连接MySQL
  • 机器学习算法——回归任务
  • LabVIEW虚拟频谱分析仪
  • 统计Excel列中某值出现的次数
  • 计算机网络数据传输探秘:包裹如何在数字世界旅行?
  • 勿以危小而为之勿以避率而不为
  • MySQL——DQL、多表设计
  • 备赛蓝桥杯之第十五届职业院校组省赛第五题:悠然画境
  • Versal - XRT(CPP) 2024.1
  • 力扣-动态规划-53 最大子数组和
  • 0005__PyTorch 教程
  • 小白入坑向:Java 全栈系统性学习推荐路线之一
  • Easy Trans Spring Boot Starter ---Spring系列的字段翻译库
  • 环境变量 ─── linux第14课
  • Debezium日常分享系列之:Debezium 3.0.8.Final发布
  • h5网站开发平台/行业网络营销
  • 衡水企业做网站多少钱/互联网优化是什么意思
  • 哪些彩票网站可做代理赚钱/中文域名
  • 企业官网型网站建设/本地推广平台
  • 帝国做的网站怎么上传/百度关键词搜索排名
  • 怎么看一个网站是用模板什么做的/拓客引流推广