web-dev-qa-db-ja.com

Androidのビデオファイルパスからビデオサムネイルを作成する方法は?

SDカードパスからビデオのサムネイルを作成したい。どうやってやるの?

16
Parth Bhayani

ThumbnailUtilsクラスを使用して、ビデオファイルのビデオサムネイルを取得できます。

createVideoThumbnail()は、ビデオファイルパスからビデオのビットマップ(サムネイル)を返すメソッドです。

From Android Docs:

public static Bitmap createVideoThumbnail(String filePath、int kind)

動画の動画サムネイルを作成します。ビデオが破損しているか、形式がサポートされていない場合はnullを返す場合があります。

このようなSDカードパスからVideoThumbnailを作成できます。

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

ThumbnailUtilsを使用すると、2つのタイプのサムネイルを作成できます。

  1. MediaStore.Images.Thumbnails.MICRO_KINDタイプはサイズ96 x 96のサムネイルを生成します。

  2. MediaStore.Images.Thumbnails.MINI_KINDタイプは、サイズ512 x 384のサムネイルを生成します。

私はそれが役立つことを願っています!

35
Rajesh

それがあなたを助けることを願って私のコードをチェックしてください

/**
     * 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
Android Team

次のようにサムネイルを直接作成する場合

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"/>
3
Sushin Pv