
如果你还没有看过前面的文章,你可以先看一下仿微信视频拍摄UI以及基于ffmpeg的视频录制和编辑(第1部分),这将有助于你更好地理解这篇文章。
新增4个功能:
1、分段视频拍摄、多段视频合成、视频片段可删除;
2.更改视频速度(加速或减速);
3、模仿微信裁剪图片控件,自定义View实现功能;
4、裁剪视频宽度和高度;
1.分段视频拍摄、多分段视频合成、视频分段可删除:
如图所示,实现起来其实非常简单。 之前拍摄单个视频的逻辑就是将采集到的ts文件转成mp4。 这次的变化是,每次用户点击拍摄时,都会生成一个ts文件,然后将多个ts文件合成为一个mp4,所需的所有逻辑就是改变ffmpeg语句:
ffmpeg -i "concat:ts0.ts|ts1.ts|ts2.ts|ts3.ts" -c 复制 -bsf:a aac_adtstoasc out2.mp4
那么我们需要改进RecordedButton,需要画一段(也就是外面蓝圈里的小白点)来提醒用户:
当点击删除视频段落按钮时,当前段落应该被绘制为红色以提醒用户,只有当用户再次点击时才会删除当前段落。
2. 您可以更改视频速度(加速或减速):
这同样简单。 执行ffmpeg语句,传入源视频目录,调整视频速度。 但需要注意的是,视频倍增器最小为 0.5(播放速度减慢一倍),最大为 2(播放速度加快 1 倍)。 当超出范围后,编译会失败,返回值i=1。
3、模仿微信裁剪图片控件,自定义View实现功能:
首先是绘制整个矩形(因为我没有剪切图,所以只能自己一步步画出来,有条件的话可以向UI要剪切图,这样更容易):
分为两部分来画,显示出矩形的外圆,然后是4条线和4个加粗的角。 画图的过程很无聊。 它只是根据位置计算坐标。 这很简单。 如果想了解更多可以自己阅读源码。 。
接下来是最重要的onTouchEvent事件。 当手指按下时,检测手指位置来决定是否缩放框或拖动框:
在 ACTION_MOVE 事件期间:
这样就达到了手势控制缩放的效果。 最后,通过调用getCutArr(),可以获得裁剪后的边距值:
4.裁剪视频宽度和高度:
这里有几个参数。 x 和 y 是裁剪坐标的起点。 cropHeight 和cropWidth 是您要裁剪的长度和宽度。 这里需要注意的是x+cropWidth需要是