Как создать эскиз видео из видеодорожки в Android

Я хочу создать эскиз видео с пути sdcard, как я могу генерировать эскиз с пути к видеофайлу?

Ответ 1

Вы можете использовать класс ThumbnailUtils, чтобы получить миниатюру видеофайла видео.

createVideoThumbnail() - это метод, который возвращает битмап (миниатюру) видео с пути видеофайла.

Из Android-документов:

public static Bitmap createVideoThumbnail (String filePath, int kind)

Создайте миниатюру видео для видео. Может возвращать null, если видео поврежден или формат не поддерживается.

Вы можете создать VideoThumbnail из пути sdcard, как это.

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

Используя ThumbnailUtils, вы можете создать миниатюру двух типов.

  • MediaStore.Images.Thumbnails.MICRO_KIND тип будет генерировать эскиз размером 96 x 96.

  • MediaStore.Images.Thumbnails.MINI_KIND тип будет генерировать эскиз размером 512 x 384.

Надеюсь, это поможет!

Ответ 2

Пожалуйста, проверьте мой код, надеюсь, это поможет вам

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

Измените выше метод в соответствии с вашими потребностями

Ответ 3

Если вы непосредственно создаете миниатюры следующим образом

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 в файл сборки
Добавьте его в свой root 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"/>