网站首页 > 编程文章 正文
AudioMerger 音视频合并操作,上篇文章讲解了关于视频的音频提取功能,今天我们学习一下合并的处理,主要用到了 com.github.hiteshsondhi88.libffmpeg 这个开源库的一个方法,这个开源库主要也是为我们提供了ffmpeg 的功能封装。
class AudioMerger private constructor(private val context: Context) {
private var audio1: File? = null
private var audio2: File? = null
private var callback: FFMpegCallback? = null
private var outputPath = ""
private var outputFileName = ""
fun setFile1(originalFiles: File): AudioMerger {
this.audio1 = originalFiles
return this
}
fun setFile2(originalFiles: File): AudioMerger {
this.audio2 = originalFiles
return this
}
fun setCallback(callback: FFMpegCallback): AudioMerger {
this.callback = callback
return this
}
fun setOutputPath(output: String): AudioMerger {
this.outputPath = output
return this
}
fun setOutputFileName(output: String): AudioMerger {
this.outputFileName = output
return this
}
fun merge() {
if ((audio1 == null || !audio1!!.exists()) || (audio2 == null || !audio2!!.exists())) {
callback!!.onFailure(IOException("File not exists"))
return
}
if (!audio1!!.canRead() || !audio2!!.canRead()) {
callback!!.onFailure(IOException("Can't read the file. Missing permission?"))
return
}
val outputLocation = Utils.getConvertedFile(outputPath, outputFileName)
//Merge two audio files
val cmd = arrayOf("-y", "-i", audio1!!.path, "-i", audio2!!.path, "-filter_complex", "amix=inputs=2:duration=first:dropout_transition=0", "-codec:a", "libmp3lame", "-q:a", "0", outputLocation.path)
try {
FFmpeg.getInstance(context).execute(cmd, object : ExecuteBinaryResponseHandler() {
override fun onStart() {}
override fun onProgress(message: String?) {
callback!!.onProgress(message!!)
}
override fun onSuccess(message: String?) {
Utils.refreshGallery(outputLocation.path, context)
callback!!.onSuccess(outputLocation, OutputType.TYPE_AUDIO)
}
override fun onFailure(message: String?) {
if (outputLocation.exists()) {
outputLocation.delete()
}
callback!!.onFailure(IOException(message))
}
override fun onFinish() {
callback!!.onFinish()
}
})
} catch (e: Exception) {
callback!!.onFailure(e)
} catch (e2: FFmpegCommandAlreadyRunningException) {
callback!!.onNotAvailable(e2)
}
}
companion object {
val TAG = "AudioMerger"
fun with(context: Context): AudioMerger {
return AudioMerger(context)
}
}
}
val cmd = arrayOf("-y", "-i", audio1!!.path, "-i", audio2!!.path, "-filter_complex", "amix=inputs=2:duration=first:dropout_transition=0", "-codec:a", "libmp3lame", "-q:a", "0", outputLocation.path)
主要是这条命令的讲解,arrayOf 是kotlin当中创建一个字符数组,这条命令的主要作用就是合并音视频。
写FFmpeg的命令,如果-y 和 -i 应该是很基础的指令,-y就是全局参数,覆盖输出文件而不询问,
-i就是置顶从哪儿采集数据,它相当于是一个采集前的入口文件,数据源。
amix相当于是一个滤波器
好了今天就讲解到这里,你的关注,点赞,收藏,转发是对我最大的支持,谢谢了。
猜你喜欢
- 2024-09-08 技术分享| 如何使用FFmpeg命令处理音视频
- 2024-09-08 ubuntu ffmpeg开发环境搭建(ffmpeg linux开发)
- 2024-09-08 嘉宾博文:OpenCV如何在区块链操作系统中进行交叉编译
- 2024-09-08 想做人工智能的你,OpenCV安装好了吗?AI大神手把手教会你
- 2024-09-08 FFmpeg中与视频解码相关知识简介(ffmpeg hevc解码)
- 2024-09-08 ffmpeg教程-手把手教你如何简单快捷处理音视屏
- 2024-09-08 C++与音视频处理: 处理音频和视频数据的编码和解码
- 2024-09-08 ffmpeg安装大放送,包括编译需要的支持库
- 2024-09-08 ffmpeg推流桌面直播(ffmpeg推流rtsp命令)
- 2024-09-08 FFmpeg基础知识总结(ffmpeg)
你 发表评论:
欢迎- 05-09Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 05-09《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- 05-09MapStruct架构设计(mapstruct @mapping)
- 05-09分布式微服务架构组件(分布式微服务架构设计)
- 05-09Java Swing组件下的JButton实例(java swing 组件)
- 05-09java基础都在这了,小主们拿去吧(java基础是指什么)
- 05-09AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 05-09【Spring Boot】WebSocket 的 6 种集成方式
- 最近发表
-
- Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- MapStruct架构设计(mapstruct @mapping)
- 分布式微服务架构组件(分布式微服务架构设计)
- Java Swing组件下的JButton实例(java swing 组件)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 【Spring Boot】WebSocket 的 6 种集成方式
- Java 中五种最常见加密算法:原理、应用与代码实现
- 用注解进行参数校验,spring validation介绍、使用、实现原理分析
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)