位置:首页 » 教程 » Android截取视频帧并转化为Bitmap

Android截取视频帧并转化为Bitmap

日期:2013-06-02 阅读:1num
Advertisement

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如下:

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

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取视频的帧图片"
        android:layout_centerInParent="true"
    />

</RelativeLayout>
相关文章
  • 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 andr

  • ffmpeg截取视频指定帧为图片,获取rotation信息并旋转

    ffmpeg对于php开发者来讲肯定都多少会听过吧,我信下面来看ffmpeg截取视频的功能,这个是直接使用php来实现的,具体的例子如下所示. 截取视频指定帧为图片,php ffmpeg扩展已经完美实现: $movie = new ffmpeg_movie($video_filePath); $ff_frame = $movie->getFrame(1); $gd_image = $ff_frame->toGDImage(); $img="./test.jpg"; imag

  • android摄制视频时帧数的设定

    android录制视频时帧数的设定 在Android做视频录制时,我用的分辨率是640*480,这样的分辨率,它的帧数该怎么设定呢,求解中... 1 楼 hjj_1208 2010-10-08 关注 ,解了没有呀 ?

  • 怎么截取视频的第一帧图片

    如何截取视频的第一帧图片? 在用户上传视频后,我需要截取第一帧转成图片来作为页面显示用,请问java代码如何实现? ------解决方案-------------------- 菜鸟来学习-- ------解决方案-------------------- 没弄过帮顶了 ------解决方案-------------------- ding ------解决方案-------------------- html 转 jpg ------解决方案-------------------- 一个比较笨的

  • nodejs怎么从上传的视频中截取一帧作为预览图片 nodejs怎么从上传的视频中截取一帧作为预览图片

    nodejs如何从上传的视频中截取一帧作为预览图片 客户有个上传视频的需求,上传的视频呢,需要能在线播放并且列表中必须出现类似优酷等视频首页上的那种缩略图,成品如下图所示: 当然了,上传视频的界面就不贴出来了,毕竟我们这篇文章的重点不在于如何上传,而在于如何用nodejs截取视频中的帧!~ 这里我们需要一个开源的第三方插件----大名鼎鼎的多媒体编解码框架ffmpeg,需要安装在服务器上由nodejs调用, 代码贴出如下: function fecthVideoThumbnail(entryid

  • Android-利用Java反照机制获取视频帧图像 Android-利用Java反照机制获取视频帧图像

    Android--利用Java反射机制获取视频帧图像 在Android多媒体开发中,我们必须了解系统MediaScanner的整体流程,网上关于MediaScanner的文章非常多,感兴趣的朋友看以参看以下两篇博客: http://blog.csdn.net/Innost/article/details/6083467(注重MediaScanner源码流程分析) http://blog.csdn.net/zqiang_55/article/details/7060171(注重MediaScann

  • 小结android音频视频操作

    总结android音频视频操作 播放音乐和视频用的是类:MediaPlayer 刻录声音和视频用的是类:MediaRecorder 拍照:Camera 没什么难度,都是调用android的API 1.刻录视频,关键代码如下: MediaRecorder mediaRecorder = new MediaRecorder(); mediaRecorder.reset(); //首先重置一下 mediaRecorder.setVideoSource(MediaRecorder.VideoSource

  • 爱剪辑如何截取视频片段图文教程 爱剪辑如何截取视频片段图文教程

    一.添加视频 在软件主界面顶部点击"视频"选项卡,在视频列表下方点击"添加视频"按钮,在弹出的文件选择框添加视频. 图1:添加视频 二.截取视频片段 添加视频进入"预览/截取"对话框后,在该对话框,我们有如下方法截取视频: 1.在"截取的开始时间"和"截取的结束时间"处手工输入时间点. 图2:手工输入要截取的视频片段时间点 2.播放到需要截取的视频画面处时,点击"截取的开始时间"和&qu

  • photoshop截取视频制作成动态海报制作教程 photoshop截取视频制作成动态海报制作教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下截取视频制作成动态海报的制作教程,各位想知道具体制作方法的使用者们,那么下面就快来跟着小编一起看一看制作方法吧. 给各位photoshop软件的使用者们来详细的解析分享一下截取视频制作成动态海报的制作教程. 教程分享: 第一步,制作工具,迅雷影音和PS.(能拿到GIF的软件有很多这里就不过多介绍了) 一张动态海报主要由GIF和文案(动.静态文案)组成.迅雷影音生成GIF,PS加文案.特效. 适当的修改些细节. 第二步(得到GIF)

  • 将YUYV422视频图像数据转化为RGB数据后保存为Bit地图后出错。 将YUYV422视频图像数据转化为RGB数据后保存为Bit地图后出错。

    将YUYV422视频图像数据转化为RGB数据后保存为Bitmap后出错.. 将YUYV数据转化为RGB数据部分的代码如下:其中buffer为YUYV数据流,rgbData保存RGB数据: if (buffer != null) { isReadingFrame = true; int j = 0; for (int k = 0; k < h; k++) { for (int i = 0; i < w * 2; i += 4) { int temptR1, temptG1, temptB1, t

  • android布局-FrameLayout(帧格局)详解 android布局-FrameLayout(帧格局)详解

    android布局------FrameLayout(帧布局)详解 FrameLayout(帧布局) 前言 作为android六大布局中最为简单的布局之一,该布局直接在屏幕上开辟出了一块空白区域, 当我们往里面添加组件的时候,所有的组件都会放置于这块区域的左上角; 帧布局的大小由子控件中最大的子控件决定, 如果都组件都一样大的话,同一时刻就只能能看到最上面的那个组件了! 当然我们也可以为组件添加layout_gravity属性,从而制定组件的对其方式 帧布局在游戏开发方面用的比较多,等下后面会给

  • android 音视频刻制

    android 音视频录制 package cn.media; import java.io.File; import java.io.IOException; import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.view.SurfaceHolder; import andro

  • Android截取现阶段屏幕保存到外部设备上

    Android截取当前屏幕保存到外部设备上 要保存屏幕首先要获取当前窗口信息,再以流的形式转成图片写入到文件保存起来,文件的命名可以根据当前时间. package com.example.capture2sd; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import android.app.Activity; import

  • 截取视频,其后制成gif 教程 截取视频,其后制成gif 教程

    截取视频,然后制成gif 教程 先看下效果图,因为要写DirectX 教程,涉及到旋转,觉得gif是最好的展览方式,很早就想知道如何截取视频,然后制成gif .这次总算有时间把整个过程做一遍. 1.需要用到的软件(在详细看下面的东西时,不要被上面旋转的图片转晕了,我写文章时,快晕了) 1.Camtasia Studio 7.1.1.1785 . 可以搜索 Camtasia.Studio_PortableSoft.7z 下载,大约 45MB,这个是轻量级的,完整版要几百MB. 这个软件是我非常喜欢

  • Android读取视频文件解决方法

    Android读取视频文件 在android中怎么读取视频文件呢?读取一个.yuv类型视频文件,并把该文件保存为byte[]类型的: 我用的方法出现 Out of Memoryerror错误: 代码如下: Java code public static byte[] getByetsFromFile(File file) { byte[]buffer = null; ByteArrayOutputStream bos =null; try{ FileInputStream fis = new F

  • android音视频点/直播模块开发

    前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及如何技术选型,如何解决遇到的坑,本文抛砖引玉,欢迎大咖交流. 一. 音视频的基础知识 1.1 基本概念 视频是什么 静止的画面叫图像(picture).连续的图像变化每秒超过24帧(frame)画面以上时,根椐视觉暂留原理, 人眼无法辨别每付单独的静态画面,看上去是平滑连续的视觉效果.这样的连

  • Android录制视频 Android录制视频

    我们一般直接从摄像头和麦克风取数据,经过编码,保存为文件.android的视频录制需要使用到MediaRecorder,MediaRecorder除了可以用于录制音频,还可用于录制视频. 效果图如下图所示: 一个为录制过程中,可以看到屏幕上方的录制时间显示,后一个为停止录制视频. 然后录制好的视频可以在手机的SD卡中找到,如下图所示: 视频录制步骤: 1) 调用MediaRecorder 对象的setVideoEncoder().setVideoEncodingBitRate(intbitRat

  • android截取银屏图

    android截取屏幕图 import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Rect; import android.os.Environment; import android.v

  • iOS截取视频缩略图的两种方法

    前言: 看完了使用MPMoviePlayerController播放在线视频,在实际应用中有时候需要获取视频的缩略图,我们来看看如何截取指定时间内的视频缩略图. 一 使用MPMoviePlayerController自带的方法 - (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option NS_AVAILABLE_IOS(3_2); /** * 视频截图 */

  • Android基础入门教程——8.2.2 Bitmap引起的OOM问题 Android基础入门教程——8.2.2 Bitmap引起的OOM问题

    Android基础入门教程--8.2.2 Bitmap引起的OOM问题 标签(空格分隔): Android基础入门教程 本节引言: 上节,我们已经学习了Bitmap的基本用法,而本节我们要来探讨的Bitmap的OOM问题, 大家在实际开发中可能遇到过,或者没遇到过因为Bitmap引起的OOM问题,本节我们 就来围绕这个话题来进行学习~了解什么是OOM,为什么会引起OOM,改善因Bitmap引起的 OOM问题~ 1.什么是OOM?为什么会引起OOM? 答:Out Of Memory(内存溢出),我

最新文章
  • 举办婚礼请假条

    尊敬的领导: 我和女友×××商定于××月××日举办婚礼,需要从××月××日起请假××天,于××月××日正常恢复上班.目前手头的工作已经基本完毕,其他工作已经交付完毕.请予批准. 祝安好!

  • 6个出境游不需额外签证的中转国 6个出境游不需额外签证的中转国

    6个出境游不需额外签证的中转国 假期出境旅游时,如果飞机没有直航的航班前往目的地,通常需要到某地中转.别以为中转只是浪费时间,其实也可以顺便安排一次中转地国家的入境旅游,为旅程加码.据了解,一些飞机中转比较繁忙的中转国就有规定,只要持有前往特定第三国的签证和机票,就可以在该中转国免签入境旅游. 不需额外耗时费钱拿签证就可多游一国,真可谓是旅程升值呢. 概念解释:过境签证:过境签证指公民取得前往某个国家(地区)的入境签证后,搭乘交通工具(包括陆路.飞机)时,途经第三国家(地区)的签证. 中转地1:

  • 关于TOMCAT主目录与虚拟目录的配置介绍

    TOMCAT 主目录 与虚拟目录的配置 以下小结使用tomcat5.0.28测试通过,tomcat安装路径为C:\Tomcat 在默认安装后,tomcat的主目录是webapps/root目录,如果我们想改变tomcat的主目录的话可以这样做: 1.打开C:\Tomcat\conf\server.Xml,在<host></host>之间加入代码: <Context path="" docBase="E:\tomcatApp\JeasyCMS&qu

  • Illustrator绘制矢量风格的自行车效果图教程 Illustrator绘制矢量风格的自行车效果图教程

    先看看效果图吧 1.车轮儿 STEP 1:我们先从自行车的基本部件开始:车轮儿.首先用椭圆工具(L)画一个150px*150px的圆,填充色选无,描边颜色是深紫罗兰色,粗细是8pt. STEP 2:通过对象-扩展-描边,把圆形转成曲线,我们就有了一个环形的路径. 下面的步骤是为了给轮子加点阴影,这样就显得比较立体.复制这个圆环并"贴在上面"两次(Control-C > Control-F > Control-F).选择最上层的圆环,用方向键向右平移,我移动了4px.(可以把

  • 好搜探索是什么 好搜探索是什么

    好搜探索是什么?好搜探索怎么样?好搜探索是360官方推出的一款帮助用户更低成本获取更多.更全面.更深入信息的应用软件,用户可以使用好搜探索帮你更加方便快捷的找到想要的,好搜探索带你发现更广更深的宝藏,下面本站小编就给大家带来详细的介绍. 好搜探索认为,探索,是人类与生俱来的能力.历史上有诸多事例证明人类从未停止过探索的脚步. 在好搜探索看来,历史虽已来不及参与,但未来在等着大家去发现.好搜探索,正是在信息时代,以创新的方式,带领人们开启探索的旅程,发现未知的世界. 好搜探索怎么样 好搜探索帮你找

  • 描写原野山林的词语

    绿草如茵 [解释]茵:铺垫的东西,垫子.褥子.毯子的通称. [出处]小学六年级下册苏教版课文<孔子游春>:绿草如茵的河畔,弟子们围在老师身边,有的蹲着,有的坐着. 花团锦簇 [解释]形容五彩缤纷,十分华丽的形象. [出处]宋·释道原<景德传灯录>卷十七:"自余是什么亲拟,将有限身心向无限中用,--.若无恁么事,饶你攒花簇锦,亦无用处." 奇花异草 [解释]指稀奇少见的花草.异:奇异的,奇怪的 奇:特别的. [出处]<西京杂记>卷三:"奇花异

  • 14招不过时家居布置 14招不过时家居布置

    家居的布置有时像给房子穿一件衣服;或者是化一个妆,如果你把房间四壁当作家中的脸面的话.所以我们并不需要时时关注,而要掌握基本方法,并且深刻了解自己的需要.扮家就像装扮自己的脸一样.它们之间的不同是,脸上的妆是别人在看,而家里的"妆"是给自己看,所以,当然更要照顾自己的眼睛. 家居布置 1.超级舒适感 润肤霜的作用无可替代,那就表示即使什么感觉都不追求的人,也会要一份超级的舒适在家里.所以,身体可以接触到的柔软,眼睛可以看到的鲜艳舒缓,耳朵听到的悠扬婉转,都可以成为家居的首选良方,与流行

  • SQL语句教程(02) DISTINCT

    SQL语句教程(02) DISTINCT ELECT 指令让我们能够读取表格中一个或数个栏位的所有资料.这将把所有的资料都抓出,无论资料值 有无重复.在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况.换句话说,我们需要知 道这个表格/栏位内有哪些不同的值,而每个值出现的次数并不重要.这要如何达成呢?在 SQL 中,这是 很容易做到的.我们只要在 SELECT 后加上一个 DISTINCT 就可以了. DISTINCT 的语法如下: SELECT DISTINCT "栏位名"

  • AS3应用ByteArray进行对象深度拷贝

    AS3使用ByteArray进行对象深度拷贝 使用ActionScript3中新提供的ByteArray类(flash.utils.ByteArray)可以创建一个对象的深度拷贝."深 度"的意思是可以拷贝一个对象(object)的所有引用,这意味着如果你拷贝一个包含对象的数组,那么数组中的对象也被拷贝(而不是引用).下面是一个 clone方法: ActionScript代码: functionclone(source:Object):*{ varcopier:ByteArray=ne

  • 隐性病毒藏局域网 教你判断与清除

    真假难辨 任何病毒和木马存在于系统中,都无法彻底和进程脱离关系,即使采用了隐藏技术,也还是能够从进程中找到蛛丝马迹,因此,查看系统中活动的进程成为我们检测病毒木马最直接的方法.但是系统中同时运行的进程那么多,哪些是正常的系统进程,哪些是木马的进程,而经常被病毒木马假冒的系统进程在系统中又扮演着什么角色呢? 当我们确认系统中存在病毒时,可以通过"任务管理器"查看系统中的进程时又找不出异样的进程,这说明病毒采用了一些隐藏措施,我们定义这种现象病毒为隐性病毒,常见隐性病毒的有以下几种情况:

热门推荐
  • iPhone6国行电信版如何预定? iPhone6国行电信版如何预定? iPhone6国行电信版预定流程_iPhone6国行电信版如何预定 目前三大运营商的iPhone6国行均已开通预约,这里为大家详细介绍一下中国电信的预约办理流程. 中国电信: 采用两种方式,可免费预约,也可以缴100元定金款,同时100元后期将变成400元话费赠送给用户,不过中国电信并未给出具体到货时间. 中国电信预定地址:http://www.189.cn/iphone/index.html
  • 新生儿怎样睡出漂亮头型 新生儿怎样睡出漂亮头型 宝贝的头型与枕头无关,与宝贝的睡姿有关.刚出生的宝贝,头颅骨尚未完全骨化,各个骨片之间仍有成长空隙,直到小宝贝15个月左右时囟门闭合前,宝贝头部都有相当的可塑性. 趴睡 在西方国家,小儿科医师都会告诉家长,不要让宝贝趴睡.因为宝贝趴睡导致婴儿猝死的几率比较高.虽然睡姿本身并不是婴儿猝死症的必要条件,但还是有某种程度的关联.因为这个时期的宝贝还不能抬头.转头.翻身,尚无保护自己的能力,因此,俯卧睡觉容易发生意外窒息,还可能会压迫内脏,不利于宝贝的生长发育. 侧睡 如果爸爸和妈咪很在乎宝贝的头型好不
  • 如何进行网络设置? 如何进行网络设置? 1.打开"网络属性" 在桌面上用鼠标右键单击"网上邻居",在右键菜单上点选"属性"选项后打开"网络连接"窗口,你会看到有一个名为"本地连接"的图标,用鼠标右键单击这个图标,然后在右键菜单上点选"属性"选项. 电脑网络设置图文 2.选择"TCP/IP协议" 在网卡连接的属性窗口中查看"此连接使用下列项目"栏,该栏里大多为一些协议,如上网所需的&quo
  • 互联网产品设计的用户体验设计来自平凡生活 互联网产品设计的用户体验设计来自平凡生活 破洛洛文章简介:来自平凡生活的用户体验设计启示. 用户体验设计,来源自用户关怀,目的是产品和用户双赢. 用户,则是广大真实存在的人们,那么来源自生活的用户体验启发,对于虚拟产品的用户体验设计,具有极大的借鉴意义. 以下就是笔者在现实生活中发现的故事,并总结出了许多用户体验设计的原则. 1 坦途与上下楼 自从搬了新的办公区,倒咖啡就成了一件麻烦的事. 我们的办公区身处二楼,在二楼的另外一边有一个咖啡机,而在一楼正下方也有一个咖啡机. 最初不熟悉的时候,常常要在两个之间抉择,究竟去哪儿倒咖啡. 一楼
  • 摄影教程:初春时节风光摄影实战技巧 摄影教程:初春时节风光摄影实战技巧 初春时节,乍暖还寒,转瞬即逝的阳光是否让户外摄影活动都仿佛变得索然无味,甚至让你避之不及?这一次,Jeff Meyer以及我们的专家团奉上了初春时节的风光拍摄秘笈,想必能够为你重新燃起摄影热情! 就如同风光摄影本身一样,初春也同样是丰富多彩的,它所带来的并不仅仅是荒凉.的确,它的色彩不及盛春的艳丽,可供选择的拍摄地点不如夏天丰富,更缺乏秋天所拥有的活力.但是,它具有它独一无二的"性格":它是野性的.极端的,而且常常是令人出乎意料的. 在某些日子,它清澈明净,宛如银装素裹的仙境:但另一些
  • 恐怖黎明怎么看时间 显示时间操作方法 恐怖黎明怎么看时间 显示时间操作方法 在恐怖黎明的这一款游戏里面玩家们到底要怎么看时间?由于游戏中不会主动的显示时间,很多玩家不知点哪才能看时间,不用着急,今天小编就为大家带来了恐怖黎明显示时间操作方法,各位不会的玩家们,那么就快来跟着小编一起看看方法吧. 给各位恐怖黎明的玩家们来详细的解析分享一下显示时间的操作方法. 方法分享: 看时间把鼠标放到等级显示的数字上面的时钟上,会显示系统时间! 这个是即时时间,拿开就没了! 只要在时钟上点鼠标左键,就会一直显示时间了!再点一下,就消失了! 好了,以上的信息就是小编给各位恐怖黎明的这一款