如何获取Android中视频文件的关键帧(同步帧)时间戳列表?

前端之家收集整理的这篇文章主要介绍了如何获取Android中视频文件的关键帧(同步帧)时间戳列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有可以给我的 Android的给定视频文件关键帧的时间戳列表的API?

解决方法

对于一个优雅的解决方案,好像您需要使用ffmpeg for android来实现这一点.有人试过这样: How to get the frame from video file in android;并建议使用ffmpeg.

我检查了参考手册,但是只能找到一种使用MediaMetadataRetriever()在相对于给定位置获取关键帧本身(无时间戳)的方法,如下所述:http://developer.android.com/reference/android/media/MediaMetadataRetriever.html#extractMetadata%28int%29

如果您不想使用ffmpeg,您可以尝试以下操作:

private ArrayList<int> getKeyFrameTimestamps(String filename) {
  ArrayList<int> timeStamps = new ArrayList<int>();

  try {
    MediaMetadataRetriever mRetriever = new MediaMetadataRetriever();
    mRetriever.setDataSource(getDataSource(filename));
    mRetriever.getFrameAtTime(i,MediaMetadataRetriever.OPTION_CLOSEST_SYNC);

    Bitmap lastFame = mRetriever.getFrameAtTime(0,MediaMetadataRetriever.OPTION_NEXT_SYNC);
    result.add(0);

    for(int time=1; frame ; ++time) {
      Bitmap frame = mRetriever.getFrameAtTime(time,MediaMetadataRetriever.OPTION_PREVIoUS_SYNC);
      if (frame && !frame.sameAs(lastFrame)) {
        result.add(time);
        lastFrame = frame;
      }
    }
  } catch (Exception e) {  /* TODO: HANDLE THIS */ }

  return timeStamps;
}

这当然不是很优雅,但是可能会没有麻烦安装ffmpeg …这可能也很慢(我不知道).但也许这只是你需要的.

PS:适合您的问题的ffmpeg教程可以在这里找到:http://dranger.com/ffmpeg/tutorial07.html

原文链接:https://www.f2er.com/android/313673.html

猜你在找的Android相关文章