1. 程式人生 > >統計視訊時長

統計視訊時長

視訊時長統計

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;
    }

}