Kotlin编写AudioExtractor视频解析七
上篇文章讲解了怎么利用FFmpeg来合并一个音视频,今天我们继续来讲解一下利用FFmpeg来处理视频的时间,比如裁剪一段视频,然后合并输出新的视频地址,看了这篇文章你就能学会怎么处理音视频时间合并了。
在讲解之前我在这里还是简单来说一下代码当中关于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) } } }
上面的代码也很简单,就是从外部获取一个视频的输入文件,加上开始时间和结束时间来裁剪一个视频的长度。
好了如果有不懂得可以评论里面我们一起来讨论。
关注,点赞,转发,谢谢你的支持。
迅雷没有做错什么,只是用户不需要了1hr说起迅雷,每个人都会想起那标志性的蜂鸟图案和下载成功的通知铃声。叮。每当这个声音响起时,总能让在场无数老司机展露出各种意义不明的微笑。欢乐时光,就要开始了。但现在,再谈起迅雷
国产生态破冰,芯动科技传来好消息,完成国产操作系统适配在信息技术体系的生态大环境,曾经也是摆在我国面前的一座高峰,曾经也是我国没有取得突破的高端领域,但是,华为事件犹如平地惊雷,让我国渐渐意识到高端科技和独立自主的重要性。因此,许许多
vivoX80系列背面外观曝光蔡司加持矩阵相机模组熟悉vivo的用户都知道,vivo旗下的X系列一直定位全能影像旗舰,此前的X系列多款机型均获得了广泛的好评。而在不久前,vivo新一代影像旗舰vivoX80系列也开始得到外界曝光,
本是同根生,何不用华为?在中国智能汽车历史上,3月23日或许是一个关键性的节点。因为在这一天,目前中国最大的本土智能车商比亚迪,高调宣布与人工智能计算制造商英伟达在智能驾驶技术方面达成合作。依据比亚迪公布
3500左右,有哪些高性价比手机推荐?3500左右推荐以下机型!我们买手机无非是看性能(芯片),拍照(摄像头),续航(电池容量和快充)。荣耀30搭载麒麟9855gsoc芯片,性能介于麒麟820和980之间,能打挖孔屏,
2000元手机6万多人没砍下来拼多多的回应?在3月17号的时候游戏主播超级小桀在直播间里提了一句我们来试一下拼多多的砍一刀活动,说起砍一刀活动前段时间刘律师的事大家也知道吧?其实也不一定有6万人帮砍可两三千总有吧?况且本人也
年过四十还有翻身的机会吗?看到题目,思绪万千。我47了,同样在奋斗的路上一切才刚刚开始人到中年,确实多了很多羁绊,上有老下有小,沉重的负担让我们步履维艰。不过,正像许巍在歌中唱的没有什么能够阻挡,我对自由的
现在网络上充斥着大量的短视频创业经验分享,有几个是真的?百分之九十都是假的,他们只是为了吸引你去看。有经验的人不会分享给大家的,他们分享给大家的只是一些基本的经验。要想做好短视频就得自己专心的去做,做一些真实的视频,慢慢的就会有经验了。
编写高性能Java程序的技术汇编性能并不总是我们需要首要考虑的因素,但当我们需要处理的数据量较大,或者对象计算需要消耗较多资源时,性能问题就会自然浮上来,需要我们花些心思进行调优。本文搜集整理了40多条编写高性能
普冉股份新一代摄像头模组EEPROM产品应用于海外手机头部厂商旗舰机型普冉股份新一代摄像头模组EEPROM产品应用于海外手机头部厂商旗舰机型财联社3月20日电,普冉股份公告,公司NORFlash全系列产品研发完成并成为量产交付主力,晶圆良率达到95以
苹果等退出俄市场,中国手机乘胜追击,出货量暴增成大赢家俄乌战争正在打得如火如荼,这给许多行业带来了巨大的变动和调整,紧跟着各种的制裁给到俄罗斯,这其中不乏诸如苹果三星等手机企业。各种因素机缘巧合之下,却推动了中国手机在俄罗斯的销量暴增