背景:如何使用Java批量切割视频
FFmpeg 是一个强大的开源多媒体处理工具,被广泛应用于音视频的录制、转码、编辑等方面。它支持几乎所有主流的音视频格式,能够在各种操作系统平台上运行,包括 Windows、macOS 和 Linux。FFmpeg 提供了丰富的命令行工具,可以完成诸如剪辑、合并、分割、转换格式、添加水印等各种多媒体处理任务。
通过构建FFmpeg命令字符串数组,指定输入视频文件、输出文件格式、分段时长等参数,并利用Java的ProcessBuilder类创建子进程来执行FFmpeg命令。
static String ffmpegPath = "D:\\software\\ffmpeg\\bin\\ffmpeg.exe"; // FFmpeg可执行文件的路径
static String inputVideo = "D:\\mk\\3.mp4";
static String outputVideo = "D:\\mk\\output3.mp4";
static String newBackgroundMusic = "F:\\制作\\背景音乐1\\背景音乐1.MP3";
// 构建分割视频的FFmpeg命令
String[] splitCmd = {
ffmpegPath,
"-i", inputVideo, // 输入视频文件
"-c", "copy", // 复制视频流和音频流
"-f", "segment", // 指定分段输出格式
"-segment_time", "60", // 指定分段时长为60秒
"-reset_timestamps", "1", // 重置时间戳
"-map", "0", // 映射原始视频和音频流
"-y", // 覆盖输出文件(如果存在)
"D:\\mk\\output_segment_%03d.mp4" // 输出文件名格式,%03d表示三位数字序号
};
try {
// 执行分割视频的FFmpeg命令
Process splitProcess = new ProcessBuilder(splitCmd).inheritIO().start();
splitProcess.waitFor();
System.out.println("视频分割完成!");
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
String[] splitCmd = { ... }
: 这里定义了一个字符串数组 splitCmd
,用于存储 FFmpeg 命令及其参数。这些参数包括:
-
ffmpegPath
: FFmpeg 可执行文件的路径。 -
-i
,inputVideo
: 输入视频文件的路径。 -
-c
,copy
: 指定编解码器,这里是复制视频和音频流而不进行重新编码。 -
-f
,segment
: 指定输出格式为分段格式。 -
-segment_time
,60
: 指定每个分段的时长为 60 秒。 -
-reset_timestamps
,1
: 重置时间戳以确保每个分段的时间从零开始。 -
-map
,0
: 映射输入的视频和音频流。 -
-y
: 覆盖输出文件(如果存在)而不提示用户确认。 - 输出文件名格式为
"D:\\mk\\output_segment_%03d.mkv"
,其中%03d
表示三位数字序号,用于给分段文件命名。