在Android中使用FFmpegFrameGrabber.grabImage()每次获取相同的帧

在Android中使用FFmpegFrameGrabber.grabImage()每次获取相同的帧,android,ffmpeg,javacv,Android,Ffmpeg,Javacv,尝试使用javaCV、FFFmpegFramGrabber和save as jpg从视频文件中提取每个帧,每次都会得到相同的帧 FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(cVideoFilePath+ "/" + "VID_20170211_132657.mp4"); try { AndroidFrameConverter convertToBitmap = new AndroidFrameConv

尝试使用javaCV、FFFmpegFramGrabber和save as jpg从视频文件中提取每个帧,每次都会得到相同的帧

      FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(cVideoFilePath+ "/" + "VID_20170211_132657.mp4");
    try {
        AndroidFrameConverter convertToBitmap = new AndroidFrameConverter();
        grabber.start();

        for (int i= 0; i< grabber.getFrameRate();i++){

             frame1 = grabber.grabImage();
            Bitmap bitmap = convertToBitmap.convert(frame1);
            String date = simpleDateFormat.format(new Date());
            File picfile = new File(file_name);
            if (!picfile.exists()) {
                try {
                    picfile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {

                FileOutputStream out = new FileOutputStream(picfile);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                out.flush();
                out.close();

            } catch (IOException ex) {

            } finally {

            }
}
FFmpegFrameGrabber grabber=新的FFmpegFrameGrabber(cVideoFilePath+“/”+“VID_20170211_132657.mp4”);
试一试{
AndroidFrameConverter convertToBitmap=新的AndroidFrameConverter();
grabber.start();
对于(int i=0;i
循环看起来是错误的。以下是该循环的预期结果:

int frame_count = grabber.getLengthInFrames();
for (int i=0; i<frame_count; i+=grabber.getFrameRate())
int frame_count=grabber.getLengthInFrames();

对于(int i=0;i循环看起来是错误的。以下是该循环的预期结果:

int frame_count = grabber.getLengthInFrames();
for (int i=0; i<frame_count; i+=grabber.getFrameRate())
int frame_count=grabber.getLengthInFrames();

对于(int i=0;我每次都会得到相同的帧,尽管当i的值按应有的方式递增时,但每次输出的图像都是相同的,不清楚如何生成
文件名
。可能您没有为每个帧创建新文件。感谢Alex现在根据需要获得所有帧。但问题在于延迟,gett每秒仅捕获2帧。如果这不是实时流,则可能是您的过程造成的。尝试将捕获的帧“作为黑匣子”写入磁盘以进行估计(通过提取)将它们转换为位图然后再转换为jpeg所需的时间。每次仍然获得相同的帧,尽管当i的值按应有的方式递增时,但每次输出的图像都是相同的。不清楚如何生成
文件名。\u name
。可能您没有为每个帧创建新文件。感谢Alex现在获得所有帧根据需要删除。但问题在于延迟,每秒仅获取2帧。如果这不是实时流,则可能是您的过程造成的。尝试将捕获的帧“作为黑匣子”写入磁盘,以估计(通过提取)将其转换为位图然后转换为jpeg所需的时间。