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();

}

}

}

相关推荐
FQNmxDG4S5 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
虹科网络安全6 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje6 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv77 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫7 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287927 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本7 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
yaoxin5211237 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
极客先躯9 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户60648767188969 小时前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java