从视频/视频文件中提取图像/图像序列的最佳方法



嗯,有FFMPEG和一些Java绑定和包装器,但我需要为每个特定平台分发正确的FFMPEG二进制文件。

有没有任何纯Java解决方案或库没有任何依赖像FFMPEG转换视频文件到图像序列?

解决方案,如FFMPEG, XUGGLER或JMF(废弃)不适合。真的没有纯Java解决方案吗?

也许至少对特定的视频编解码器/文件?

我只是想从视频文件中提取图像到jpeg/png文件并将它们保存到磁盘

真的没有纯Java解决方案[从视频流中提取图像]吗?

让我们看看。你必须:

  • 解码视频
  • 显示解码后的图像至少快于24张/秒。我想你可以跳过这一步。
  • 保存解码后的图片

看来解码视频将是最具挑战性的一步。人们和公司已经花了数年时间为各种视频格式开发编解码器(编码器/解码器)。

在SourceForge上有一个项目,ffmpeg的JMF包装器,已经开发了一些纯Java视频编解码器。也许你可以看看他们的源代码,看看如何为自己开发一个Java视频编解码器。

如果您愿意,可以寻找其他纯Java视频编解码器。

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
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, InterruptedException, ExecutionException
    {
        FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber("C:/Users/Digilog/Downloads/Test.mp4");
        frameGrabber.start();
        IplImage i;
        try {
            for(int ii=0;ii<frameGrabber.getLengthInFrames();ii++){
            i = frameGrabber.grab();
            BufferedImage  bi = i.getBufferedImage();
            String path = "D:/Image/Image"+ii+".png";
            ImageIO.write(bi,"png", new File(path));
            }
            frameGrabber.stop();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

有以下编解码器的纯Java实现:H.264 (AVC), MPEG 1/2, Apple ProRes, JPEG;以及以下文件格式:MP4 (ISO BMF, QuickTime), Matroska, MPEG PS和MPEG TS。
这个库叫做JCodec (http://www.jcodec.org)。
它目前只有很少的文档,但开发团队正在不断努力。
下面是如何简单地从MP4文件中抓取帧(从他们的网站上获取示例):

int frameNumber = 150;
BufferedImage frame = FrameGrab.getFrame(new File("filename.mp4"), frameNumber);
ImageIO.write(frame, "png", new File("frame_150.png"));

要将JCodec添加到项目中,只需在pom.xml中添加以下内容:

<dependency>
    <groupId>org.jcodec</groupId>
    <artifactId>jcodec</artifactId>
    <version>0.1.3</version>
</dependency>
最新

版本,看这里。

相关内容

  • 没有找到相关文章

最新更新