Advertisement

ffmpeg sdk java_推荐一个强大的音视频处理的开源项目!

阅读量:

原标题:推荐一个强大的音视频处理的开源项目!

a9c95ab52abdcb424da672121928b30b.png

1.前景提要

在我们的项目开发中,经常涉及音视频处理相关的工作。通常我们会选用FFmpeg框架作为基础实现。然而,在我们的开发环境中进行交叉编译是一项较为复杂的工作。为此我们专门编写了这个FFmpegCommand工具包。该工具包基于FFmpeg核心库,并整合了lame、libx264和fdk-aac等主流音视频编码工具。它是一个专为Android平台设计的应用程序。该工具包实现了对音视频处理的一系列功能:支持音视频剪辑、转码、解码原始数据以及编码等功能。具体来说包括:对多画面进行拼接处理、对音频与视频进行混合编辑以及对视频亮度对比度进行调节等操作,并提供音频淡入淡出效果等辅助功能

注意:当前库只适用于Android

2.主要功能

支持所有FFmpeg命令

支持视频格式转换 mp4->flv

支持音频编解码 mp3->pcm pcm->mp3 pcm->aac

支持视频编解码 mp4->yuv yuv->h264

支持音视频的剪切、拼接

支持视频转图片 mp4->png mp4->gif

支持音频声音大小控制以及混音(比如朗读的声音加上背景音乐)

支持部分滤镜 音频淡入、淡出效果、视频亮度和对比度以及添加水印

支持获取媒体文件信息

3.引入

这两种引入方案中只限于选择一个即可,并且需要以当前可用的最新版本为基础进行更换。

// 全部编解码-体积较大

implementation 'com.coder.command:ffmpeg:${latestVersion}'

// 部分常用编解码-体积较小,比上面引入减少大约6M

implementation 'com.coder.command:ffmpeg-mini:${latestVersion}'

如果没有特别的编解码需求,强烈推荐建议使用 ffmpeg-mini

4.使用

下面只展示部分使用,其他可以参考 【WIKI】

FFmpegCommand方法

方法

功能

FFmpegCommand->setDebug(boolean debug)

是否Dubug模式,可打印日志,默认true

FFmpegCommand->runSync(final String[] cmd)

同步执行ffmpeg命令,外部需添加延时线程

FFmpegCommand->将被用来处理(final String[] cmd作为命令数组,并配合OnFFmpegCommandListener进行操作)

同步执行ffmpeg命令,并回调 完成,取消,进度

FFmpegCommand->runAsync(final String[] cmd, IFFmpegCallBack callBack)

异步执行,外部无需添加延时线程,并回调 开始,完成,取消,进度

FFmpegCommand->getInfoSync(String path,@Attribute int type)

获取媒体信息,type值必须为@Attribute中注解参数

FFmpegCommand->FFmpegCommand.exit

退出当前ffmpeg执行

使用runAsync

通过 runAsync 启动 FFmpeg 作为异步操作,并无需单独启动子进程。推荐采用此方法来进行音视频处理。

通过直接调用FFmpegCommand.runAsync方法(包含cmd数组和callback回调),其中第一个参数由FFmpegUtils工具类提供,并非强制要求;此外,用户还可以自行添加该参数。

finallongstartTime = System.currentTimeMillis;

FFmpegCommand.runAsync(FFmpegUtils.cutAudio(input, "00:00:30", "00:00:40", output),

newCommonCallBack {

@Override

publicvoidonComplete{

Log.d( "FFmpegTest", "run: 耗时:"+ (System.currentTimeMillis - startTime));

@Override

publicvoidonCancel{

Log.d( "FFmpegTest", "Cancel");

}

@Override

publicvoidonProgress( intprogress){

Log.d( "FFmpegTest",progress+ "");

}

}

});

自定义FFmpeg命令

这里只是演示了音频剪切,很多如上述功能请自行查阅FFmpegUtils

如果其中不满足需求,可添加自己的FFmpeg命令.例如:

String cmd = "ffmpeg -y -i %s -vn -acodec copy -ss %s -t %s %s";

String result = String.format(cmd, input, "00:00:30", "00:00:40", output);

FFmpegCommand.runAsync(result.split( " "), newCommonCallBack {

@Override

publicvoidonComplete{

Log.d( "FFmpegTest", "run: 耗时:"+ (System.currentTimeMillis - startTime));

}

@Override

publicvoidonCancel{

Log.d( "FFmpegTest", "Cancel");

}

@Override

publicvoidonProgress( intprogress){

Log.d( "FFmpegTest",progress+ "");

}

})

取消执行

当执行该方法时会导致 CommonCallBack 的 onCancel 方法或 OnFFmpegCommandListener 的 onCancel 方法被调用。

FFmpegCommand.exit;

5.参考

Java 使用请参考 FFmpegCommandActivity

Kotlin使用请参考 KFFmpegCommandActivity

6.兼容性

兼容Android minSdkVersion >=14(version>=1.1.4,此前的版本只兼容minSdkVersion >=21)

b334b416ce5fd5311d4df0a71c6e2149.png

图-7 Demo下载

c281899afd4d2623106873e026fd913b.png

图-8 Demo下载

e2bd9f4d0bb5e1d06f0492391b495afd.png

图-9 Demo下载 7.项目地址

GitHub地址:https://github.com/AnJoiner/FFmpegCommand笑笑xu,笑而不答,了解更多内容

责任编辑:

全部评论 (0)

还没有任何评论哟~