- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个简单的 Android 应用程序,它使用 MediaMetadataRetriver
类来获取帧。它工作正常,只是我意识到它会跳帧。
我要解码的视频 fragment 是用手机摄像头拍摄的。遵循相关的代码 fragment :
MediaMetadataRetriever mediaDataRet = new MediaMetadataRetriever();
mediaDataRet.setDataSource(path);
String lengthMsStr = mediaDataRet
.extractMetadata(mediaDataRet.METADATA_KEY_DURATION);
final long lenMs = Long.parseLong(lengthMsStr);
String widthStr = mediaDataRet
.extractMetadata(mediaDataRet.METADATA_KEY_VIDEO_WIDTH);
int width = Integer.parseInt(widthStr);
String heightStr = mediaDataRet
.extractMetadata(mediaDataRet.METADATA_KEY_VIDEO_HEIGHT);
int height = Integer.parseInt(heightStr);
注意变量 lenMs
,它保存以毫秒为单位的 clid 持续时间。然后对于我做的每一帧:
int pace = 30; // 30 fps ms spacing
for (long i = 0; i < lenMs; i += pace) {
if (is_abort())
return;
Bitmap bitmap = mediaDataRet.getFrameAtTime(i * 1000); // I tried the other version of this method with OPTION_CLOSEST, with no luck.
if (bc == null)
bc = bitmap.getConfig();
bitmap.getPixels(pixBuffer, 0, width, 0, 0, width, height);
[...]
}
目测检查后,我注意到有些帧被跳过了(比如短序列)。为什么?我该如何避免这种情况?
最佳答案
使用:
mediaDataRet.getFrameAtTime(i * 1000, MediaMetadataRetriever.OPTION_CLOSEST);
getFrameAtTime(n)
使用 OPTION_CLOSEST_SYNC
,它只会给你关键帧。
关于Android MediaMetadataRetriever.getFrameAtTime 跳过帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903936/
我正在尝试从相机捕获的视频文件中检索帧。我写了一个函数来这样做,我在不同时间的循环中使用它,每 100000(微秒)接收帧: public static Bitmap getVideoFrame(lo
我知道这个问题是重复的,但请给出一些解决方案。 Android FFmpegMediaMetadataRetriever.getFrameAtTime() 进展缓慢,我的 fragment 需要将近
我编写了一个简单的 Android 应用程序,它使用 MediaMetadataRetriver 类来获取帧。它工作正常,只是我意识到它会跳帧。 我要解码的视频 fragment 是用手机摄像头拍摄的
下面的代码只返回(test.gif)第一帧,并用5个相同的帧(视频第一帧)制作一个gif。 我在 StackOverflow 中阅读了大多数问题,但我无法弄清楚是什么原因导致了这个问题。 此外,根据一
我已使用 MetadataRetriever 从视频中提取帧,并将所有图像存储在 ArrayList 中.我想将它们全部存储在 SD 卡上(仅用于测试目的)。 但是当我从模拟器中拉出一个文件夹并查看保
我正在开发一个应用程序,该应用程序最终将以 200 毫秒的间隔将视频切割成帧。 该应用程序可以工作,您选择一个视频,该应用程序会将其切割成存储在设备上的位图。问题是,FFmpegMediaMetaRe
我正在尝试获取视频的帧,所以我像这样使用 MediaMetadataRetriever.getFrameAtTime(): Uri directorio = Uri.parse("androi
我有一个循环,我试图每 1/10 秒从视频中提取一帧。但是在 19 帧(视频的 1.9 秒)之后,我在 Logcat 上收到以下错误: 01-22 11:59:15.498: E/OMXCodec(3
我正在使用 MediaMetadataRetriever 按视频帧创建缩略图,但我在 Logcat 中收到此消息: E/MediaMetadataRetrieverJNI(14060): getFra
我是一名优秀的程序员,十分优秀!