java 獲取視頻時長和視頻截圖 原

1. 首先需要下載ffmpeg插件

下載下來的東西可能有很多,但是完成所需要的其實就這兩個。

2. 然後試試插件是否可用

打開cmd,依照圖中的命令,進入ffmpeg的路徑下,輸入ffmpeg.exe  -i  視頻路徑地址

如果出現如下信息,表明插件可用。信息中會記載時長,開始點,文件格式,等等

3. 開始編程

    /**
     * 獲取視頻總時間
     *
     * @param videoPath  視頻路徑
     * @param ffmpegPath ffmpeg路徑
     * @return
     */
    public static int getVideoTime(String videoPath, String ffmpegPath) throws Exception {
        List<String> commands = new java.util.ArrayList<String>();
        commands.add(ffmpegPath);
        commands.add("-i");
        commands.add(videoPath);
        //模擬cmd指令發送
        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()) {
            int time = getTimelen(m.group(1));
//                System.out.println(video_path+",視頻時長:"+time+", 開始時間:"+m.group(2)+",比特率:"+m.group(3)+"kb/s");
            return time;
        }
        return 0;
    }
    
    //格式:"00:00:10.68" 轉化爲秒數
    public static int getTimelen(String timelen) {
        int min = 0;
        String strs[] = timelen.split(":");
        if (strs[0].compareTo("0") > 0) {
            min += Integer.valueOf(strs[0]) * 60 * 60;//秒
        }
        if (strs[1].compareTo("0") > 0) {
            min += Integer.valueOf(strs[1]) * 60;
        }
        if (strs[2].compareTo("0") > 0) {
            min += Math.round(Float.valueOf(strs[2]));
        }
        return min;
    }
/**
 * 獲取視頻第幾秒的截圖
 *
 * @param videoPath
 * @param ffmpegPath
 * @param time
 * @param savePath
 */
public static void getVideoCover(String videoPath, String ffmpegPath, int time, String savePath) throws Exception {
    String videoName = videoPath.substring(videoPath.lastIndexOf("\\") + 1);
    String videoCoverName = videoName.substring(0, videoName.lastIndexOf(".")) + ".jpg";
    List<String> cmd = new ArrayList<>();
    cmd.add(ffmpegPath);
    cmd.add("-i");
    cmd.add(videoPath);
    cmd.add("-y");
    cmd.add("-f");
    cmd.add("mjpeg");
    cmd.add("-ss");
    cmd.add(String.valueOf(time));
    cmd.add("-t");
    cmd.add("0.001");
    cmd.add("-s");
    cmd.add("1920*1080");
    cmd.add(savePath + "\\" + videoCoverName);
    ProcessBuilder builder = new ProcessBuilder();
    builder.command(cmd);
    builder.start();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章