本项目所使用的so库是VCamera,个人免费, 禁止商用,只用作demo演示

因为最近项目做了关于视频拍摄和视频处理的需求, 所以特来分享一下, 做了一个基于微信录制,  分析ffmpeg视频编辑的demo, 首先看下使用效果:

功能主要包含5点:1.基于ffmpeg的视频拍摄及合成;

2.自定义拍摄按钮, 长按放大并且显示拍摄进度;

3.自定义view, 实现手绘涂鸦;

4.自定义可触摸旋转缩放位移的表情文字view;

5.基于ffmpeg的图片和视频合成处理.

界面风格高仿微信, 只不过微信的编辑处理是作用于图片, 而我们的是基于视频, 所以如果你有需求, 把视频编辑处理换成图片编辑, 更是简单.

1.实现使用ffmpeg录制视频

首先导入lib库和ffmpeg的录制java文件, 我使用的是第三方VCamera封装的ffmpeg, 他没有jar包, 所以需要将con.yixia包下的所有文件都copy过来:

请注意! com.yixia的包名也要完整的copy过来, 要不然找不到so库, 会崩溃!

然后在application里面初始化VCamera:

这个时候, 你就可以在SurfaceView上看见拍摄预览界面了,

然后mMediaRecorder.startRecord()拍摄视频,

调用mMediaRecorder.stopRecord()停止录制视频,

因为拍摄出来的文件是ts视频流, 所以还要调用mMediaRecorder.startEncoding()开始合成MP4视频文件.

MediaRecorderBase类还可以设置视频各个参数, 如:

2.自定义拍摄按钮, 长按放大并且显示拍摄进度

自定义RecordedButton继承View, 在onDraw里分三部分绘制:

在拍摄模式下, 改变radius(半径), 达到放大或者缩小外圈和内圈圆的效果, 不断增加girth值达到显示拍摄进度的效果, 是不是很简单.

3.自定义view, 实现手绘涂鸦

自定义TuyaView继承View, 重写onTouch(), 在手指点下和移动时实时绘制触摸轨迹:

在手指按下时创建new Path()对象, 记录本次手指触摸移动轨迹, 并且实时调用invalidate() 达到不断调用onDraw()的目的, 然后使用canvas.drawPath(path,paint)绘制触摸路径, 是不是非常简单.

4.自定义可触摸旋转缩放位移的表情文字view

这个view稍微有点麻烦, 但我单独写了一篇文章(点我跳转), 非常详细的讲解了这个view, 而且封装的非常好, 只要addView到布局中就可以使用了, 大家可以点击链接过去看一下.

5.基于ffmpeg的图片和视频合成处理

这也是demo的最后一步, 将涂鸦,和表情文字全部合成到视频当中, 首先是得到需要合成的图片, 我们可以通过view.draw(Canvas canvas),得到布局的bitmap:

然后通过ffmpeg来执行图片和视频的合成, 具体语句是这样的:

ffmpeg -i videoPath -i imagePath -filter_complex overlay=0:0 -vcodec libx264 -profile:v baseline -preset ultrafast -b:v 3000k -g 25 -f mp4 outPath

我把参数讲解一下: videoPath代表你要编辑视频的路径

imagePath代表你要合成的图片路径

outPath是合成之后的输出视频路径

这些是我们需要替换的参数至于一些别的, 例如:

overlay=0:0表示图片坐标位置, 0:0表示x轴=0,y轴=0

-vcodec后面表示视频输出格式, 3000k码率, 25帧数, 总之ffmpeg的参数还有很多, 如果感兴趣可以去ffmpeg官网看命令大全.

向UtilityAdapter.FFmpegRun()里传入ffmpeg语句就可以执行了, 返回值 int , 如果等于0就是成功, 非0则是失败, FFmpegRun()方法的第一参数如果传入空字符串就是异步执行视频处理, 否则就是同步执行, 这点要注意.最后求一下关注, 源码下载,求点star(ps: 如果我分享的技术对您有所帮助, 或者解决了您的一些问题, 请点一下我喜欢和github上的star哦!!!github主页我会经常在上面分享我工作中遇到的问题和酷炫的特效实现的, 关注一下啦)

