kotlin获取context_Kotlin编写AudioExtractor 视频解析七

上篇文章讲解了怎么利用FFmpeg来合并一个音视频,今天我们继续来讲解一下利用FFmpeg来处理视频的时间,比如裁剪一段视频,然后合并输出新的视频地址,看了这篇文章你就能学会怎么处理音视频时间合并了。

8fa5d647b01da863c32c3bda7a462e1e.png

在讲解之前我在这里还是简单来说一下代码当中关于koltin的一些基础知识吧,

fun setCallback(callback: FFMpegCallback): AudioTrimmer {        this.callback = callback        return this    }

这段代码是一个构造方法,kotlin当中跟java的命名是相反的,比如kotlin当中:冒号后面一般是跟的返回值类型,包括参数后面的冒号就是这个变量的类型。

class AudioTrimmer private constructor(private val context: Context) {    private var audio: File? = null    private var callback: FFMpegCallback? = null    private var startTime = "00:00:00"    private var endTime = "00:00:00"    private var outputPath = ""    private var outputFileName = ""    fun setFile(originalFiles: File): AudioTrimmer {        this.audio = originalFiles        return this    }    fun setCallback(callback: FFMpegCallback): AudioTrimmer {        this.callback = callback        return this    }    fun setStartTime(startTime: String): AudioTrimmer {        this.startTime = startTime        return this    }    fun setEndTime(endTime: String): AudioTrimmer {        this.endTime = endTime        return this    }    fun setOutputPath(output: String): AudioTrimmer {        this.outputPath = output        return this    }    fun setOutputFileName(output: String): AudioTrimmer {        this.outputFileName = output        return this    }    fun trim() {        if (audio == null || !audio!!.exists()) {            callback!!.onFailure(IOException("File not exists"))            return        }        if (!audio!!.canRead()) {            callback!!.onFailure(IOException("Can't read the file. Missing permission?"))            return        }        val outputLocation = Utils.getConvertedFile(outputPath, outputFileName)        //Trim starting from start Time to End time        val cmd = arrayOf("-i", audio!!.path, "-ss", startTime, "-t", endTime, "-c", "copy", 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 = "AudioTrimmer"        fun with(context: Context): AudioTrimmer {            return AudioTrimmer(context)        }    }}

上面的代码也很简单,就是从外部获取一个视频的输入文件,加上开始时间和结束时间来裁剪一个视频的长度。

好了如果有不懂得可以评论里面我们一起来讨论。

关注,点赞,转发,谢谢你的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值