Java通过调用FFMPEG获取视频时长

 更新时间:2019年04月21日 10:55:39   作者:iteye_6674  
这篇文章主要为大家详细介绍了Java通过调用FFMPEG获取视频时长,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。

由此看来FFmpeg很强大,很多主流的音频、视频处理软件都使用了FFmpeg。

FFmpeg下载下来解压,cmd进入到FFmpeg.exe目录中,即可在命令行下进行各种操作,查看视频信息命令:ffmpeg 视频 -i,如下图:

D:\ffmpeg\Libs>ffmpeg -i D:\MonitorRecord\monitor_20091222_050948_1.avi

FFmpeg version SVN-r10087, Copyright (c) 2000-2007 Fabrice Bellard, et al.
 configuration: --prefix=f:/svn_build_bins --enable-memalign-hack --enable-shared --disable-static --enable-w32threads --enable-liba52 --enable-avisynth --enable-libamr-nb --enable-libamr-wb --enable-libfaac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libogg --enable-libtheora --enable-libvorbis --enable-libx264 --enable-gpl --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib
 libavutil version: 49.5.0
 libavcodec version: 51.40.4
 libavformat version: 51.12.2
 built on Aug 12 2007 11:38:35, gcc: 4.2.1
 
 Compiled by msn: dev # fastreaming.com, 2007/08/12
 Enjoy it
 
Input #0, avi, from 'D:\MonitorRecord\monitor_20091222_050948_1.avi':
 Duration: 00:00:25.0, start: 0.000000, bitrate: 619 kb/s
 Stream #0.0: Video: mpeg4, yuv420p, 1620x1100, 1.14 fps(r)
Must supply at least one output file

在Java中执行此操作,解析返回结果,可以得到视频时长等信息。

/**
 * 获取视频总时间
 * @param viedo_path 视频路径
 * @param ffmpeg_path ffmpeg路径
 * @return
 */
 public static int getVideoTime(String video_path, String ffmpeg_path) {
 List<String> commands = new java.util.ArrayList<String>();
 commands.add(ffmpeg_path);
 commands.add("-i");
 commands.add(video_path);
 try {
 ProcessBuilder builder = new ProcessBuilder();
 builder.command(commands);
 final Process p = builder.start();
 
 //从输入流中读取视频信息
 BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
 StringBuffer sb = new StringBuffer();
 String line = "";
 while ((line = br.readLine()) != null) {
 sb.append(line);
 }
 br.close();
 
 //从视频信息中解析时长
 String regexDuration = "Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
 Pattern pattern = Pattern.compile(regexDuration);
 Matcher m = pattern.matcher(sb.toString());
 if (m.find()) {
 int time = getTimelen(m.group(1));
 log.info(video_path+",视频时长:"+time+", 开始时间:"+m.group(2)+",比特率:"+m.group(3)+"kb/s");
 return time;
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 
 return 0;
 }
 
 //格式:"00:00:10.68"
 private static int getTimelen(String timelen){
 int min=0;
 String strs[] = timelen.split(":");
 if (strs[0].compareTo("0") > 0) {
 min+=Integer.valueOf(strs[0])*60*60;//秒
 }
 if(strs[1].compareTo("0")>0){
 min+=Integer.valueOf(strs[1])*60;
 }
 if(strs[2].compareTo("0")>0){
 min+=Math.round(Float.valueOf(strs[2]));
 }
 return min;
}

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot与rabbitmq的结合的示例

    SpringBoot与rabbitmq的结合的示例

    这篇文章主要介绍了SpringBoot与rabbitmq的结合的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 详解Spring Boot中使用AOP统一处理Web请求日志

    详解Spring Boot中使用AOP统一处理Web请求日志

    本篇文章主要介绍了详解Spring Boot中使用AOP统一处理Web请求日志,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 简单了解Spring循环依赖解决过程

    简单了解Spring循环依赖解决过程

    这篇文章主要介绍了简单了解Spring循环依赖解决过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Apache POI将PPT转换成图片实例代码

    Apache POI将PPT转换成图片实例代码

    这篇文章主要介绍了Apache POI将PPT转换成图片实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • SpringCloud基于RestTemplate微服务项目案例解析

    SpringCloud基于RestTemplate微服务项目案例解析

    这篇文章主要介绍了SpringCloud基于RestTemplate微服务项目案例,在写SpringCloud搭建微服务之前,先搭建一个不通过springcloud只通过SpringBoot和Mybatis进行模块之间通讯,通过一个案例给大家详细说明,需要的朋友可以参考下
    2022-05-05
  • java中读写Properties属性文件公用方法详解

    java中读写Properties属性文件公用方法详解

    在项目开发中我们会将很多环境特定的变量定义到一个配置文件中,比如properties文件,把数据库的用户名和密码存放到此属性文件中。下面这篇文章就主要介绍了java中读写Properties属性文件公用方法,需要的朋友可以参考借鉴。
    2017-01-01
  • 一行命令同时修改maven项目中多个module的版本号的方法

    一行命令同时修改maven项目中多个module的版本号的方法

    这篇文章主要介绍了一行命令同时修改maven项目中多个module的版本号的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Java 中的 File类详情

    Java 中的 File类详情

    这篇文章主要介绍了Java 中的 File类,对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已,下面我们来看看文章对File类的详情介绍吧,需要的朋友也可以参考一下
    2021-11-11
  • 基于spring三方包类注入容器的四种方式小结

    基于spring三方包类注入容器的四种方式小结

    这篇文章主要介绍了基于spring三方包类注入容器的四种方式小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Springboot项目Mybatis升级为Mybatis-Plus的详细步骤

    Springboot项目Mybatis升级为Mybatis-Plus的详细步骤

    在许多 Java 项目中,MyBatis 是一个广泛使用的 ORM 框架,然而,随着 MyBatis-Plus 的出现,许多开发者开始迁移到这个更加简洁、高效的工具,它在 MyBatis 的基础上提供了更多的功能,所以本文将介绍Springboot项目Mybatis升级为Mybatis-Plus的详细步骤
    2025-03-03

最新评论