- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个应用程序,该应用程序最终将以 200 毫秒的间隔将视频切割成帧。
该应用程序可以工作,您选择一个视频,该应用程序会将其切割成存储在设备上的位图。问题是,FFmpegMediaMetaRetriever.getFrameAtTime() 非常慢。我的意思是,处理视频所需的时间比视频长度本身要长,我看到平均每帧大约 1.1 秒。
我已经跟踪到调用 getFrameAtTime 的延迟。还有其他人知道在特定时间从视频中获取帧的更好方法吗?
代码:
new Thread(new Runnable() {
@Override
public void run() {
FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever();
retriever.setDataSource(getPath(EditVideo.this, mMediaUri));
String time = retriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION);
// FFmpegMediaMetadataRetriever doesn't have the ability to get Width and Height of video, needed to scale down to 1024.
MediaMetadataRetriever retriever1 = new MediaMetadataRetriever();
retriever1.setDataSource(getPath(EditVideo.this, mMediaUri));
int width = Integer.parseInt(retriever1.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
int height = Integer.parseInt(retriever1.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
retriever1.release();
int videoDuration = Integer.parseInt(time);
int newWidth = 1024;
int newHeight = Math.round(height * (1024f / width));
Bitmap bitmap;
for(int i=0;i<videoDuration;i+=mFrameEvery){
long startTime = System.currentTimeMillis();
bitmap = retriever.getFrameAtTime(i*1000, FFmpegMediaMetadataRetriever.OPTION_CLOSEST);
long endTime = System.currentTimeMillis();
Log.d(TAG,"Took: " + ((endTime - startTime) / 1000f));
final Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, false);
try {
File frameFile = getOutputMediaFile("IMAGEFILE",rev.size());
FileOutputStream fos = new FileOutputStream(frameFile);
scaledBitmap.compress(Bitmap.CompressFormat.PNG, 80, fos);
fos.close();
rev.add(frameFile.getAbsolutePath());
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(scaledBitmap);
totalFrames.setText("Total Frames: " + rev.size());
}
});
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "Error accessing file: " + e.getMessage());
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.INVISIBLE);
seekBar.setEnabled(true);
}
});
}
}).start();
D/EditVideo: Took: 1.448
D/EditVideo: Took: 1.147
D/EditVideo: Took: 1.162
D/EditVideo: Took: 1.322
D/EditVideo: Took: 1.301
D/EditVideo: Took: 1.453
D/EditVideo: Took: 1.108
D/EditVideo: Took: 1.165
D/EditVideo: Took: 1.292
D/EditVideo: Took: 1.358
D/EditVideo: Took: 1.369
D/EditVideo: Took: 1.06
D/EditVideo: Took: 1.13
D/EditVideo: Took: 1.183
D/EditVideo: Took: 1.177
D/EditVideo: Took: 1.231
D/EditVideo: Took: 0.924
D/EditVideo: Took: 1.007
D/EditVideo: Took: 1.092
D/EditVideo: Took: 1.104
D/EditVideo: Took: 1.211
D/EditVideo: Took: 0.923
D/EditVideo: Took: 0.994
D/EditVideo: Took: 1.119
D/EditVideo: Took: 1.138
D/EditVideo: Took: 1.193
最佳答案
我使用 MediaMetadataRetriver,平均处理时间约为 0.7 秒。我还找到了一些方法来减少获取框架的时间。
关于java - Android FFmpegMediaMetadataRetriever.getFrameAtTime() 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33625764/
我正在使用 FFmpegMediaMetadataRetriever 获取图像并将它们加载到 listView 的 imageView 中,但是加载列表需要 6-7 秒。有没有一种有效的方法可以通过更
我知道这个问题是重复的,但请给出一些解决方案。 Android FFmpegMediaMetadataRetriever.getFrameAtTime() 进展缓慢,我的 fragment 需要将近
我正在开发一个提取视频帧的应用程序,但我不能使用 MediaMetadataRetriever,因为它经常失败。所以我找到了一个由 William Seemann 编写的名为 FFmpegMediaM
我正忙于将 FFmpegMediaMetadataRetriever 预构建 .aar 文件添加到我的项目中,以减少每个架构的 Apk 文件大小。 This post将以下内容添加到他的 Gradle
我正在开发一个应用程序,该应用程序最终将以 200 毫秒的间隔将视频切割成帧。 该应用程序可以工作,您选择一个视频,该应用程序会将其切割成存储在设备上的位图。问题是,FFmpegMediaMetaRe
我在“Eclipse”中使用 FFmpegMediaMetadataRetriever 和 fmmr.jar 文件,它工作正常,但现在我已经在“Android Studio”中迁移了我的项目。我在 b
我在我的 Android Studio 中将依赖项 (com.github.wseemann:FFmpegMediaMetadataRetriever:1.0.3) 添加到我的应用程序 (build.
我正在尝试使用 FFmpegMediaMetadataRetriever 从视频帧中检索图像 这是我使用的代码:变量路径有这个值: "https://s3-us-west-2.amazonaws.co
我是一名优秀的程序员,十分优秀!