1

私は Android 環境でプログラミングしており、デバイスからビデオ ファイルを読み込んで、フレームに分割し、それぞれをいくつかの画像処理技術で処理したいと考えています。

ビデオをフレームの配列に正しく分割するために、MetaDataRetriever クラスを使用して、ファイルのパスを入力します。

私の問題は、getFrameAtTime メソッドを使用してファイルを正しく分割する方法がわからないことです。特に、私のコードは次のとおりです。

    MediaMetaDataRetriever media = new MediaMetaDataRetriever();
    media.setDataSource(this.path);
    String durata = media.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    int durata_millisec = Integer.parseInt(durata);
    durata_video_micros = durata_millisec * 1000; 
    durata_secondi = durata_millisec / 1000; 
    String bitrate = media.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);  //numero bit al secondo.

    int fps = 10;
    int numeroFrameCaptured = fps * durata_secondi;
    int i=0;
    while(i<numeroFrameCaptured){
        vettoreFrame[i] = media.getFrameAtTime();
    }

10 fps の場合、1 秒あたり 10 フレームになるはずです。したがって、5 秒のファイルには、50 個のキャプチャ フレームが必要です。これを行う方法?getFramesAtTime メソッドでこれらすべてのフレームをキャプチャする while/for ステートメントを正しく記述する方法は?

前もって感謝します。

4

1 に答える 1

0

これを試して:

String durata = media.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
int durata_millisec = Integer.parseInt(durata);
durata_video_micros = durata_millisec * 1000; 
durata_secondi = durata_millisec / 1000; 
String bitrate = media.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);    
int fps = 10;
int numeroFrameCaptured = fps * durata_secondi;
ArrayList<Bitmap> frames;
frames = new ArrayList<Bitmap>();
Bitmap bmFrame;
MediaMetaDataRetriever media = new MediaMetaDataRetriever();
media.setDataSource(this.path);
totalFotogramas = durata_millisec/1000*fps; //video duration(micro seg)/1000s*fotogramas/s

for(int i = 0; i < totalFotogramas; i++){
bmFrame = mediaLowResolution.getFrameAtTime(100000*i , MediaMetadataRetriever.OPTION_CLOSEST);

frames.add(bmFrame);

}

役に立つことを願っています

于 2013-10-15T15:41:15.587 に答える