jave 获取音视频文件的大小、以及播放时长

时间:2021-05-19 19:46:00

首先引入jave-1.0.2.jar,

写了个demo 仅供参考

package com.readVideo.test;


public class VideoName {

private int id;
private String name;
private String time;
private String size;
private String leaf;
private String url;
private String brief;
private int VIDEO_DETAIL_ID;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getLeaf() {
return leaf;
}
public void setLeaf(String leaf) {
this.leaf = leaf;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getBrief() {
return brief;
}
public void setBrief(String brief) {
this.brief = brief;
}
public int getVIDEO_DETAIL_ID() {
return VIDEO_DETAIL_ID;
}
public void setVIDEO_DETAIL_ID(int vIDEO_DETAIL_ID) {
VIDEO_DETAIL_ID = vIDEO_DETAIL_ID;
}


}

 

package com.readVideo.test;

import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.MultimediaInfo;
import java.io.File;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

public class ReadVideoMessages {

/**
* 得到视频的大小
*
* @param f
* 文件
* @return 视频的大小
*/
public static String getFileSize(File f) {
// 保留两位小数
DecimalFormat df = new DecimalFormat(".##");
// 得到视频的长度
Long long1 = f.length();
String size = "";
long G = 1024 * 1024 * 1024;
long M = 1024 * 1024;
long K = 1024;
// 视频大小超过G、超过M不超过G、超过K不超过M
if (long1 / G >= 1) {
size = df.format((double) long1 / G) + "G";
} else if (long1 / M >= 1) {
size = df.format((double) long1 / M) + "M";
} else if (long1 / K >= 1) {
size = df.format((double) long1 / K) + "K";
} else {
size = long1 + "B";
}
// System.out.println(time);
return size;

}

/**
* 得到视频的长度
*
* @param f
* 文件
* @return 视频的长度
*/
public static String getVideoTime(File f) {
String time = "";
//新建编码器对象
Encoder encoder = new Encoder();
try {
//得到多媒体视频的信息
MultimediaInfo m = encoder.getInfo(f);
//得到毫秒级别的多媒体是视频长度
long ls = m.getDuration();
//转换为分秒
time = ls / 60000 + "分" + (ls - (ls / 60000 * 60000)) / 1000 + "秒";
} catch (Exception e) {
e.printStackTrace();
}

return time;

}

// 显示目录的方法
/**
* 得到视频所有的信息
*
* @param file
* 文件夹 or 文件
* @return 视频的信息
*/
public static List<VideoName> getAllMessage(File file) {
List<VideoName> videoNames = new ArrayList<VideoName>();
// System.out.println( file.getAbsolutePath());
String time = "";
String size = "";
// 判断传入对象是否为一个文件夹对象
if (!file.isDirectory()) {
System.out.println("你输入的不是一个文件夹,请检查路径是否有误!!");
} else {
File[] f = file.listFiles();
for (int i = 0; i < f.length; i++) {
// 判断文件列表中的对象是否为文件夹对象,如果是则执行tree递归,直到把此文件夹中所有文件输出为止
if (f[i].isDirectory()) {
System.out.println(f[i].getName() + "\tttdir");
// getAllMessage(f[i]);
} else {
time = getVideoTime(f[i]);
if (time.equals("")) {
time = "未知";
}
size = getFileSize(f[i]);
VideoName videoName = new VideoName();
int j = f[i].getName().indexOf("-", 1);
videoName.setName(f[i].getName().substring(0, j));
videoName.setSize(size);
videoName.setTime(time);
videoName.setBrief(f[i].getName().substring(j + 1,
f[i].getName().length()));
videoName.setUrl("F:/Resource/video/硬件/AltiumDesigner/"
+ f[i].getName());
videoNames.add(videoName);
System.out.println(time
+ "---"
+ size
+ "---"
+ f[i].getName().substring(0, j)
+ "---"
+ f[i].getName().substring(j + 1,
f[i].getName().length()) + "---"
+ "F:/Resource/video/硬件/AltiumDesigner/"
+ f[i].getName());
}
}
}
return videoNames;

}

public static void main(String[] args) {
File f = new File("F:\\Resource\\video\\软件\\LabView");
List<VideoName> videoMessages = getAllMessage(f);
System.out.println(videoMessages.size());
}

}