很多文章关于将MP4转为MP3写的都很复杂,我这里总结一个比较简单的方法。此方法有个BUG,最后再说。但整体功能比较简单可用。
一,导入第三方文件
此方法用到3个第三方库文件如下,(资源和Demo在文章最底部)
将这3个库文件导入项目的libs文件夹,并右键 Add As Library
二,写一个转换用的静态类 ChangeUtil.kt
package com.android.videotomp3
import android.util.Log
import org.mp4parser.muxer.Movie
import org.mp4parser.muxer.Track
import org.mp4parser.muxer.builder.DefaultMp4Builder
import org.mp4parser.muxer.container.mp4.MovieCreator
import org.mp4parser.muxer.tracks.AppendTrack
import java.io.RandomAccessFile
import java.util.*
/**
* 搜索关注公众号:小众时代
* 分享高清 PDF电子书
* 分享数十款App 小图标,可直接用于项目
* 分享多种 学习 娱乐 资源
*/
object ChangeUtil {
fun changeToMp3(from:String,to:String){
try{
val audioTracks: MutableList<Track> = LinkedList()
val movie = MovieCreator.build(from)
for (t in movie.tracks) {
if (t.handler == "soun") {
audioTracks.add(t)
}
}
val result = Movie()
if (audioTracks.size > 0) {
result.addTrack(AppendTrack(*audioTracks.toTypedArray()))
}
val out = DefaultMp4Builder().build(result)
try {
val fc = RandomAccessFile(to, "rw").channel
out.writeContainer(fc)
fc.close()
} catch (e: Exception) {
e.printStackTrace()
}
}catch (e:Exception){
Log.d("ERR",e.toString())
}
}
}
MP4转为MP3的核心方法就是上面这个方法,内部的实现不需要过多去了解。
只要知道,changeToMp3() 这个 函数中的两个参数,第一个是要转换的mp4视频文件的绝对路径,第二个是转换后的mp3音频文件的绝对路径。
三,具体实现
经过上面两步其实转换Mp3的过程已经可以实现了。
源码还涉及到外部文件夹的建立,权限的申请,文件的拷贝等内容,全写出来篇幅过长,也不利于查看,需要的话可直接下载Demo源码。
四,BUG
经测试,从抖音上下载的视频,都可以正常保存为MP3,但是通过摄像头录像的视频,在转换为MP3时会报内存溢出,目前不知道如何解决,有高手可以给出解决方案请留言
资源地址:
链接:https://pan.baidu.com/s/11pJDJsLyebDtsu_a1IuO2A
提取码:9999