統計視訊時長
阿新 • • 發佈:2018-12-07
視訊時長統計
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</ modelVersion>
<groupId>org.zln</groupId>
<artifactId>java-video</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/xuggle/xuggle-xuggler -->
<dependency>
< groupId>xuggle</groupId>
<artifactId>xuggle-xuggler</artifactId>
<version>5.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId >
<version>1.16.18</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<!-- 配置外掛 -->
<plugins>
<!-- 資原始檔拷貝外掛 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java編譯外掛 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
CountVideoTime
package org.zln.java.video;
import com.xuggle.xuggler.IContainer;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.LinkedList;
import java.util.List;
/**
* @Author 張柳寧
* @Description
* @Date Create in 2018/4/3
* @Modified By:
*/
public class CountVideoTime {
public static void main(String[] args) throws IOException {
MyFileVisitor visitor = new MyFileVisitor();
Files.walkFileTree(Paths.get("/Users/zhangliuning/Documents/01-SpringSecurity"), visitor);
List<String> videoFiles = visitor.getList();
long sum = 0;
for (String path : videoFiles) {
sum += getVedioInfo(path);
}
int hours = (int) (sum / 3600);
int minutes = (int) ((sum - 3600 * hours) / 60);
int seconds = (int) (sum - 3600 * hours - 60 * minutes);
System.out.println("累計時長:" + hours + ":" + minutes + ":" + seconds);
}
public static long getVedioInfo(String filename) {
// first we create a Xuggler container object
IContainer container = IContainer.make();
// we attempt to open up the container
int result = container.open(filename, IContainer.Type.READ, null);
// check if the operation was successful
if (result < 0) {
return 0;
}
// query how many streams the call to open found
int numStreams = container.getNumStreams();
// query for the total duration
long duration = container.getDuration();
// query for the file size
long fileSize = container.getFileSize();
long secondDuration = duration / 1000000;
//秒
return secondDuration;
}
}
class MyFileVisitor extends SimpleFileVisitor<Path> {
private List<String> list_file = new LinkedList<>();
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exec)
throws IOException {
// 訪問資料夾之前呼叫
//System.out.println("Just visited " + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
throws IOException {
// 訪問資料夾之後呼叫
//System.out.println("About to visit " + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
// 訪問檔案後呼叫
if (attrs.isRegularFile()) {
String fileName = file.toString();
if (fileName.endsWith(".mp4")) {
list_file.add(file.toString()); //插入一個List<String>有別的用。
}
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc)
throws IOException {
// 檔案不可訪問時呼叫
//System.out.println(exc.getMessage());
return FileVisitResult.CONTINUE;
}
public List<String> getList() {
return list_file;
}
}