java实现ffmpeg音频文件分割

在这里插入图片描述

项目中需要将视频会议中录入的音频文件通过阿里云语音识别为文件,但是阿里云语音识别对音频大小有限制,因此通过ffmpeg将大音频文件分割为几个短音频文件,并进行语音识别操作。
代码如下:

package com.vion.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
    @author:qqq
    @creattime:2023-07-17 10:31
    通过ffmpeg实现音频文件分割操作
*/

public class FfmpegUtil {

    public static void main(String[] args) {
    	// 输入音频文件路径
        String inputFile = "J:\\test\\20210401143158-1417941587_2_video_0_0.mp3"; 
        // 输出文件前缀,用于生成分割后的多个文件名称
        String outputFilePrefix = "J:\\test\\output"; 
        // 分割的时长(秒)
        int durationInSeconds = 60*60; 
         //ffmpeg路径
        String ffmpegpath="J:\\test\\ffmpeg.exe";  
        // 构建 FFmpeg 命令
        String ffmpegCommand = String.format(ffmpegpath+" -i %s -f segment -segment_time %d -c copy %s_%%03d.mp3",inputFile, durationInSeconds, outputFilePrefix);
        try {
            // 执行命令并获取输出结果
            Process process = Runtime.getRuntime().exec(ffmpegCommand);
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            // 等待命令执行完成
            process.waitFor();
            System.out.println("音频文件分割完成。");
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

注意:必须要装ffmpeg即可
ffmpeg下载地址:

链接:https://pan.baidu.com/s/1tqPF65xKlWOE3F6x00HLxQ
提取码:ruzy

分割结果如下:
在这里插入图片描述

### 使用 JavaFFmpeg 创建静音音频文件 创建静音音频文件可以通过 FFmpeg 的 `-f lavfi` 参数以及 `anullsrc` 过滤器实现。以下是具体方法和代码示例。 #### 方法概述 FFmpeg 提供了一个虚拟音频源过滤器 `anullsrc`,可以用来生成一段没有任何声音的静音音频[^1]。通过设置参数如采样率 (`-ar`)、声道数 (`-ac`) 和持续时间 (`-t`),能够精确控制生成的静音音频特性。在 Java 中,可以通过运行外部进程的方式调用 FFmpeg 命令并传递这些参数。 #### FFmpeg 命令示例 以下是一个用于生成静音音频文件FFmpeg 命令: ```bash ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t 10 output.mp3 ``` 解释如下: - `-f lavfi`: 表明输入来自 FFmpeg 自带的过滤图 (filter graph)。 - `-i anullsrc=...`: 定义无信号的音频源,支持自定义通道布局和采样率。 - `-t 10`: 设置输出音频长度为 10 秒。 - `output.mp3`: 输出文件名及其格式。 #### Java 实现代码 下面是一段基于 ProcessBuilder 类的 Java 代码,展示如何调用上述 FFmpeg 命令: ```java import java.io.BufferedReader; import java.io.InputStreamReader; public class FFMpegSilentAudioGenerator { public static void main(String[] args) { try { String ffmpegPath = "D:\\SoftWare\\ffmpeg\\bin\\ffmpeg.exe"; // 替换为实际路径 String command = ffmpegPath + " -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t 10 silent_audio_output.mp3"; ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command("cmd.exe", "/c", command); Process process = processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); // 打印 FFmpeg 日志信息 } int exitCode = process.waitFor(); // 等待子进程完成 if (exitCode == 0) { System.out.println("静音音频文件已成功生成!"); } else { System.err.println("生成失败,请检查命令或环境配置"); } } catch (Exception e) { e.printStackTrace(); } } } ``` 说明: - 将 `ffmpegPath` 变量替换为本地 FFmpeg 可执行文件的实际路径[^2]。 - 如果操作系统为 Linux 或 macOS,则需调整命令字符串中的路径分隔符及可执行文件名称。 #### 注意事项 1. **FFmpeg 版本兼容性**: 确保使用的 FFmpeg 支持所需选项和过滤器[^1]。 2. **权限问题**: 在某些环境中可能需要管理员权限才能运行 FFmpeg。 3. **跨平台适配**: Windows 下通常使用反斜杠 `\` 分割路径;Linux/macOS 则应改为正斜杠 `/`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值