Java视频剪切-根据时间剪切视频操作

懒驴 2023年02月21日 1,608次浏览
  • 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、剪切的时间不要超过视频时长


java实现视频剪切