FFMpeg video duration
1. 代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; public class FFMPEGDurationer {
private static final String infoPath = "c:\\MediaInfo\\"; public static String inform(String fileName) {
fileName = fileName.replaceAll("/", "\\\\");
String cmd = infoPath + "ffmpeg -i " + fileName;
try {
Process proc = Runtime.getRuntime().exec(cmd);
InputStream out = proc.getErrorStream();
BufferedReader in = new BufferedReader(new InputStreamReader(out));
String line = "";
StringBuffer sb = new StringBuffer();
if(in.readLine()!= null){
while((line=in.readLine()) != null){
if(line.equals("")||line.indexOf("Duration:")==-1)
continue; sb.append(line.trim());
}
} return sb.toString();
} catch (IOException e) {
e.printStackTrace();
return "";
} } public static long getDuration(String fileName){
String info = inform(fileName);
String str = select(info);
return parseLong(str);
} private static String select(String info){
String[] infos = info.split(",");
if(infos.length==0)
return ""; for(int i=0;i<infos.length;i++){
String str = infos[i].trim();
if(str.indexOf("Duration")!=-1){
String dur = str.substring(str.indexOf(":")+2);
return dur;
}
} return "";
} /**
*duration String eg. 8s 160ms / 1h 37mn;
*/
public static long parseLong(String duration){
if(duration==null||duration.equals(""))
return 0;
if("N/A".equals(duration))
return 0; int ms = 0;
int p = duration.lastIndexOf(".");
if(p!=-1){
String tmp = duration.substring(p+1);
tmp = "0." + tmp;
ms = (int)(Float.parseFloat(tmp)*1000);
}
int fr = ms*25/1000;
String frstr = String.format("%02d", fr);
try {
String _dur = duration.substring(0,p) + ":" + frstr;
return Long.parseLong(_dur);
} catch (Exception e) {
return 0;
} } public static void main(String[] args) {
long str = FFMPEGDurationer.getDuration("d:\\a.wmv");
// long str = FFMPEGDurationer.getDuration("x:\\av\\555_MPEG.m2t");
System.out.println(str);
} }
2. 软件安装 FFmpeg 路径(c:/MediaInfo)
FFMpeg video duration的更多相关文章
- ffmpeg.c简单的结构功能分析(平局)
当转码的研究看前一阵子FFmpeg资源. 因为ffmpeg.c与此相反的较长的代码.而有相当一部分人AVFilter相关代码(这部分已经不太熟悉),所以学习之前FFmpeg时间,还没有好好看看它的源代 ...
- ffmpeg最全的命令参数
Hyper fast Audio and Video encoderusage: ffmpeg [options] [[infile options] -i infile]... {[outfile ...
- ffmpeg.c函数结构简单分析(画图)
前一阵子研究转码的时候看了FFmpeg的源代码.由于ffmpeg.c的代码相对比较长,而且其中有相当一部分是AVFilter有关的代码(这一部分一直不太熟),因此之前学习FFmpeg的时候一直也没有好 ...
- FFmpeg工具使用总结
. 一. FFmpeg是什么? 简单说,FFmpeg就是一个很好的,免费的,开源的视频转换工具.详细说,FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依 ...
- iOS: FFmpeg的使用一
现状:现在视频直播非常的火,所以在视频直播开发中,使用的对视频进行遍解码的框架显得尤为重要了,其实,这种框架蛮多的,这次主要介绍一下FFmpeg视频播放器的集成和使用,FFmpeg是视频编解码的利器. ...
- ffmpeg full help
Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile ...
- FFMPEG学习----打印视频信息
FFMPEG学习资料少之又少,在此推荐雷神的博客: http://blog.csdn.net/leixiaohua1020 在这里,我们把打印视频里的相关信息作为学习FFMPEG的 Hello Wor ...
- 移动端HTML5<video>视频播放优化实践
遇到的挑战 移动端HTML5使用原生<video>标签播放视频,要做到两个基本原则,速度快和体验佳,先来分析一下这两个问题. 下载速度 以一个8s短视频为例,wifi环境下提供的高清视频达 ...
- 移动端HTML5<video>视频播放优化实践[转]
http://blog.csdn.net/u010918416/article/details/52705732 http://www.xuanfengge.com/html5-video-play. ...
随机推荐
- TODO:MongoDB MySQL数据库备份
TODO:MongoDB MySQL数据库备份 1. MongoDB使用命令备份 mongodump进行整个数据库备份,主要用到的命令参数: -d 要备份的数据库 -o 输出的路径 ./mongodu ...
- Html5 设置菱形链接菜单
本例是采用html5+css3.0设置的菜单链接.其中主要用到了以下几个方面: 1. CSS3.0中的2D变换,如:旋转transform:rotate(45deg);移动,放大transform:r ...
- javascript命名规范
javascript命名规范 3.命名 命名的方法通常有以下几类: a).命名法说明 1).camel命名法,形如thisIsAnApple 2).pascal命名法,形如ThisIsAnApple ...
- JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package Test03; ...
- 浅析z-index(覆盖顺序)和定位
多次在项目中遇到html页面元素的非期待重叠错误,多数还是position定位情况下z-index的问题.其实每次解决类似问题思路大致都是一样的,说到底还是对z-index的理解比较模糊,可以解决问题 ...
- Jquery中的(function($){...})(jQuery)
当你第一眼看到“(function($){...})(jQuery)”的时候,你有什么感觉?呵呵呵,我当时还是止不住的从心底里骂了一句——操,这他妈什么劳什子.时过境迁,对于现在无比倚重Jquery的 ...
- 传智播客--数据绑定--INotifyPropertyChanged(小白内容)
INotifyPropertyChanged一般在数据绑定的时候使用. InotifyPropertyChanged是.net内置的接口,数据绑定时会检测DataContext是否实现了Inotify ...
- 创建第二个 vlan network "vlan101" - 每天5分钟玩转 OpenStack(96)
前面我们创建了 vlan100,并部署了 instance,今天将继续创建第二个 vlan network "vlan101". subnet IP 地址为 172.16.101. ...
- C++中的内存管理
在C++中也是少不了对内存的管理,在C++中只要有new的地方,在写代码的时候都要想着delete. new分配的时堆内存,在函数结束的时候不会自动释放,如果不delete我分配的堆内存,则会造成内存 ...
- 行程编码(atoi函数)
#include<iostream> #include<string> #include<vector> using namespace std; void jie ...