9

ビデオからフレーム数を取得したい..次のコードを使用しています:

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) {
        }
    }


}

}

ここで getFrameAtTime() では、10000、20000 などのさまざまな静的時間をミリ秒単位で渡していますが、それでもビデオから同じフレームを異なる時間内に取得しています。私の目的は、異なる時間間隔で異なるフレームを取得することです。

可能な限りの助けを求めてください。

ありがとう

4

6 に答える 6

35

時間オフセット パラメータは、ミリ秒ではなく、マイクロ秒単位です。したがって、時間オフセットに 1000 を掛けると、正しく機能するはずです。

ドキュメントでこれを指定していないことを Google に感謝します。

于 2013-04-24T21:42:35.413 に答える
2

マイクロ秒を試してみてください。うまくいくはずです!

于 2012-10-07T00:23:00.117 に答える
0

getFrameAt() は、指定した時間間隔に最も近いフレームを返すと思います。そのため、時間 (ミリ秒単位) として 1000 または 1500 を指定すると、両方の時間間隔に最も近いフレームが同じである場合、同じフレームが返される可能性があります。フレーム数を取得するには、繰り返しフレームを取得してから、数ピクセルをチェックするだけでそれらが異なるかどうかを確認することができます。ただし、フレームを見逃さないようにする必要があります。

于 2012-07-05T20:06:38.417 に答える