android仿微信拍摄视频教程,仿微信视频拍摄UI, 基于ffmpeg的视频录制编辑(上)相关推荐

  1. android微信视频查看源代码,Android仿微信视频拍摄UI, 基于ffmpeg的视频录制编辑

    功能主要包含5点: 1.基于ffmpeg的视频拍摄及合成; 2.自定义拍摄按钮, 长按放大并且显示拍摄进度; 3.自定义view, 实现手绘涂鸦; 4.自定义可触摸旋转缩放位移的表情文字view; 5 ...

  2. 【分享】性能比肩美拍秒拍的Android视频录制编辑特效解决方案【1】

    前言 本人接触Android的时间有限,如果您有更好的解决方案,欢迎吐槽. 众所周知,Android平台开发分为Java层和C++层,即Android SDK和Android NDK.常规产品功能只需 ...

  3. android基于ffmpeg本地视频、在线视频、直播播放器 支持rtmp、rtsp、http等协议

    最近做了一个支持onvif标准的摄像头管理程序,主要就是在局域网中通过程序控制摄像头获取摄像头视频流分发给广域网中的客户端设备:这里面用了onvif协议相关知识和ffmpeg视频流处理的相关知识. o ...

  4. android 基于ffmpeg将视频采集的nv21转h264格式数据

    准备工作 android studio 2.2以上 本项目是基于ndk 开发的项目,使用android studio + cmake进行开发 cmake配置详情可参考: http://www.jian ...

  5. 【分享】性能比肩美拍秒拍的Android视频录制编辑特效解决方案【2】

    上一篇文章是初步接触Andorid多媒体开发时,以使用纯开源的方式实现的基础效果,效率上有很大问题.经过半年多的继续学习,解决了其中部分有效率问题的地方. (1)编解码部分 编解码部分之前文章采用的X ...

  6. 微信开发实例视频教程-深入浅出微信公众平台实战开发

    微信开发视频教程-深入浅出微信公众平台实战开发(微网站.LBS云.Api接口调用.服务号高级接口) 一.微信开发实例视频教程总目录: 微信开发实例视频教程 讲师介绍: 易伟,现广东合桓律师事务所专职律 ...

  7. android短视频拍摄并上传,手机微视怎么玩?微视视频制作并上传的教程

    从下载微视app到顺利发布自己录制的小视频,一步两步,步步有图,亲自体验. 软件名称:腾讯微视 短视频分享软件 for android V8.10.2.588 安卓版软件大小:96.5MB更新时间:2 ...

  8. android安卓开发入门视频教程资料百度网盘下载

    android安卓开发入门视频教程资料讲解安卓核心基础,包含视频+笔记,适合新手入门学习. 百度网盘:https://pan.baidu.com/s/1uciMAAa97nm5RSLILtdPdg&a ...

  9. 最简单的基于FFmpeg的移动端例子附件:SDL Android HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

最新文章

  1. Android_设备隐私获取,忽略6.0权限管理
  2. 图像处理-STB图片读写
  3. 解题报告 B_station
  4. 计算机网络电缆是什么,插入Cat的计算机网络电缆和插入路由器的计算机的网络电缆有什么区别?...
  5. python中基础知识_Python中的一些基础知识
  6. 如何实现高性能的在线 PDF 预览
  7. U盘修复,U盘量产教程(以台电晶彩NCU,容量为32G的U盘为实例)by aser
  8. 简历在线制作计算机,简历在线生成,在线生成PDF或word格式简历
  9. 关于平面设计知识,设计师需要懂得印刷常识——黎乙丙
  10. 没有任何借口——提升职场能力的文章
  11. 计算机在线使用高级,2017高会《职称计算机》Internet应用:Internet高级选项
  12. 网工行业里的多面手,数据通信工程师2022年最新系统学习路线整理
  13. android连接打印机
  14. 再招一万人,太猛了。。。
  15. 《雍正皇帝》文化专有词泰译研究(选题缘由)
  16. 今日冬至《心的深处》孙溟㠭篆刻艺术
  17. 他一年开发19款!款款口碑爆棚
  18. Node.js结合wechaty实现个人微信机器人助手
  19. 华为交换机Hybrid接口
  20. Java的开发架构---浅谈

热门文章

  1. 微信小程序获取用户Ip地址
  2. sas和python哪个更容易发胖_碳水化合物和脂肪哪个更容易让身体发胖?
  3. 类型体操的9种类型运算、4种类型套路总结
  4. Hystrix php,详解 hystrix-go 使用与原理
  5. 词云中去重复的词_手把手教你挖掘蓝海词,打造爆款标题!
  6. 微信会不会封服务器ip,最新微信防封号设置技巧(新微信如何防止封号)
  7. wxpython中表格顶角怎么设置_46-wxpython 4 使用 grid 展示表格
  8. MybatisPlus QueryWrapper(简称 QW,MP 封装的一个查询条件构造器)的使用和简单认识
  9. matlab使用switch结构判断学生成绩的等级
  10. SQL 语句的类型和 用法