2013-09-30 38 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