参考大佬的博客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; } }