android 获取视频的帧
食源客 2014-05-09 05:04:39 先帖代码,源于网上。
String dataPath = Environment.getExternalStorageDirectory()+ "/testDemo.mp4";
//获取当前视频路径
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(dataPath);
// 取得视频的长度(单位为毫秒)
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
// 取得视频的长度(单位为秒)
int seconds = Integer.valueOf(time) / 1000;
//获得想要的帧数
int num = seconds*24;
// 得到每一秒时刻的bitmap比如第一秒,第二秒
for (int i = 1; i <=10; i++) {
Bitmap bitmap = retriever.getFrameAtTime(i*1000*1000,MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
String path = Environment.getExternalStorageDirectory()+"/Pictures"+ File.separator + i + ".jpg";
FileOutputStream fos = null;
try {
fos = new FileOutputStream(path);
bitmap.compress(CompressFormat.JPEG, 80, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
我给的MP4是一个10秒的视频。原先我是没秒获取一帧,但结果是:第一张是第二秒的帧,后面9张是第5秒的帧.。
然后我又尝试一秒获取24帧,即一共240张,参数换成了(i*1000*1000/24),循环240次。结果是:前48张是第二秒的帧,后面的240-48 张是第5秒的帧。。。。。
这。。。完全找不到逻辑。。。。郁闷死了。。。求大神解答啊。或者提供其他获取帧的方法。急急急!!!