需要对mp3文件进行剪辑,剪掉几秒到几秒,然后生成新的文件。
目前有两种方法,
方法一、是用脚本+安装FFmpeg执行包,
方法二、不需要安装FFmpeg,直接调用ffmpeg包解码。
本文介绍的为方法二,不需要下载安装FFmpeg.
1、maven需要添加2个依赖
javacv 和ffmpeg-platform都是org.bytedeco,这两个版本要匹配
org.bytedecojavacv1.5.6org.bytedecoffmpeg-platform4.4-1.5.6
2、写个测试类
public class Mp3Cutter {public static void main(String[] args) {// 输入音频文件和输出音频文件路径String inputFile = "F:\\temp\\欢乐谷.mp3";String outputFile = "F:\\temp\\mp3_out.mp3";cutAudio(inputFile, outputFile);}public static void cutAudio(String inputFile, String outputFile) {try {// 创建 FFmpegFrameGrabber 以读取输入音频文件FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);int bitrate=grabber.getAudioBitrate();int sampleRate=grabber.getSampleRate();// 创建 FFmpegFrameRecorder 以写入输出音频文件FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 2);recorder.setAudioCodec(grabber.getAudioCodec());recorder.setAudioQuality(0);recorder.setAudioBitrate(64000);//比特,中等效果recorder.setAudioChannels(2);//grabber.getAudioChannels());recorder.setSampleRate(44100);//grabber.getSampleRate());recorder.setAudioOption("crf", "0");recorder.start();grabber.start();//这个顺序要在后面Frame f;int total=0;//计算音频样本帧的数量while((f=grabber.grabSamples())!=null){total++;}//设置要剪辑掉的 18秒--30秒long startSec=18;long endSec=startSec+12; //计算时长long durationInSec = grabber.getFormatContext().duration() / 1000000; //设置要剪辑掉的 倒数50秒--60秒long startSec2=durationInSec-50;if(durationInSec startFrameNum&&i startFrameNum2&&i= durationInSecond)return (int) durationInSecond;double percent = startOrEndAtSecond / (double) durationInSecond;return (int) Math.round(totalFrame * percent);}}
运行测试。上面的代码可以直接跑。