android+高仿视频录制,高仿微信视频录制, 涂鸦水印添加, 基于 ffmpeg 视频编辑

功能主要包含5点:

1.基于ffmpeg的视频拍摄及合成;

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

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

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

5.基于ffmpeg的图片和视频合成处理.复制代码

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

1.实现使用ffmpeg录制视频

1f027ed344d81ff5782cc0a8ebef4fde.png

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

6a537c5897869cfe34f01a12ef0ecabd.png

然后在application里面初始化VCamera:

f2ed0fb36fe4522c98022c9471970d39.png

53cbf5f4513b17fe4e965691d2005c18.png

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

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

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

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

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

a9a1759a84fb35cebc673a3084b33a06.png

2.自定义拍摄按钮,

长按放大并且显示拍摄进度

ccf0eb691fffb2e6620669c5ce7ea08b.png

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

eb9b3a44105ff605fb40208a03ab3468.png

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

3.自定义view,

实现手绘涂鸦

ab65ebcd10d17530ab37d77562f79b66.png

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

25e9af3700b8d7939d1b59e6d8f06c9b.png

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

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

a347e90cd91b84f5401a23d838d53275.png

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

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

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

15356331c6869269cae622029d4d42bf.png

然后通过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官网看命令大全.

60808593f50d9cba0d9143621aa8309a.png

向UtilityAdapter.FFmpegRun()里传入ffmpeg语句就可以执行了, 返回值 int , 如果等于0就是成功, 非0则是失败, FFmpegRun()方法的第一参数如果传入空字符串就是异步执行视频处理, 否则就是同步执行, 这点要注意.

如果这篇文章对大家有所帮助,

希望可以点一下star哦, 我会经常在上面分享我工作中遇到的问题和酷炫的特效实现.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中的FFmpeg库提供了强大的功能,可以用来实现行车记录仪的视频录制功能。 首先,我们需要在Android项目中集成FFmpeg库。可以通过在build.gradle文件中添加FFmpeg库的依赖来实现。然后,在代码中使用JNI来调用FFmpeg库的相关功能。 接下来,我们需要实现视频录制的逻辑。首先,要初始化音视频的采集参数,包括视频帧率、分辨率、音频采样率等。然后,通过Android的Camera API来获取相机实例,并设置预览参数。接着,通过FFmpeg来编码音视频数据,并将编码后的数据写入到视频文件中。 在录制过程中,我们可以通过Android的传感器API获取设备的加速度、方向等信息,以及通过GPS模块获取位置信息,并将这些信息写入到视频文件的metadata中。 另外,为了提高录制的实时性和稳定性,我们可以使用多线程技术来实现数据的采集、编码和写入操作,并使用缓冲队列来平衡不同线程之间的数据传输。此外,也可以通过设置合理的编码参数,如码率、GOP等来控制视频文件的质量和大小。 最后,当需要停止录制时,我们只需要释放相机资源,并关闭FFmpeg的编码和写入操作,最终生成的视频文件就是我们所期望的行车记录仪视频。 综上所述,通过Android中的FFmpeg库,我们可以实现行车记录仪的视频录制功能,并将视频、音频数据以及其他相关信息进行编码和写入。这样,我们就可以轻松实现行车记录仪这种实用的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值