java ffmpeg 获取视频时长_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 commands = new java.util.ArrayList();

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;

}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盘点15个搞笑的程序员段子

1.车Delphi象吉普车,什么路上都能开,却在啥路上也开不好;PB就象卡丁车,只能在固定线路上开,到室外就有些不稳;VC象跑车,你开得起却买不 起,而且一旦发生故障,想修都找不到…

判断listview是上滑还是下滑的方法

方法一: 用setOnScrollListener(new AbsListView.OnScrollListener())来实现,判断滑动后显示的第一个条目 ,与滑动前的第一个条目的大小来判断, 这种方法逻辑简单,但是必须要滑动到当前第一条目隐藏后才能起…

如何保证消息不被重复消费~~~~~(如何保证消息队列的幂等性)

分析:这个问题其实换一种问法就是,如何保证消息队列的幂等性?这个问题可以认为是消息队列领域的基本问题。换句话来说,是在考察你的设计能力,这个问题的回答可以根据具体的业务场景来答,没有固定的答案。 回…

SpringBoot:搭建第一个Web程序

本文简单介绍一下spingBoot搭建web程序的流程,希望对入门学习spingBoot的朋友有所帮助。本文采用的开发工具是IDEA。 1、打开IDEA,创建项目。 2、点击创建项目,进入下一步,具体按照画红框的操作。 3、点击下一步 4、点击下一步&am…

java uuid 效率_java uuid第一次性能

在java中产生uuid的方式是使用java.util.UUID。UUID.randomUUID().toString();我在测试redis性能时,使用uuid产生测试数据,发现多线程测试redis的rpush接口的时候,性能老是上不去。 查看cpu利用率也不高,网卡流量也不大。就是tps上…

第八周----补

这一周真不知道过得是什么,除了上课,感觉相当的混乱。 整个人每天都是处在消沉状态,连这次作业都没能很好的补上。 我的心情也像天气一样变得不稳定,一会晴天一会雨天的,更多的就是闷闷的感觉。 总会说事情很多忙的头晕…

SpringBoot:application.properties基本的参数配置

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

java method 注释_Java注解

Java注解注解概述3、注解3.1、注解,或者叫做注释类型,英文单词是:Annotation疑问:注解到底是干啥的?????????3.2、注解Ann…

盘点八个程序员必备的代码编辑器

一个好的代码编辑器不仅能使代码变得更美观,增强其可读性,同时也能迅速推进程序员的工作进程,延长代码的生命周期。 对于新手和有经验的程序员,推荐使用的代码编辑器也均有不同。小楼总结了一些好用的代码编辑器,还在纠…

C#OOP之二 变量和表达式

2.1 C#的基本语法 C#代码的外观和操作方式与C和Java非常相似。初看起来,其语法比较混乱, 不像书面英语和其他语言。但是,在C#编程中,使用的样式是比较清晰的,不用花太多的力气就可以编写出可读性很强的代码。 与其他语…

java异步多线程 判断线程状态_java多线程和异步回调

在实际开发过程中遇到的多线程情况不多,但是在生产环境中多线程是最基本的情况,java面试时也会考到,所以看看多线程的知识还是很有必要的。Thread,Runnable,Callable,Future,FutureTask,Executo…

C#调用API弹出打印机属性对话框

调用api弹出打印机属性对话框 Author:vitoriatangFrom:Internet.NET Framework封装了很多关于打印的对话框,比如说PrintDialog, PageSetupDialog. 但是有的时候我们还需要关心打印机属性对话框,那么就可以调用API来解决这个问题。有几个API函数与之相关P…

Java中异常

首先我们要知道RuntimeException与Exception之间的关系与他们分别的含义: ①在Java中异常的基类为Throwable,他有两个子类Exception与Errors,同时RuntimeException就是Exception的子类; ②RuntimeException,即运行时异…

第九周作业

你最喜欢做什么--兴趣问题清单•根据迄今为止已有的经历,你真正喜欢从事的工作是什么?动漫设计师或者网页设计师•休暇时间你最爱从事的活动是什么?看动漫•什么令你精疲力尽?什么能激发你的活力?看动漫•你是重视质量…

SQLServer数据库获取重复记录中日期最新的记录

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

循环的时候去删除集合中的元素 java.util.ConcurrentModificationException

使用for循环,删除集合中的元素,会报错 java.util.ConcurrentModificationException 只能通过迭代器 iterator删除 1:在while循环中使用iterator迭代器删除集合中元素 2:在for循环中使用iterator迭代器删除集合中元素 3:使用for循…

jquery ajax load

jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法。 load() 方法从服务器加载数据,并把返回的数据放入被选元素中。 语法: $(selector).load(URL,data,callback); $("button").click(function(){$("#div1").load(&qu…

计算机网络硬件设备组成笔记

网络是计算机或类似计算机的网络设备的集合,它们之间通过各种传输介质进行连接。无论设备之间如何连接,网络都是将来自于其中一台网络设备上的数据,通过传输介质传输到另外一台网络设备上。 本节将基于这个过程讲解网络的组成。 网卡 网卡也被…