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

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)

图-7 Demo下载

图-8 Demo下载

图-9 Demo下载 7.项目地址
GitHub地址:https://github.com/AnJoiner/FFmpegCommand笑笑xu,笑而不答,了解更多内容
责任编辑:
