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

fps 为 10,我应该每秒有 10 帧。所以,在一个 5 秒的文件中,我应该有 50 个捕获的帧。这个怎么做?如何正确编写 while/for 语句以使用 getFramesAtTime 方法捕获所有这些帧?

提前致谢。

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

帧.add(bmFrame);

}

希望有用

于 2013-10-15T15:41:15.587 回答