JavaCV 截圖視頻任何一幀的圖片

參考了眾多網(wǎng)友的代碼,改良后可以取任何一幀的圖片

安裝依賴(lài)

<dependency>
  <groupId>org.bytedeco</groupId>
  <artifactId>javacv-platform</artifactId>
  <version>1.5.3</version>
</dependency>

代碼實(shí)現(xiàn)

    /**
     * 獲取指定幀數(shù)的封面圖片
     * 
     * @param frameNum 幀數(shù)
     * @param filePath 文件所在路徑
     */
    public static BufferedImage getBufferedImageByFrame(int frameNum, String filePath) throws IOException {
        FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(filePath);
        return getBufferedImageByFrame(frameNum, grabber);
    }

    private static BufferedImage getBufferedImageByFrame(int frameNum, FFmpegFrameGrabber grabber)
        throws FrameGrabber.Exception {
        grabber.start();
        Frame frame;
        int i = 0;
        int fps = (int)grabber.getFrameRate();
        BufferedImage buffer = null;
        while (i < grabber.getLengthInFrames()) {
            frame = grabber.grabImage();
            if (i >= fps && i % (fps * frameNum) == 0) {
                Java2DFrameConverter converter = new Java2DFrameConverter();
                buffer = converter.getBufferedImage(frame);
                break;
            }
            i++;
        }
        grabber.stop();
        return buffer;
    }

    @Test
    public void test() throws IOException {
        String filePath = path + "15895090168002467.mov";
        BufferedImage buffer = getBufferedImageByFrame(1, filePath);
        saveImage(buffer, "158950901680024671.jpg", "jpg");
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容