【发布时间】:2014-08-24 12:08:06
【问题描述】:
我想逐帧读取 java8-64bit 格式的 Mp4 文件,并将每一帧作为 jpg 格式写入我的硬盘。我的第一次尝试是使用 JavaFX 2.2 媒体播放器播放文件 在视图组件上。我想也许每次加载新框架并准备好在组件表面上绘制时,可以选择注册观察者以获取事件,但似乎没有这种方法。 只抓取那些在组件上绘制的帧/像素就足够了。
这可以通过使用媒体播放器来完成吗?我使用媒体播放器的原因是 bcs,这是我得到的最简单的解决方案。我尝试了 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()) };
谢谢!
【问题讨论】:
标签: java video image-processing