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
- java获取视频播放时长
- FFMPEG获取视频播放时长
- FFMPEG获取视频播放时长
- java 获取MP3文件播放时长
- iOS开发:获取一个视频、音频文件的播放时长
- android videoview播放视频前获取视频时长(根据视频路径获取)
- java调用ffmpeg获取视频时长
- Java获取3gp视频时长
- java 获取音频,视频时长
- java调用ffmpeg获取视频时长
- java、js 获取视频时长
- 获取视频时长
- 获取视频时长
- Java利用jaudiotagger.jar获取Mp3的播放时长
- Java使用JAVE获取MP4播放时长
- java获取mp3的时长和播放mp3文件
- js获取视频时长
- jave获取视频时长
- 西瑞克斯机顶盒cy-jc1320安装APP
- 【Markdown】 Markdown语法介绍及常用编辑器推荐
- iOS下如何获取一个类的所有子类
- GCD 深入理解(一)
- 关于dicom参数信息和数据读写的理解
- java获取视频播放时长
- 黑马程序员训练营-------反射原理
- FFmpeg Filtering Guide参数说明
- 北京大学ACM/ICPC竞赛训练暑期课练习之怪盗基德的滑翔翼
- python使用mysql数据库
- swift url scheme(应用之间的调用)
- PAT (Advenced Level) 1026. Table Tennis (30) 模拟排队,有vip
- Codeforces Round #313 (Div. 2)
- C#读取XML文件,以及对XML文件的增删改查