Need help with FFmpeg-Android?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

yangfeng1994
181 Stars 33 Forks MIT License 38 Commits 1 Opened issues

Description

🔥FFmpeg-Android 是基于ffmpeg n4.0-39-gda39990编译运行在android平台的音视频的处理框架, 使用的是ProcessBuilder执行命令行操作, 可实现视频字幕添加、尺寸剪切、添加或去除水印、时长截取、转GIF动图、涂鸦、音频提取、拼接、质量压缩、加减速、涂鸦、 倒放、素描、色彩平衡、模糊、九宫格、添加贴纸、滤镜、分屏、图片合成视频等,音视频合成、截取、拼接,混音、音视频解码,视频特效等等音视频处理...

Services available

!
?

Need anything else?

Contributors list

No Data

FFmpeg-Android

FFmpeg 在 Android中使用. 在您的Android项目中轻松执行FFmpeg命令。

关于

引入本项目使您的项目尽可能的小,功能尽可能的完善,已使用本项目上线的项目有 影音坊

项目支持 androidx 或者 support

本项目没有引入任何第三方库,不会对您的项目有任何的代码侵入,可兼容最低api版本为15

项目截图

图-1:ffmpeg_version 图-2:cmd 图-3:cmd 图-3:cmd

体系结构

FFmpeg-Android运行在以下架构上: - armeabi - armeabi-v7a - armv7-neon - arm64-v8a

特性

  • 使用最新的 git-2020-01-25-fd11dd500 Copyright (c) 2000-2020 the FFmpeg developers
  • 多线程

使用

在项目的 build.gradle 中添加

allprojects{

repositories {
    ...
    maven { url 'https://jitpack.io' }
    }

}

1.重新编译了ffmpeg

2.支持更多的命令,执行速度更快

3.支持在安卓10(aip29)上使用

4.支持进度回调,进度为执行文件的进度,如果想计算进度,拿(当前返回进度)除以(文件进度)

app 的 build.gradle 下添加

dependencies {
     implementation 'com.github.yangfeng1994:FFmpeg-Android:v2.0.1'
}

设置支持的so库版本

android{
        defaultConfig{
         ndk {
                    abiFilters 'armeabi-v7a', 'arm64-v8a'     //过滤的so库版本
                }
        }
}

友情提示

  • 申请权限(对本地文件处理时,建议您务必申请权限,不然无法对音视频进行操作)

  • 对输入的文件是否存在,进行判断(如您想要输出的文件 已经在手机中存在,将无法对输出文件)

运行 FFmpeg

java
    // 要执行“ffmpeg -version”命令

String[] cmd = new String[]{"-version"};

FFmpegAsyncUtils  asyncTask =new FFmpegAsyncUtils()

 asyncTask.setCallback(new FFmpegExecuteCallback() {

        @Override
        public void onFFmpegStart() {}

        @Override
        public void onFFmpegSucceed(@Nullable String executeOutput) {

        }

        @Override
        public void onFFmpegFailed(@Nullable String executeOutput) {

        }

        @Override
        public void onFFmpegProgress(@Nullable Integer progress) {
                fload mprogress = progress/执行视频文件或语音文件时长
        }

        @Override
        public void onFFmpegCancel() {

        }
    })

    asyncTask.execute(cmd);

    注意,传入的参数是一个lsit

    如果想要传入string,命令行拼接的时候,需要用空格隔开  使用FFmpegAsyncUtils2就行

kotlin
    // 要执行“ffmpeg -version”命令,只需传递“ arrayOf(-version) ”即可

val  asyncTask = FFmpegAsyncUtils()

asyncTask.setCallback(object :FFmpegExecuteCallback{

        override fun onFFmpegStart() {

        }

        override fun onFFmpegProgress(progress: Int?) {

            //注意kotlin的除法,建议转为float后,再进行除以

            val mprogress = progress?.div(执行视频文件或语音文件时长)  

            }

        override fun onFFmpegCancel() {

        }

        override fun onFFmpegSucceed(executeOutput: String?) {

        }

        override fun onFFmpegFailed(executeOutput: String?) {

        }

    })

    asyncTask.execute(cmd)

    注意,传入的参数是一个lsit

    如果想要传入string,命令行拼接的时候,需要用空格隔开  使用FFmpegAsyncUtils2就行

注意:

  • 所有命令行都不需要以 "ffmpeg"开头,直接命令行就行。

  •  本项目使用的是AsyncTask,需要注意,每个子线程AsyncTask只能执行一次命令,取消后
    

    应重新new 一个AsyncTask 对象。

  • 混淆在model里面已经添加,无需再次添加

停止(或退出)FFmpeg进程

  • 如果你想停止运行中的ffmpeg, 只需在调用' asyncTask.onCancel() '

FFmpegExecuteCallback 接口中方法的介绍

  • onFFmpegStart() 开始执行

  • onFFmpegProgress(progress: Int?) 进度 参数为执行音视频文件的所在的毫秒值

  • onFFmpegCancel() 取消执行

  • onFFmpegSucceed(executeOutput: String?) 执行成功 参数为ffmpeg的执行结果信息

  • onFFmpegFailed(executeOutput: String?) 执行失败 参数为返回为失败原因

历史版本

  • v1.1.1 优化了代码的逻辑,兼容了低版本的手机,使项目同时兼容androidx与support
    implementation 'com.github.yangfeng1994:FFmpeg-Android:v1.1.1'

  • v1.0.1 移除x86 so包,优化项目大小
    implementation 'com.github.yangfeng1994:FFmpeg-Android:v1.0.1'

  • v1.0.0 新建项目 第一版本
    implementation 'com.github.yangfeng1994:FFmpeg-Android:v1.0.0'

体验demo

Licensing

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.