java 获取MP4时长 | Java工具类

简介: java 获取MP4时长 | Java工具类

简述

获取mp4视频的时长,没啥好说明的。

Maven依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.mp4parser</groupId>
            <artifactId>isoparser</artifactId>
            <version>1.9.41</version>
        </dependency>

获取结果单位毫秒

上代码

import lombok.extern.slf4j.Slf4j;
import org.mp4parser.IsoFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/** @Author huyi @Date 2021/10/20 11:09 @Description: MP4工具类 */
@Slf4j
public class Mp4Utils {
  public static long readDuration(Path mp4Path) {
    if (Files.notExists(mp4Path) || !Files.isReadable(mp4Path)) {
      log.warn("文件路径不存在或不可读 {}", mp4Path);
      return 0;
    }
    try {
      IsoFile isoFile = new IsoFile(mp4Path.toFile());
      long duration = isoFile.getMovieBox().getMovieHeaderBox().getDuration();
//      long timescale = isoFile.getMovieBox().getMovieHeaderBox().getTimescale();
      return duration;
    } catch (IOException e) {
      log.error("读取MP4文件时长出错", e);
      return 0;
    }
  }
  public static void main(String[] args) {
    System.out.println(readDuration(Paths.get("C:\\Users\\huyi\\Desktop\\测试.mp4")));
  }
}

执行结果:

image.png

 

验证结果:

执行结果:

 

验证结果:

获取结果单位秒

上代码

import lombok.extern.slf4j.Slf4j;
import org.mp4parser.IsoFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/** @Author huyi @Date 2021/10/20 11:09 @Description: MP4工具类 */
@Slf4j
public class Mp4Utils {
  public static long readDuration(Path mp4Path) {
    if (Files.notExists(mp4Path) || !Files.isReadable(mp4Path)) {
      log.warn("文件路径不存在或不可读 {}", mp4Path);
      return 0;
    }
    try {
      IsoFile isoFile = new IsoFile(mp4Path.toFile());
      long duration = isoFile.getMovieBox().getMovieHeaderBox().getDuration();
      long timescale = isoFile.getMovieBox().getMovieHeaderBox().getTimescale();
      return duration / timescale;
    } catch (IOException e) {
      log.error("读取MP4文件时长出错", e);
      return 0;
    }
  }
  public static void main(String[] args) {
    System.out.println(readDuration(Paths.get("C:\\Users\\huyi\\Desktop\\测试.mp4")));
  }
}


执行结果:

image.png

总结

没啥好总结的,今天南京好冷。

如果本文对你有帮助,请点个赞支持一下吧。

相关文章
|
8月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
275 0
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
819 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
Java
Java 些许公共工具类
Java 些许公共工具类
86 1
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
214 8
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
454 0
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
98 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
设计模式 缓存 安全
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
110 0
|
设计模式 存储 缓存
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
227 0
|
设计模式 并行计算 安全
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
216 0
|
设计模式 安全 NoSQL
Java面试题:结合单例模式与Java内存管理,设计一个线程安全的单例类?分析Java多线程工具类ExecutorService与Java并发工具包中的工具类,设计一个Java并发框架的分布式锁实现
Java面试题:结合单例模式与Java内存管理,设计一个线程安全的单例类?分析Java多线程工具类ExecutorService与Java并发工具包中的工具类,设计一个Java并发框架的分布式锁实现
197 0