android帧生成视频,Android截取视频帧并转化为Bitmap示例

MainActivity如下:

package cn.testmediaMetadataretriever;

import java.io.File;

import java.io.FileOutputStream;

import android.media.MediaMetadataRetriever;

import android.os.Bundle;

import android.os.Environment;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.Bitmap.CompressFormat;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

/**

* Demo描述:

* 利用MediaMetadataRetriever按照时间截取视频

* 并转换为Bitmap存放于SDCard

*

* 特别注意:

* getFrameAtTime()方法第一个参数的单位是微秒 (us)

*

*/

public class MainActivity extends Activity {

private Button mButton;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

init();

}

private void init(){

mButton=(Button) findViewById(R.id.button);

mButton.setOnClickListener(new ClickListenerImpl());

}

private class ClickListenerImpl implements OnClickListener{

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.button:

getBitmapsFromVideo();

default:

break;

}

}

}

public void getBitmapsFromVideo() {

String dataPath = Environment.getExternalStorageDirectory()+ "/testVideo.mp4";

MediaMetadataRetriever retriever = new MediaMetadataRetriever();

retriever.setDataSource(dataPath);

// 取得视频的长度(单位为毫秒)

String time = retriever.extractMetadata(MediaMetadataRetriever.MetaDATA_KEY_DURATION);

// 取得视频的长度(单位为秒)

int seconds = Integer.valueOf(time) / 1000;

// 得到每一秒时刻的bitmap比如第一秒,第二秒

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";

FileOutputStream fos = null;

try {

fos = new FileOutputStream(path);

bitmap.compress(CompressFormat.JPEG,80,fos);

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

main.xml如下:

@L_502_1@ 代码如下:

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="获取视频的帧图片"

android:layout_centerInParent="true"

/>

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值