一、下载ffmpeg并安装
官网地址https://ffmpeg.org/download.html
载后解压缩如下
 D:\google-download\ffmpeg-2024-01-28-git-e0da916b8f-essentials_build\bin>ls
 ffmpeg.exe  ffplay.exe  ffprobe.exe
 展示三个exe可执行文件
配置环境变量
配置后直接在cmd输入ffmpeg -version 验证是否配置成功

二、引入依赖包
 <dependency>
     <groupId>net.bramp.ffmpeg</groupId>
     <artifactId>ffmpeg</artifactId>
     <version>0.8.0</version>
 </dependency>
三、进行音频文件拆分
 import net.bramp.ffmpeg.FFmpeg;
 import net.bramp.ffmpeg.FFmpegExecutor;
 import net.bramp.ffmpeg.FFprobe;
 import net.bramp.ffmpeg.builder.FFmpegBuilder;
 import net.bramp.ffmpeg.probe.FFmpegProbeResult;
import java.io.IOException;
 import java.util.concurrent.TimeUnit;
public class FFmpegAudioSplitter {
    public static void main(String[] args) {
         try {
             // 初始化FFmpeg和FFprobe
             FFmpeg ffmpeg = new FFmpeg();
             FFprobe ffprobe = new FFprobe();
            // 读取输入文件信息
             FFmpegProbeResult input = ffprobe.probe("D:\\destop\\jay.mp3");
            // 设定拆分的每段时长(以秒为单位)
             int segmentDuration = 60; // 每段时长为60秒
             double totalDuration = input.getFormat().duration; // 输入文件总时长
            // 构建FFmpeg命令以拆分音频文件
             for (int i = 0; i < Math.ceil(totalDuration / segmentDuration); i++) {
                 FFmpegBuilder builder = new FFmpegBuilder()
                         .setInput("D:\\destop\\jay.mp3") // 输入文件
                         .addOutput(String.format("D:\\destop\\jayoutput_part_%d.mp3", i + 1)) // 输出文件
                         .setStartOffset(i * segmentDuration, TimeUnit.SECONDS) // 设置开始时间
                         .setDuration(segmentDuration, TimeUnit.SECONDS) // 设置持续时间
                         .addExtraArgs("-c", "copy") // 不重新编码,直接复制
                         .done();
                // 执行命令
                 FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
                 executor.createJob(builder).run();
             }
            System.out.println("音频文件拆分成功。");
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
 }
四、进行多音频文件合并
 import net.bramp.ffmpeg.FFmpeg;
 import net.bramp.ffmpeg.FFmpegExecutor;
 import net.bramp.ffmpeg.FFprobe;
 import net.bramp.ffmpeg.builder.FFmpegBuilder;
import java.util.ArrayList;
 import java.util.List;
 public class FFmpegMergeExample {
    public static void main(String[] args) {
         try {
             // 初始化FFmpeg和FFprobe
             // 这里配置了环境变量,可以不设置构建方法参数
             // FFmpeg ffmpeg = new FFmpeg(C:/path/to/ffmpeg);
             // FFprobe ffprobe = new FFprobe("C:/path/to/ffprobe");
             FFmpeg ffmpeg = new FFmpeg();
             FFprobe ffprobe = new FFprobe();
            List<String> list = new ArrayList();
             list.add("D:\\destop\\input1.mp3");
             list.add("D:\\destop\\test.wav");
             list.add("D:\\destop\\input1.mp3");
            // 构建FFmpeg命令
             FFmpegBuilder builder = new FFmpegBuilder()
                     .setVerbosity(FFmpegBuilder.Verbosity.ERROR) // 设置日志级别为error
                     .overrideOutputFiles(true) // 自动覆盖输出文件
                     .addOutput("D:\\destop\\202020.mp3")
                     .addExtraArgs("-map", "[out]") // 映射输出流
                     .done();
            // 拼接格式 [0:0][1:0][2:0]
             StringBuffer sb = new StringBuffer();
             for (int i = 0; i < list.size(); i++) {
                 builder.addInput(list.get(i));
                 sb.append("[" + i + ":0]");
             }
             // 使用复杂过滤器合并音频流
             builder.addExtraArgs("-filter_complex", sb.toString() + "concat=n=" + list.size() + ":v=0:a=1[out]");
            // 执行命令
             FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
             executor.createJob(builder).run();
            System.out.println("音频文件合并成功。");
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 }



















