22

我想从 SD 卡路径创建视频的缩略图。我怎样才能做到这一点?

4

3 回答 3

42

您可以使用ThumbnailUtils类来获取视频文件的视频缩略图。

createVideoThumbnail()是从视频文件路径返回视频位图(缩略图)的方法。

来自 Android 文档:

public static Bitmap createVideoThumbnail (String filePath, int kind)

为视频创建视频缩略图。如果视频损坏或格式不受支持,则可能返回 null。

您可以像这样从 sdcard 路径创建 VideoThumbnail。

Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, Thumbnails.MINI_KIND);

使用ThumbnailUtils,您可以创建两种类型的缩略图。

  1. MediaStore.Images.Thumbnails.MICRO_KINDtype 将生成大小为 96 x 96 的缩略图。

  2. MediaStore.Images.Thumbnails.MINI_KINDtype 将生成大小为 512 x 384 的缩略图。

我希望它有帮助!

于 2015-09-11T06:44:20.277 回答
4

如果您直接创建缩略图如下

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"/>
于 2017-10-01T08:52:43.857 回答
3

请检查我的代码希望它会帮助你

/**
     * 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;
    }

根据您的需要修改上述方法

于 2015-09-11T06:56:22.980 回答