java獲取視訊播放時長
阿新 • • 發佈:2019-01-21
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.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