我希望能够使用Java8-64位逐帧读取MP4文件,并将每一帧作为JPG写入硬盘。我的第一次尝试是使用JavaFX 2.2媒体播放器在View组件上播放文件。我认为可能会有一个选项可以注册观察者,以便在每次加载新帧并准备好在组件表面绘制时获得事件,但似乎没有这样的方法。只需要抓取那些被绘制在组件上的帧/像素即可。
是否可以通过使用媒体播放器来完成这个任务?我之所以使用媒体播放器是因为它是我找到的最简单的解决方案。我尝试了VLCJ、只有32位和GStreamer,但都没有成功:(
目前为止,我已经做到了:
有没有一种方法可以做到以下内容:
是否可以通过使用媒体播放器来完成这个任务?我之所以使用媒体播放器是因为它是我找到的最简单的解决方案。我尝试了VLCJ、只有32位和GStreamer,但都没有成功:(
目前为止,我已经做到了:
public class VideoGrabber extends extends JFrame {
// code for scene setup omitted
final MediaView view = createMediaView(...)
// some other stuff happens here
// now start the video
view.getMediaPlayer().seek(Duration.ZERO);
view.getMediaPlayer().play();
view.getMediaPlayer().setOnEndOfMedia(new Runnable()
{ // save image when done
BufferedImage img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_BGR
view.paint(img.getGraphics());
ImageIO.write(img, "JPEG", new File("pic-"+System.currentTimeMillis()+".jpg"));
});
// somewhere else to create
private MediaView createMediaView(String url)
{
final Media clip = new Media(url);
final MediaPlayer player = new MediaPlayer(clip);
final MediaView view = new MediaView(player);
view.setFitWidth(VID_WIDTH);
view.setFitHeight(VID_HEIGHT);
return view;
}
有没有一种方法可以做到以下内容:
player.setOnNextFrameReady(final Event evt) { writeImage(evt.getFrame()) };
谢谢!