gpt4 book ai didi

Android 在特定时间创建视频缩略图

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:00:02 24 4
gpt4 key购买 nike

我已经知道如何从我的视频创建缩略图了。代码如下所示:

videoGalleryThumbnails.add(ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(
videoFile.getAbsolutePath(), MediaStore.Images.Thumbnails.MINI_KIND), 500, 200));

但是创建的缩略图是在一个非常糟糕的时间。正是视频变黑的时候。现在我再也不用全黑的缩略图了。

如何在特定时间拍摄我的视频的缩略图?例如。在 00:31 还是 01:44?

还是不可能?

我也尝试使用 MediaMetadataRetriever,但我只得到一张白色图像。代码看起来像这样

File tempVideoList[] = (Environment.getExternalStoragePublicDirectory(PATH_VIDEO_GALLERY))
.listFiles();
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
Bitmap myBitmap=null;
for (File videoFile : tempVideoList) {
if (videoFile.isFile()) {
//from here
try {
retriever.setDataSource(videoFile.getAbsolutePath());
myBitmap = retriever.getFrameAtTime(11); //at 11th second
} catch (Exception ex) {
Log.i("MyDebugCode", "MediaMetadataRetriever got exception:" + ex);
}

videoGalleryThumbnails.add(myBitmap);
//to here
}

如果我用最前面的代码替换标记为“从这里”到“到这里”的代码,它就可以工作。我还尝试了 MediaMetadataRetriever.OPTION_CLOSEST 和 OPTION_CLOSEST_SYNC 以及 OPTION_NEXT_SYNC。

最佳答案

好的,我知道了。MediaMetadataRetriever 绝对是正确的选择。问题是,它以微秒而不是秒为单位计算时间。解决方案如下所示:

try {
retriever.setDataSource(videoFile.getAbsolutePath());
int timeInSeconds = 30;
myBitmap = retriever.getFrameAtTime(timeInSeconds * 1000000,
MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
} catch (Exception ex) {
Log.i("MyDebugCode", "MediaMetadataRetriever got exception:" + ex);
}

videoGalleryThumbnails.add(myBitmap);

我不知道,是否真的需要 OPTION_CLOSEST_SYNC,但看起来这是更好的编程方式。

感谢 William Riley 为我指明了正确的方向。

关于Android 在特定时间创建视频缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com