GithubHelp home page GithubHelp logo

syanfox / ffmpeg-android Goto Github PK

View Code? Open in Web Editor NEW

This project forked from yangfeng1994/ffmpeg-android

1.0 0.0 0.0 116.18 MB

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

License: MIT License

Java 91.69% Kotlin 8.31%

ffmpeg-android's Introduction

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

ffmpeg-android's People

Contributors

yangfeng1994 avatar

Stargazers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.