视频时长统计
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>
<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>
<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;
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) {
IContainer container = IContainer.make();
int result = container.open(filename, IContainer.Type.READ, null);
if (result < 0) {
return 0;
}
int numStreams = container.getNumStreams();
long duration = container.getDuration();
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 {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
throws IOException {
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());
}
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc)
throws IOException {
return FileVisitResult.CONTINUE;
}
public List<String> getList() {
return list_file;
}
}