java获取视频播放时长
2015-07-23 10:45
489 查看
1、安装工具:ffmpeg,安装步骤略
2、代码
3、使用到的jar包
http://www.java2s.com/Code/Jar/a/Downloadapachejakartacommonscodecjar.htm
2、代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; import org.apache.oro.text.regex.MalformedPatternException; import org.apache.oro.text.regex.MatchResult; import org.apache.oro.text.regex.Pattern; import org.apache.oro.text.regex.PatternCompiler; import org.apache.oro.text.regex.PatternMatcher; import org.apache.oro.text.regex.Perl5Compiler; import org.apache.oro.text.regex.Perl5Matcher; public class VideoUtil { /** * 保存视频缩略图 * @throws IOException */ public static void saveVideoThumbnail(String videoPath, String imagePath) throws IOException { //ffmpeg -i xxx.mp4 -y -f image2 -t 0.001 -s 125x125 xxx.jpg List<String> cmd = new java.util.ArrayList<String>(); cmd.add("ffmpeg");// 视频提取工具的位置 cmd.add("-i"); cmd.add(videoPath); cmd.add("-y"); cmd.add("-f"); cmd.add("image2"); cmd.add("-t"); cmd.add("0.001"); cmd.add("-s"); cmd.add("125x125"); cmd.add(imagePath); ProcessBuilder builder = new ProcessBuilder(); builder.command(cmd); builder.start(); } public static void main(String[] args) { String result = processFLV("20150722190602BmEf1C9Z.mp4"); PatternCompiler compiler = new Perl5Compiler(); try { String regexDuration = "Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s"; String regexVideo = "Video: (.*?), (.*?), (.*?)[,\\s]"; String regexAudio = "Audio: (\\w*), (\\d*) Hz"; Pattern patternDuration = compiler.compile(regexDuration, Perl5Compiler.CASE_INSENSITIVE_MASK); PatternMatcher matcherDuration = new Perl5Matcher(); if (matcherDuration.contains(result, patternDuration)) { MatchResult re = matcherDuration.getMatch(); System.out.println("提取出播放时间 ===" + re.group(1)); System.out.println("开始时间 =====" + re.group(2)); System.out.println("bitrate 码率 单位 kb==" + re.group(3)); } Pattern patternVideo = compiler.compile(regexVideo, Perl5Compiler.CASE_INSENSITIVE_MASK); PatternMatcher matcherVideo = new Perl5Matcher(); if (matcherVideo.contains(result, patternVideo)) { MatchResult re = matcherVideo.getMatch(); System.out.println("编码格式 ===" + re.group(1)); System.out.println("视频格式 ===" + re.group(2)); System.out.println("分辨率 ==" + re.group(3)); } Pattern patternAudio = compiler.compile(regexAudio, Perl5Compiler.CASE_INSENSITIVE_MASK); PatternMatcher matcherAudio = new Perl5Matcher(); if (matcherAudio.contains(result, patternAudio)) { MatchResult re = matcherAudio.getMatch(); System.out.println("音频编码 ===" + re.group(1)); System.out.println("音频采样频率 ===" + re.group(2)); } } catch (MalformedPatternException e) { e.printStackTrace(); } } // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) private static String processFLV(String inputPath) { List<String> commend = new java.util.ArrayList<String>(); // commend.add("e:\\videoconver\\ffmpeg\\ffmpeg ");//可以设置环境变量从而省去这行 commend.add("ffmpeg"); commend.add("-i"); commend.add(inputPath); try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); builder.redirectErrorStream(true); Process p = builder.start(); // 1. start // 保存ffmpeg的输出结果流 BufferedReader buf = null; String line = null; // read the standard output buf = new BufferedReader(new InputStreamReader(p.getInputStream())); StringBuffer sb = new StringBuffer(); while ((line = buf.readLine()) != null) { sb.append(line); continue; } // 这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行 @SuppressWarnings("unused") int ret = p.waitFor(); // 1. end return sb.toString(); } catch (Exception e) { return null; } } }
3、使用到的jar包
http://www.java2s.com/Code/Jar/a/Downloadapachejakartacommonscodecjar.htm
相关文章推荐
- MyEclipse中spring_servlet.xml报异常错误:Referenced file contains error(...)For&n
- 开启struts2自带的开发模式常量
- 开启struts2自带的开发模式常量
- 严重: Exception starting filter struts2 java.lang.reflect.InvocationTargetException - Class: com.opens
- Eclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程
- MyBatis-Spring MVC 整合示例(带源码)
- jsp页面中使用了<%=new java.util.Date()>但是不显示效果
- JAVA之JMS
- [转]maven安装以及eclipse配置maven
- 同一个数据库实例,不同用户下多表创建视图,Hibernate完成ORM映射,Spring整合,后台实现
- java JNI的两种实现方法:javah vs JNI_OnLoad
- Mac查找JDK路径/指定eclipse启动JDK版本
- 普通Java类获取spring 容器的bean的5种方法
- Caused by: java.lang.ClassNotFoundException: FilterConfig错误的解决办法
- java.lang.NoClassDefFoundError: ognl/PropertyAccessor解决办法
- JavaSE----基础语法(程序流程控制)
- Mac查找JDK路径/指定eclipse启动JDK版本
- Eclipse常用快捷键
- Java大数练习第二弹
- Java大数练习第二弹