使用Ffmpeg获取视频编码格式

1,自己去下载ffepeg工具包放在项目指定目录下

2,Ffmpeg工具类

public static String processflvcodetype(String ffmpegPath, String filePath) {
            String resultmessage=null;
            // String ffmpegPath = request.getSession().getServletContext().getRealPath(File.separator+"tools"+File.separator+"ffmpeg.exe");
            // String result = MediaService.processFLV(ffmpegPath, "C:\\Users\\Administrator\\Desktop\\乱七八糟\\20200722171230-23281_2_video_0_0_student_far.mp4");
            String result = MediaService.processFLV(ffmpegPath, filePath);
            System.out.println("Ffmpeg:" + result);
            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));
                    //编码格式
                    resultmessage=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();
            }
            return resultmessage;
        }
//  ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
    public static String processFLV(String ffmpegPath,String inputPath) {
        List<String> commend=new java.util.ArrayList<String>();
        commend.add(ffmpegPath);   // 添加转换工具路径
        commend.add("-i");
        commend.add(inputPath);
        try {
            ProcessBuilder builder = new ProcessBuilder();
            builder.command(commend);
            builder.redirectErrorStream(true);
            Process p= builder.start();
            BufferedReader buf = null; // 保存ffmpeg的输出结果流
            String line = null;
            buf = new BufferedReader(new InputStreamReader(p.getInputStream()));
            StringBuffer sb= new StringBuffer();
            while ((line = buf.readLine()) != null) {
                System.out.println(line);
                sb.append(line);
                continue;
            }
            int ret = p.waitFor();//这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行
            return sb.toString();
        } catch (Exception e) {
            return null;
        }
    }

3测试

    public static void main(String[] args) {
        String ffepegpath="F:\\workspace\\TestWork\\WebContent\\tools\\ffmpeg.exe";
        String filepath="C:\\Users\\Administrator\\Desktop\\spreedmovie_1.mp4";
        String processflvcodetype = MediaService.processflvcodetype(ffepegpath, filepath);
        System.out.println(processflvcodetype);
    }

 

Guess you like

Origin blog.csdn.net/weixin_44975322/article/details/115211411