原创首发
java实现获取视频时长
想写一个文件夹里的视频的文件时长code。从网上找了好久,才找到可以run的code。 所以记录一下。
添加maven依赖
我添加的版本是2.6.0
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-all-deps</artifactId>
<version>2.6.0</version>
</dependency>
最新的可以参考: https://github.com/a-schild/jave2
java2是一个Java视频解码的库,我感觉正好是我想要的。
读取文件夹里视频文件的总时长
不废话,上code,比较简单
package com.itheima.test;
import ws.schild.jave.MultimediaInfo;
import ws.schild.jave.MultimediaObject;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.List;
public class ReadVideo {
public static void main(String[] args) {
ReadVideo r=new ReadVideo();
String url = "D:\\\\BaiduNetdiskDownload\\\\javaee\\\\07-SpringMVC\\\\01-第一天\\\\视频";
List<File> list = r.getFileList(url);
int totalLength = 0;
for(int i=0; i < list.size(); i++) {
totalLength += r.readVideoTime(list.get(i).getAbsolutePath());
}
System.out.println("总时长:"+totalLength/60 + "分钟");
// System.out.println("视频大小:"+r.readVideoSize(new File(url)));
}
public List<File> getFileList(String strPath) {
List<File> filelist = new ArrayList<File>();
File dir = new File(strPath);
File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
if (files != null) {
for (int i = 0; i < files.length; i++) {
String fileName = files[i].getName();
if (files[i].isDirectory()) { // 判断是文件还是文件夹
getFileList(files[i].getAbsolutePath()); // 获取文件绝对路径
} else if (fileName.endsWith("avi")) { // 判断文件名是否以.avi结尾
String strFileName = files[i].getAbsolutePath();
System.out.println("---" + strFileName);
filelist.add(files[i]);
} else {
continue;
}
}
}
return filelist;
}
/**
*
* @描述:获取视频时长
*
* @param
* @return
*/
int readVideoTime(String FileUrl) {
File source=new File(FileUrl);
int length = 0;
try {
MultimediaObject instance = new MultimediaObject(source);
MultimediaInfo result = instance.getInfo();
long ls = result.getDuration() / 1000;
int hour = (int) (ls / 3600);
int minute = (int) (ls % 3600) / 60;
int second = (int) (ls - hour * 3600 - minute * 60);
length = hour * 60*60 + minute*60 + second;
} catch (Exception e) {
e.printStackTrace();
}
return length;
}
/**
*
* @描述:获取视频大小
*
* @param source
* @return
*/
String readVideoSize(File source) {
FileChannel fc = null;
String size = "";
try {
FileInputStream fis = new FileInputStream(source);
fc = fis.getChannel();
BigDecimal fileSize = new BigDecimal(fc.size());
size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_UP) + "MB";
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != fc) {
try {
fc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return size;
}
}
运行的结果
D:\software\java\jdk\bin\java.exe "-
---D:\BaiduNetdiskDownload\javaee\07-SpringMVC\01-第一天\视频\01-三层架构介绍和MVC设计模型介绍.avi
---D:\BaiduNetdiskDownload\javaee\07-SpringMVC\01-第一天\视频\02-SpringMVC框架的介绍.avi
---D:\BaiduNetdiskDownload\javaee\07-SpringMVC\01-第一天\视频\03-入门程序之需求分析.avi
---D:\BaiduNetdiskDownload\javaee\07-SpringMVC\01-第一天\视频\04-入门程序之搭建开发环境.avi
---D:\BaiduNetdiskDownload\javaee\07-SpringMVC\01-第一天\视频\05-入门程序之入门代码编写.avi
---D:\BaiduNetdiskDownload\javaee\07-SpringMVC\01-第一天\视频\06-入门案例的流程总结.avi
---D:\BaiduNetdiskDownload\javaee\07-SpringMVC\01-第一天\视频\07-入门案例中使用的组件介绍.avi
---D:\BaiduNetdiskDownload\javaee\07-SpringMVC\01-第一天\视频\08-RequestMapping注解的作用.avi
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
总时长:194分钟
本文由
xujun20200616
原创发布于
阳光沙滩
,未经作者授权,禁止转载