java获取视频播放时长

来源:互联网 发布:手机游戏服务端源码 编辑:程序博客网 时间:2024/05/17 06:32

1、安装工具:ffmpeg,安装步骤略

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.jpgList<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 outputbuf = 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. endreturn sb.toString();} catch (Exception e) {return null;}}}



3、使用到的jar包

http://www.java2s.com/Code/Jar/a/Downloadapachejakartacommonscodecjar.htm

0 0
原创粉丝点击