Java通过调用FFMPEG获取视频时长
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
由此看来FFmpeg很强大,很多主流的音频、视频处理软件都使用了FFmpeg。
FFmpeg下载下来解压,cmd进入到FFmpeg.exe目录中,即可在命令行下进行各种操作,查看视频信息命令:ffmpeg视频-i,如下图:
D:\ffmpeg\Libs>ffmpeg-iD:\MonitorRecord\monitor_20091222_050948_1.avi
FFmpegversionSVN-r10087,Copyright(c)2000-2007FabriceBellard,etal. 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 libavutilversion:49.5.0 libavcodecversion:51.40.4 libavformatversion:51.12.2 builtonAug12200711:38:35,gcc:4.2.1 Compiledbymsn:dev#fastreaming.com,2007/08/12 Enjoyit Input#0,avi,from'D:\MonitorRecord\monitor_20091222_050948_1.avi': Duration:00:00:25.0,start:0.000000,bitrate:619kb/s Stream#0.0:Video:mpeg4,yuv420p,1620x1100,1.14fps(r) Mustsupplyatleastoneoutputfile
在Java中执行此操作,解析返回结果,可以得到视频时长等信息。
/**
*获取视频总时间
*@paramviedo_path视频路径
*@paramffmpeg_pathffmpeg路径
*@return
*/
publicstaticintgetVideoTime(Stringvideo_path,Stringffmpeg_path){
Listcommands=newjava.util.ArrayList();
commands.add(ffmpeg_path);
commands.add("-i");
commands.add(video_path);
try{
ProcessBuilderbuilder=newProcessBuilder();
builder.command(commands);
finalProcessp=builder.start();
//从输入流中读取视频信息
BufferedReaderbr=newBufferedReader(newInputStreamReader(p.getErrorStream()));
StringBuffersb=newStringBuffer();
Stringline="";
while((line=br.readLine())!=null){
sb.append(line);
}
br.close();
//从视频信息中解析时长
StringregexDuration="Duration:(.*?),start:(.*?),bitrate:(\\d*)kb\\/s";
Patternpattern=Pattern.compile(regexDuration);
Matcherm=pattern.matcher(sb.toString());
if(m.find()){
inttime=getTimelen(m.group(1));
log.info(video_path+",视频时长:"+time+",开始时间:"+m.group(2)+",比特率:"+m.group(3)+"kb/s");
returntime;
}
}catch(Exceptione){
e.printStackTrace();
}
return0;
}
//格式:"00:00:10.68"
privatestaticintgetTimelen(Stringtimelen){
intmin=0;
Stringstrs[]=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]));
}
returnmin;
}  
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
