FFmpeg 프레임 시리즈 : 비디오 길이 가져 오기

1. 비즈니스 시나리오

비즈니스 요구 사항 : 업로드 된 비디오의 기간을 표시합니다.

2. 비디오 정보 처리를위한 FFmpeg 프레임 워크

FFmpeg 공식 웹 사이트 : http://ffmpeg.org/

3. 코드 구현

3.1 Windows 설치 FFmpeg

내가 것입니다 당신을 가르 칠 이에 5 분 JAVA 코드 : FFmpeg를 구현 비디오 데모 (윈도우 버전) 매우 상세한 쓴, 창에 FFmepg를 설치 / 리눅스, 나는 여기에 정교하지 않습니다.

3.2 비디오 정보를 보려면 암호 실행

창에 FFmpeg를 설치 한 후 명령을 실행하여 cmd 단위로 기간을 가져옵니다.

F:\ffmpegDemo\ffmpeg\bin\ffmpeg.exe -i F://ffmpegDemo//test.mp4

추신 : ffmpeg 프로그램 F : \ ffmpegDemo \ ffmpeg \ bin \ ffmpeg.exe 및 Windows에 저장된 로컬 비디오의 압축을 풉니 다 : F : //ffmpegDemo//test.mp4

구현 효과는 다음과 같습니다.
여기에 사진 설명 삽입

3.3 Java는 정보를 구문 분석하고 기간을 반환합니다.

FFmpeg를 통해 명령 줄을 실행하여 반환 된 비디오 정보를 얻고 Java를 통해 비디오 정보의 대상 데이터를 필터링하여 반환합니다.

public static void main(String[] args) {
    
    
        
        String timeLength = getVideoTime("F://ffmpegDemo//test.mp4","F:\\ffmpegDemo\\ffmpeg\\bin\\ffmpeg.exe");
        if(timeLength.length()>0){
    
    //字符串截取
            timeLength =timeLength.substring(0,timeLength.indexOf("."));
        }
        System.out.println("视频时长:"+timeLength);
       
    }

여기에 사진 설명 삽입

4. 완료된 데모 게시

public class ExecWindowCMD {
    
    

    public static void main(String[] args) {
    
    
        
        String timeLength = getVideoTime("F://ffmpegDemo//test.mp4","F:\\ffmpegDemo\\ffmpeg\\bin\\ffmpeg.exe");
        if(timeLength.length()>0){
    
    //字符串截取
            timeLength =timeLength.substring(0,timeLength.indexOf("."));
        }
        System.out.println("视频时长:"+timeLength);
       
    }

     /**
     *获取视频时间
     * @param video_path  视频路径
     * @param ffmpeg_path ffmpeg安装路径
     * @return
     */
    public static String getVideoTime(String video_path, String ffmpeg_path) {
    
    
        List<String> commands = new java.util.ArrayList<String>();
        commands.add(ffmpeg_path);
        commands.add("-i");
        commands.add(video_path);
        System.out.println("命令行:"+ffmpeg_path+" -i "+video_path);
        try {
    
    
            ProcessBuilder builder = new ProcessBuilder();
            builder.command(commands);
            final Process p = builder.start();

            //从输入流中读取视频信息
            BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
            StringBuffer sb = new StringBuffer();
            String line = "";
            while ((line = br.readLine()) != null) {
    
    
                sb.append(line);
            }
            br.close();

            //从视频信息中解析时长
            String regexDuration = "Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
            Pattern pattern = Pattern.compile(regexDuration);
            Matcher m = pattern.matcher(sb.toString());
            if (m.find()) {
    
    

                //System.out.println(video_path+",视频时长:"+m.group(1)+", 开始时间:"+m.group(2)+",比特率:"+m.group(3)+"kb/s");
                return m.group(1);
            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }

        return "";
    }
}

구현 효과는 다음과 같습니다.
여기에 사진 설명 삽입

비디오 소스 파일 :
여기에 사진 설명 삽입

추천

출처blog.csdn.net/u010312671/article/details/108738386