我想从 SD 卡路径创建视频的缩略图。我怎样才能做到这一点?
3 回答
您可以使用ThumbnailUtils
类来获取视频文件的视频缩略图。
createVideoThumbnail()
是从视频文件路径返回视频位图(缩略图)的方法。
来自 Android 文档:
public static Bitmap createVideoThumbnail (String filePath, int kind)
为视频创建视频缩略图。如果视频损坏或格式不受支持,则可能返回 null。
您可以像这样从 sdcard 路径创建 VideoThumbnail。
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, Thumbnails.MINI_KIND);
使用ThumbnailUtils
,您可以创建两种类型的缩略图。
MediaStore.Images.Thumbnails.MICRO_KIND
type 将生成大小为 96 x 96 的缩略图。MediaStore.Images.Thumbnails.MINI_KIND
type 将生成大小为 512 x 384 的缩略图。
我希望它有帮助!
如果您直接创建缩略图如下
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(path,
MediaStore.Images.Thumbnails.MINI_KIND);
如果您正在为大型视频集(大量视频)创建缩略图,则此方法会出现问题。应用程序将冻结,直到所有缩略图都加载完毕,因为所有进程都在主线程中执行。
使用 SuziLoader
此加载器将加载本地存储在后台文件系统中的视频的缩略图。
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/video.mp4";
ImageView mThumbnail = (ImageView) findViewById(R.id.thumbnail);
SuziLoader loader = new SuziLoader(); //Create it for once
loader.with(MainActivity.this) //Context
.load(path) //Video path
.into(mThumbnail) // imageview to load the thumbnail
.type("mini") // mini or micro
.show(); // to show the thumbnail
要获得此依赖项,请使用以下步骤
步骤 1.将 JitPack 存储库添加到您的构建文件中将其添加到存储库
末尾的根 build.gradle 中:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
步骤 2.添加依赖项
dependencies {
compile 'com.github.sushinpv:SuziVideoThumbnailLoader:0.1.0'
}
在清单中添加读取外部存储权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
请检查我的代码希望它会帮助你
/**
* Retrieve video frame image from given video path
*
* @param p_videoPath
* the video file path
*
* @return Bitmap - the bitmap is video frame image
*
* @throws Throwable
*/
@SuppressLint("NewApi")
public static Bitmap retriveVideoFrameFromVideo(String p_videoPath)
throws Throwable
{
Bitmap m_bitmap = null;
MediaMetadataRetriever m_mediaMetadataRetriever = null;
try
{
m_mediaMetadataRetriever = new MediaMetadataRetriever();
m_mediaMetadataRetriever.setDataSource(p_videoPath);
m_bitmap = m_mediaMetadataRetriever.getFrameAtTime();
}
catch (Exception m_e)
{
throw new Throwable(
"Exception in retriveVideoFrameFromVideo(String p_videoPath)"
+ m_e.getMessage());
}
finally
{
if (m_mediaMetadataRetriever != null)
{
m_mediaMetadataRetriever.release();
}
}
return m_bitmap;
}
根据您的需要修改上述方法