java进行音视频的拆分和拼接
一、下载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();
}
}
}
原文地址:https://blog.csdn.net/ffyyhh995511/article/details/140148046
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!