使用ffmpeg对mp3格式的音频文件类型转换、截取及合并
FFmpeg简介:FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。
FFmpeg命令:
一、mp3截取
ffmpeg -y -i test.mp3 -ss 00:00:00 -t 00:00:03 -acodec copy output_mp3.mp3
参数说明
-y : 允许覆盖
-i test.mp3: 源文件
-ss 00:00:00: 开始时间
-t 00:00:03: 截取音频时间长度
-acodec copy:编码格式复制
二、合并两个mp3文件为一个
ffmpeg -i "contat:file1.mp3|file2.mp3" -acodec copy merge.mp3
file1.mp3:源文件1
file2.mp3:源文件2
merge.mp3:合并后的目标文件
二、mp3转pcm
ffmpeg -y -i test.mp3 -acodec pcm_s16le -f s16le -ac 2 -ar 16000 16k.pcm
参数说明
-y: 允许覆盖
-i test.mp3: 源文件
-acodec pcm_s16le: 编码器
-f s16le: 强制文件格式
-ac 2: 双声道
-ar 16000: 采样率
三、pcm转mp3
ffmpeg -y -f s16be -ac 2 -ar 16000 -acodec pcm_s16le -i 16k.pcm new_mp3.mp3
参数说明
-y: 允许覆盖
-f s16le: 强制文件格式
-ac 2: 双声道
-ar 16000: 采样率
-acodec pcm_s16le: 编码器
-i test.mp3: 源文件
四、上代码
public class Mp3ToPcm {
public static StringchangeMp3ToPcm(String sourcePath){
String webroot ="E:\\ffmpeg\\bin";
String targetPath ="E:\\pcm\\test.pcm";
Runtime run =null;
try {
run = Runtime.getRuntime();
long start=System.currentTimeMillis();
System.out.println(new File(webroot).getAbsolutePath());
//mp3转pcm
Process p=run.exec(new File(webroot).getAbsolutePath() +"/ffmpeg -y -i "+sourcePath+" -acodec pcm_s16le -f s16le -ac 2 -ar 16000 "+targetPath);
//释放进程
p.getOutputStream().close();
p.getInputStream().close();
p.getErrorStream().close();
p.waitFor();
long end=System.currentTimeMillis();
System.out.println(sourcePath+" convert success, costs:"+(end-start)+"ms");
}catch (Exception e) {
e.printStackTrace();
}finally{
//run调用lame解码器最后释放内存
run.freeMemory();
}
return null;
}
}