【问题标题】:How to extract frames from a video java?如何从视频java中提取帧?
【发布时间】:2016-12-21 19:09:32
【问题描述】:

我正在做一个对视频进行分析的项目,我想将视频分割成帧以单独处理。我查看了几个开源库,包括 Xuggler 和 FFMPEG,但它们都已过时且无法使用。有没有一种简单的方法可以从视频中提取帧并将它们处理为BufferedImage 的集合?

【问题讨论】:

  • FFMPEG 仍在积极维护中 ffmpeg.org 上一个版本是本月...

标签: java ffmpeg xuggle


【解决方案1】:

接下来我留下@Rohit 提出的代码,但更新到 2021 年

package com.example;
 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter; 
public class Main { 
    public static void main(String []args) throws IOException, Exception
    {
        File myObj = new File("D:\\x\\x\\x\\x\\video.mp4");
        FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(myObj.getAbsoluteFile());
        frameGrabber.start(); 
        Frame f; 
        try {
            Java2DFrameConverter c = new Java2DFrameConverter(); 
            f = frameGrabber.grab();  
            BufferedImage bi = c.convert(f);
            ImageIO.write(bi,"png", new File("D:\\x\\x\\x\\x\\img.png"));
            frameGrabber.stop();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }
}

【讨论】:

    【解决方案2】:

    关注此代码

    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import org.bytedeco.javacpp.opencv_core.IplImage;
    import org.bytedeco.javacv.FFmpegFrameGrabber;
    import org.bytedeco.javacv.FrameGrabber.Exception;
    
    public class Read{
        public static void main(String []args) throws IOException, Exception
        {
            FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber("D:/video.mp4");
            frameGrabber.start();
            IplImage i;
            try {
    
                i = frameGrabber.grab();
                BufferedImage  bi = i.getBufferedImage();
                ImageIO.write(bi,"png", new File("D:/Img.png"));
                frameGrabber.stop();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    
        }
    }
    

    【讨论】:

    • 您的代码将生成第一帧的图像(第二帧)如何生成特定帧的图像?
    【解决方案3】:

    您可以使用OpenCV 图像和视频处理免费开源框架。并且还有一个很好的 Java 包装器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多