Как создать миниатюру видео из пути к видеофайлу в Android?

Я хочу создать миниатюру видео из пути к SD-карте. Как я могу это сделать?


person Parth Bhayani    schedule 11.09.2015    source источник


Ответы (3)


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

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

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

общедоступное статическое растровое изображение createVideoThumbnail (String filePath, тип int)

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

Вы можете создать VideoThumbnail из пути SD-карты следующим образом.

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

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

  1. Тип MediaStore.Images.Thumbnails.MICRO_KIND создаст миниатюру размером 96 x 96.

  2. MediaStore.Images.Thumbnails.MINI_KIND создаст миниатюру размером 512 x 384.

Я надеюсь, что это помогает!

person Rajesh    schedule 11.09.2015
comment
Нет. он работает только с видеофайлами, которые находятся в хранилище - person Rajesh; 15.12.2015
comment
Я пробовал это, но это не сработало для видео, которые находятся на SD-карте (внешнее хранилище) на Android 5.0+. Он вернул нулевое растровое изображение - person Dante; 23.05.2016
comment
@Riten, как вы получаете путь к файлу и на какой ОС andorid? - person Rajesh; 01.12.2016
comment
Как я могу установить путь к файлу из видео в необработанной папке? - person FeanDoe; 31.07.2017
comment
Если вы получаете нулевое растровое изображение, попробуйте запустить его на реальном устройстве, а не в эмуляторе. Я потратил часы на тестирование эмулятора. - person Kishan Solanki; 09.01.2018
comment
При этом высока вероятность выхода из ошибок памяти. - person krisDrOid; 17.03.2018
comment
как насчет файла .flv или .avi? - person Tushar Monirul; 04.10.2018
comment
в моем случае не помогает :( - person swati vishnoi; 23.09.2020

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

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

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

person Android Team    schedule 11.09.2015

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

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"/>
person Sushin Pv    schedule 01.10.2017