-
Java实现视频剪切
在java后台项目开发中,又遇到需要对视频进行操作的功能,这里主要介绍在java中,按照时间维度来对视频进行剪切操作,Java视频操作工具类。
-
1.Maven依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.0.12</version>
</dependency>
-
2.代码实现
VideoMontageUtils.java 工具类实现
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.web.system.config.tools.UuidGenerate;
import org.bytedeco.javacpp.Loader;
import java.io.File;
import java.util.Arrays;
import java.util.List;
/**
* 视频剪切工具类
**/
public class VideoMontageUtils {
/**
* 剪切视频
*
* @param inputVideoPath 输入视频地址
* @param outputDir 输出目录
* @param startTime 起始时间,格式:00:00:01、00:10:08
* @param duration 持续时间,单位为:秒
* @return 图片地址
* @throws Exception 异常
*/
public static String cut(
String inputVideoPath, String outputDir, String startTime, Integer duration)
throws Exception {
List<String> paths = Splitter.on(".").splitToList(inputVideoPath);
String ext = paths.get(paths.size() - 1);
if (!Arrays.asList("mp4", "flv").contains(ext)) {
throw new Exception("format error");
}
String resultPath =
Joiner.on(File.separator).join(Arrays.asList(outputDir, UuidGenerate.getUUID() + "." + ext));
String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
ProcessBuilder builder =
new ProcessBuilder(
ffmpeg,
"-ss",
startTime,
"-i",
inputVideoPath,
"-t",
String.valueOf(duration),
"-c:v",
"copy",
"-c:a",
"copy",
"-y",
resultPath);
builder.inheritIO().start().waitFor();
return resultPath;
}
public static void main(String[] args) throws Exception {
System.out.println(
cut(
"D:\\data\\video\\video_activity\\2023-02-17\\14439b73f3de4a95a96c1ddf34a957b4_1.mp4",
"D:\\data\\video\\video_activity\\2023-02-17\\",
"00:00:30",
15));
}
}
-
3.写在最后
1、方法参数分别为输入视频路径、输出临时目录、剪切起始点、剪切持续时间(单位秒)。
2、起始时间的格式要注意,给了几个格式样式:00:03:01、00:10:11,格式是:小时:分钟:秒。
3、对文件后缀格式做了校验,可以按照需求自行调整。
4、剪切的时间不要超过视频时长