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