FFMPEGmediametadataretriever无法从视频中获取所有帧

时间:2019-12-15 03:37:20

标签: android ffmpeg android-ffmpeg mediametadataretriever

我正在开发一个应用程序,该应用程序将获取本地视频文件并提取其帧并写入磁盘。我正在使用ffmpegmediametadataretriever从视频中提取帧。我已经完成了以下代码

   retriever.setDataSource(activity, uri);
   Log.e("duration -> ", retriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION));
   long duration = Long.parseLong(retriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION));
   int everyNFrame = 1;
   double frameRate = Double.parseDouble(retriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_FRAMERATE));
   Log.e("all metadata", retriever.getMetadata().getAll().toString());
   long sec = Math.round(1000 * 1000 / (frameRate));
   Bitmap bitmap;
// Bitmap bitmap2;
// Log.e(" timeskip ", sec + "   -----------   " + (frameRate * 1000));
   for (long i = 1000; i < duration * 1000; i += sec)
// for (long i = sec; i < duration * 1000 && !stopWorking; i += sec)//30*sec)
// for(int i=1000000;i<duration*1000 && !stopWorking;i+=300000)
   {
       bitmap = retriever.getFrameAtTime(i, FFmpegMediaMetadataRetriever.OPTION_CLOSEST_SYNC);
       if (bitmap != null) {
          try {
                  FileOutputStream out = new FileOutputStream(path + "/img_" + (i) + ".jpg");
                  Log.e("filename->", path + "/img_" + i + ".jpg");
                  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                  bitmap.recycle();
                  Thread.sleep(75);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
       }
    }

它不是从视频中提取所有帧。对于某些视频,重复提取帧。为不同的视频提取随机数的帧。对于某些视频,将提取70-80%的帧,而对于某些视频,仅提取15-20帧。

我已经遍历了在StackOverflow和其他网站上可以找到的所有答案,以找到解决方案,但是问题就在那里。

0 个答案:

没有答案