最近有个需求,需要录制视频,能添加水印,所以下面这篇文章主要给大家介绍了关于Android视频加水印之FFmpeg的简单应用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
视频处理是Android开发中常见的需求。像是视频加水印,视频格式转换,视频截图等等……
FFmpeg是处理视频时常用到的工具,一般情况可以用FFmpeg源码自己编译,也可以使用网上别人编译好的包,这里我使用的是后一种方案。
我使用的是在GitHub找的。当然其他FFmpeg编译出来的包都是可以的。
用FFmepg处理视频或者音频思路是:
- 加载FFmpeg环境
- 编写FFmpeg的处理命令
- 运行处理命令
- 等待结果返回
一、首先,引入依赖 compile 'com.writingminds:FFmpegAndroid:0.3.2'
二、然后使用FFmpeg前需要进行加载
FFmpeg ffmpeg = FFmpeg.getInstance(context);
try {
ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
@Override
public void onStart() {}
@Override
public void onFailure() {}
@Override
public void onSuccess() {}
@Override
public void onFinish() {}
});
} catch (FFmpegNotSupportedException e) {
// Handle if FFmpeg is not supported by device
}三、接着就可以执行命令了,例如下面的cmd
FFmpeg ffmpeg = FFmpeg.getInstance(context);
try {
// to execute "ffmpeg -version" command you just need to pass "-version"
ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
@Override
public void onStart() {}
@Override
public void onProgress(String message) {}
@Override
public void onFailure(String message) {}
@Override
public void onSuccess(String message) {}
@Override
public void onFinish() {}
});
} catch (FFmpegCommandAlreadyRunningException e) {
// Handle if FFmpeg is already running
}这里以给视频加水印为例:
val convertedFile = getConvertedFile(inFile!!)//输出文件路径
val cmd = arrayOf(
"-y",
"-i",
inFile!!.path,
"-i",
watermarkFile!!.absolutePath,
"-filter_complex",
"[0:v][1:v]overlay=main_w-overlay_w-10:10",
"-vcodec",
"libx264",
"-codec:a",
"copy",
convertedFile.path
)
try {
FFmpeg.getInstance(context).execute(cmd, object : FFmpegExecuteResponseHandler {
override fun onStart() {}
override fun onProgress(message: String) {
Log.e("TAg", "水印:$message")
}
override fun onSuccess(message: String) {
Log.e("TAg", "成功:$message")
inFile?.delete();
watermarkFile?.delete();
callback?.onSuccess(convertedFile)
}
override fun onFailure(message: String) {
callback?.onFailure(IOException(message))
}
override fun onFinish() {
Log.e("TAg", "结束")
}
})
} catch (e: Exception) {
callback?.onFailure(e)
}这里对用到的命令做个简单的解释:
- -y 覆盖输出文件
- -I filename 输入文件,注:这里用到两个输入文件,分别是视频文件和水印图片文件
- -filter_complex “滤镜图” 多输入滤镜,滤镜图包含多个滤镜链,分号分隔;滤镜链包含多个滤镜,逗号分隔 其中overlay=X:Y 覆盖视频,需要两个输入,第二个覆盖在第一个上面的位置(X,Y), Y可以省略,[0:v][1:v]是第一第二两个输入的引用,作为输入的指令
左上角:overlay=10:10
右上角:overlay=main_w-overlay_w-10:10
左下角:overlay=10:main_h-overlay_h-10
右下角:overlay=main_w-overlay_w-10:main_h-overlay_h-10
- -vcodec指定视频解码器,注:这里输入的视频编码是H264,所以要用264解码。
- -codec:a指定音频解码器 copy的意思是和输入源相同
注意:这里的输入输出文件都是本地路径
FFmpeg处理完毕时候就会回调onSuccess,我们在这里返回输出文件即可。
像是视频合并,提取音频,视频压缩等等功能思路都是大致如此。区别就是使用cmd命令有所区别,实现具体功能的时候再详细了解一下具体的命令即可。
总结
到此这篇关于Android视频加水印之FFmpeg的简单应用的文章就介绍到这了,更多相关Android视频加水印FFmpeg内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Android视频加水印之FFmpeg的简单应用实例
基础教程推荐
- Flutter绘图组件之CustomPaint使用详解 2023-05-12
- android studio按钮监听的5种方法实例详解 2023-01-12
- 解决Android Studio突然不显示logcat日志的问题 2023-02-04
- Android多返回栈技术 2023-04-15
- Flutter手势密码的实现示例(附demo) 2023-04-11
- iOS开发教程之XLForm的基本使用方法 2023-05-01
- IOS 播放系统提示音使用总结(AudioToolbox) 2023-03-01
- Android开发使用RecyclerView添加点击事件实例详解 2023-06-15
- IOS应用内跳转系统设置相关界面的方法 2022-11-20
- Android中的webview监听每次URL变化实例 2023-01-23
