2013-09-30 36 views
1

我在Android環境中編程,我想從設備中加載視頻文件,將其拆分爲多個幀並使用一些圖像處理技術處理它們中的每一個。如何使用MediaMetaDataRetriever拆分視頻

爲了將視頻正確地分割成一個幀數組,我使用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,我應該有10幀每秒。所以,在5秒的文件中,我應該有50個捕獲的幀。這個怎麼做?如何正確寫入while/for語句以使用getFramesAtTime方法捕獲所有這些幀?

在此先感謝。

回答

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);

} 

有用

希望it's