说明:仅支持Windows系统下,amr、aud、slk、silk转成mp3。转换之前先下载转换工具,点我下载,提取码:2olq
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* 支持在windows系统下,amr、aud、slk、silk转成mp3格式
*/
public class AudioConversion {
public static void main(String[] args) {
String audioType = "amr";//源音频文件类型,amr、aud、slk、silk
String source = "E:\\audio\\audio." + audioType;//源音频文件
String target = "E:\\audio\\audio.mp3";//目标音频文件
String path = "E:\\audio\\";//音频转换工具存放路径
File sourceFile = new File(source);
if(sourceFile.exists()) {
String pcmPath = path + "audio.pcm";
processPcm(path, source, pcmPath);//先转成pcm格式
File file=new File(pcmPath);
if(file.exists()) {
processMp3(path, pcmPath, target);//再由pcm转成mp3
} else {
processFfmpegMp3(path, source, target);//直接转成mp3
}
} else {
System.out.println("源文件不存在");
}
}
// 调用sile_v3_decoder.exe,转成pcm格式
private static void processPcm(String path, String source, String pcmPath){
List<String> commend = new ArrayList<String>();
commend.add(path+"silk_v3_decoder.exe");
commend.add(source);
commend.add(pcmPath);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
Process p=builder.start();
p=Runtime.getRuntime().exec("taskkill -f -t -im silk_v3_decoder.exe");
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
// 调用ffmpeg,pcm转mp3
private static void processMp3(String path, String pcmPath, String target) {
//ffmpeg -y -f s16le -ar 24000 -ac 1 -i 源文件 目标文件
List<String> commend = new ArrayList<String>();
commend.add(path+"ffmpeg.exe");
commend.add("-y");
commend.add("-f");
commend.add("s16le");
commend.add("-ar");
commend.add("24000");
commend.add("-ac");
commend.add("1");
commend.add("-i");
commend.add(pcmPath);
commend.add(target);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
Process p=builder.start();
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
// 调用ffmpeg.exe,转MP3
private static void processFfmpegMp3(String path, String source, String target){
List<String> commend = new ArrayList<String>();
commend.add(path+"ffmpeg.exe");
commend.add("-i");
commend.add(source);
commend.add(target);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
Process p=builder.start();
p=Runtime.getRuntime().exec("taskkill -f -t -im ffmpeg.exe");
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}