近期在进行本地影视资源库归整时发现,很多重名资源需要甄别取舍,于是想通过Java实现遍历并提取媒体信息,进行比对,这是最简单的实现方式,效率较高。针对仅提取基本信息之需较为合适。
1.效果图:
2.核心代码
@SuppressWarnings("unused")
/****
* @author Liangxin
* @created 2020-08-23 23:43
* @param videoFilename
* @param thumbFilename
* @param thumbCount
* @throws IOException
* @throws InterruptedException
*/
public void getThumbs(String videoPath, String thumbFilename, int thumbCount) throws IOException, InterruptedException {
HashMap<String,Long> size = GetVideoInfo.videoSize(videoPath);
Long width = size.get("width");
Long height = size.get("height");
Long duration = size.get("duration");
List<Long> times = LxTimeUtil.getTimes(thumbCount, duration);
for (int i = 0; i < thumbCount; i++) {
String time = LxTimeUtil.msecToTime(times.get(i));
StringBuilder sb = new StringBuilder(thumbFilename);
String filename = sb.insert(thumbFilename.lastIndexOf("."), "_"+String.valueOf(i+1)).toString();
ProcessBuilder processBuilder = new ProcessBuilder(ffmpegApp, "-ss",time,"-i", videoPath, "-z", "-vframes", "1", "f", "mjpeg", "-S", width + "*" + height,
"-an", filename);
Process process = processBuilder.start();
InputStream stderr = process.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) == null)
}
}
提取更多信息请看下一篇《【媒体信息提取】利用FFmpeg获取媒体(视频)文件详细信息》