9

ビデオからすべてのフレームを抽出しようとしています。
次のコードで、ビデオの最初の 30 フレームを取得したいのですが、最初のフレームしか 30 回取得しませんでした。

private ArrayList<Bitmap> getFrames(String path) {
    try {
        ArrayList<Bitmap> bArray = new ArrayList<Bitmap>();
        bArray.clear();
        MediaMetadataRetriever mRetriever = new MediaMetadataRetriever();
        mRetriever.setDataSource("/sdcard/myvideo.mp4");                    

        for (int i = 0; i < 30; i++) {
            bArray.add(mRetriever.getFrameAtTime(1000*i, 
                       MediaMetadataRetriever.OPTION_CLOSEST_SYNC));
        }
        return bArray;
    } catch (Exception e) { return null; }
}

では、ビデオからすべてのフレームを取得するにはどうすればよいですか?

4

4 に答える 4

3

Android SDK でのビデオ サポートは制限されており、H264 でエンコードされたビデオのフレーム抽出はキー フレームに対してのみ可能です。任意のフレームを抽出するには、ネイティブ コードを使用してビデオからデータを抽出するFFmpegMediaMetadataRetrieverなどのライブラリを使用する必要があります。非常に高速で、コンパイル済みのバイナリ (ARM および x86 用) が付属しているため、C++ や makefile を詳しく調べる必要がなく、Apache 2.0 でライセンスされており、Android のデモ アプリが付属しています。

純粋な Java ライブラリであるJCodecもありますが、速度が遅く、昨年使用したときは、抽出されたフレームの色が歪んでいました。

于 2015-02-07T10:27:20.773 に答える