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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。