从Android视频中获取帧

Rah*_*yay 6 video android

我想从视频中获取帧数...我使用以下代码:

package com.vidualtest;

import java.io.File;
import java.io.FileDescriptor;

import android.app.Activity;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.os.Bundle;
import android.os.Environment;
import android.widget.ImageView;

public class VidualTestActivity extends Activity {
/** Called when the activity is first created. */
File file;
ImageView img;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    img = (ImageView) findViewById(R.id.img);

    File sdcard = Environment.getExternalStorageDirectory();
    file = new File(sdcard, "myvid.mp4");

    MediaMetadataRetriever retriever = new MediaMetadataRetriever();

    try {
        retriever.setDataSource(file.getAbsolutePath());

        img.setImageBitmap(retriever.getFrameAtTime(10000,MediaMetadataRetriever.OPTION_CLOSEST));


    } catch (IllegalArgumentException ex) {
        ex.printStackTrace();
    } catch (RuntimeException ex) {
        ex.printStackTrace();
    } finally {
        try {
            retriever.release();
        } catch (RuntimeException ex) {
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

}

这里在getFrameAtTime()中传递不同的静态时间,如10000,20000等,以毫秒为单位,但我仍然在不同的时间内从视频中获取相同的帧.我的目标是获得不同时间间隔的不同帧.

请给我你可能的帮助.

谢谢

Ric*_*ter 29

时间偏移参数以微秒为单位,而不是毫秒.因此,将您的时间偏移乘以1000,它应该可以正常工作.

感谢Google未在文档中指定此内容.


use*_*233 0

我认为 getFrameAt() 返回最接近您指定的时间间隔的帧。因此,如果最接近这两个时间间隔的帧相同,则指定 1000 或 1500 作为时间(以毫秒为单位)可能会返回相同的帧。要获取帧数,​​您可能需要获取重复的帧,然后通过检查几个像素来检查它们是否不同。但您必须确保不会错过任何帧。