MediaMetadataRetriever を使用して 5 秒のビデオで 1 秒あたり 10 フレームを取得し、それらを Arraylist に格納しようとしています。ffmpeg の使用には興味がありません。
現在、私のアプリケーションは 50 個の静止画像を作成しています。毎秒 10 個の異なるフレームではなく、毎秒間隔で 10 個の同一フレームです。
public class FrameCollector {
MediaMetadataRetriever mmr;
double fps;
double duration;
long counter = 0;
long incrementer;
public FrameCollector(String path, Context context)
{
try
{
mmr = new MediaMetadataRetriever();
mmr.setDataSource(path);
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
String fpsString = pref.getString("prefFPS", "10");
fps = Double.parseDouble(fpsString);
incrementer = (long) (1000000 / fps);
String stringDuration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
duration = Double.parseDouble(stringDuration) * 1000;
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
public ArrayList<Bitmap> getBitmaps()
{
try
{
ArrayList<Bitmap> bitFrames = new ArrayList<Bitmap>();
Bitmap b = mmr.getFrameAtTime(counter);
while (counter < duration && b != null)
{
bitFrames.add(b);
counter += incrementer;
b = mmr.getFrameAtTime(counter);
}
return bitFrames;
}
catch (Exception ex)
{
ex.printStackTrace();
return null;
}
}
}