視頻截取第一幀畫面

視頻截取第一幀畫面

//maven項目依賴
/**
 * <!--視頻截取-->
*<dependency>
*	<groupId>org.bytedeco</groupId>
*	<artifactId>javacv</artifactId>
*	<version>0.8</version>
*</dependency>
*  * */

package com.gyj.yingx.util;

import org.bytedeco.javacpp.opencv_core.IplImage;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;


public class InterceptVideoPhotoUtil {

    /**
     * 獲取指定視頻的幀並保存爲圖片至指定目錄
     *
     * @param videofile 源視頻文件路徑
     * @param framefile 截取幀的圖片存放路徑
     * @throws Exception
     */
    public static void fetchFrame(String videofile, String framefile)
            throws Exception {
        long start = System.currentTimeMillis();
        File targetFile = new File(framefile);
        FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videofile);
        ff.start();
        int lenght = ff.getLengthInFrames();
        int i = 0;
        Frame f = null;
        while (i < lenght) {
            // 過濾前5幀,避免出現全黑的圖片,依自己情況而定
            f = ff.grabFrame();
            if ((i > 5) && (f.image != null)) {
                break;
            }
            i++;
        }
        IplImage img = f.image;
        int owidth = img.width();
        int oheight = img.height();
        // 對截取的幀進行等比例縮放
        int width = 800;
        int height = (int) (((double) width / owidth) * oheight);
        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
        bi.getGraphics().drawImage(f.image.getBufferedImage().getScaledInstance(width, height, Image.SCALE_SMOOTH),
                0, 0, null);
        ImageIO.write(bi, "jpg", targetFile);
        //ff.flush();
        ff.stop();
        //System.out.println(System.currentTimeMillis() - start);
    }

    public static void main(String[] args) {
        try {

            /*     * @param videofile 源視頻文件路徑
             * @param framefile 截取幀的圖片存放路徑
             * */
            String filePath="H:\\百知java培訓\\第三階段\\最終項目\\視頻\\Day2-1 需求分析評審.mp4";
            String targerFilePath="D:\\動畫.jpg";
            InterceptVideoPhotoUtil.fetchFrame(filePath, targerFilePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章