public void getBitmapsFromVideo()
{
// 文件路径
String dataPath = Environment.getExternalStorageDirectory()+ "/testVideo.mp4";
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(dataPath);
// 取得VA文件的长度(单位为毫秒)
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
// 取得VA文件的长度(单位为秒)
int seconds = Integer.valueOf(time) / 1000;
// 得到每一秒的bitmap数据,如第一秒,第二秒......分别存成jpg\png等格式文件
for (int i = 1; i <= seconds; i++)
{
Bitmap bitmap = retriever.getFrameAtTime(i*1000*1000,MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
String path = Environment.getExternalStorageDirectory()+ File.separator + i + ".jpg";//JPG
//String path = Environment.getExternalStorageDirectory()+ File.separator + i + ".png";//PNG
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(path);
bitmap.compress(CompressFormat.JPEG, 80, fos);//JPG
//bitmap.compress(CompressFormat.PNG, 80, fos);//PGN
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
注意:
涉及到对存储的读写,Manifest中加入:
<!-- 在sd卡中写入数据的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 在sd卡中创建和删除文件的权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>