Java根据视频的URL地址,获取视频时长

参考大佬的博客https://www.cnblogs.com/yoyoyu/p/14255264.html,可以不用下载视频而获取视频时长。

第一步:先引入Maven依赖

<dependencies>
   <!-- jave核心包 -->
    <dependency>
        <groupId>ws.schild</groupId>
        <artifactId>jave-core</artifactId>
        <version>2.4.6</version>
    </dependency>
    <!-- window64位 ffmpeg -->
    <dependency>
        <groupId>ws.schild</groupId>
        <artifactId>jave-native-win64</artifactId>
        <version>2.4.6</version>
    </dependency>
    <!-- linux64位 ffmpeg -->
    <dependency>
        <groupId>ws.schild</groupId>
        <artifactId>jave-native-linux64</artifactId>
        <version>2.4.6</version>
    </dependency>

</dependencies>

第二步:在业务层main.java下新建包ws.schild.jave(目的是和jave的jar包路径一致,这样就可以使用jar包中非public类,方便改造。)

第三步:复制jave中的MultimediaObject类在新建的包中重名名为FfmpegFileInfo,需要修改三个地方

1.注释掉88行变量Macher m;

2.注释掉126行的String token;

 3.修改getInfo()方法为

public MultimediaInfo getInfo(String url) throws InputFormatException, EncoderException {
        FFMPEGExecutor ffmpeg = this.locator.createExecutor();
        ffmpeg.addArgument("-i");
        ffmpeg.addArgument(url);
        try {
            ffmpeg.execute();
        } catch (IOException var8) {
            throw new EncoderException(var8);
        }

        MultimediaInfo var3;
        try {
            RBufferedReader reader = new RBufferedReader(new InputStreamReader(ffmpeg.getErrorStream()));
            var3 = this.parseMultimediaInfo(this.inputFile, reader);
        } finally {
            ffmpeg.destroy();
        }
        return var3;

}

第四步:使用

/**
     * 获取URL地址获取视频文件长度
     *
     * @param filePath 文件路径
     * @return 视频长度(单位:秒)
     */
    private long getURLVideoSecond(String filePath) {
        File file = new File(filePath);
        try {
            FfmpegFileInfo ffmpegFileInfo = new FfmpegFileInfo(file);
            ws.schild.jave.MultimediaInfo info = ffmpegFileInfo.getInfo(filePath);
            return info.getDuration() / 1000;
        } catch (Exception e) {
            log.error("获取URL视频文件时长失败", e);
            return 0;
        }
    }
原文地址:https://www.cnblogs.com/zou-rong/p/14380994.html