视频转gif(三):使用uniapp uniCloud开发了一个视频转GIF小程序,踩坑过程和最终实现思路

使用uniapp uniCloud开发了一个视频转GIF小程序。

分享一下开发过程中遇到的坑

刚开始想要做这个小程序是因为,有时自己拍的一些视频,想转成GIF动图,但是发现安卓市场和小程序里找到的转GIF工具很多都有次数限制,或需要付费。

预示我就想自己实现一个这样的小程序可以自己用,也可以分享给他人免费试用。刚开始觉得这个其实也很简单,应该可以很快搞定,但是没想到,遇到了不少的坑。下面我就来分享一下我遇到的坑,希望对看到文章的有所帮助。

刚开始,我网上收到的方案是使用canvas将视频转为GIF
思路是这样的:首先使用canvas的drawImage(video)+setInterval按间隔毫秒来截取视频画面,将截取的图保存到临时目录,最后使用gif.js将截图转成GIF。
这个方案在浏览器里实现是可行的,但是gif.js,内使用的是DOM操作,小程序里没法使用。

之后,找到一个对转GIF库进行小程序改在的库gifshotjs-miniprogram,预示又切换到这个库,然后再小程序里实现同样的功能。但是效果很不理想,因为这种库在小程序段使用时一方面需要使用’workrer’,另一方面小程序中canvas读取视频截图时,读取图片像素数据后使用gifshot转换这一步非常的慢,我一个5s的视频在浏览器转换几秒就好了,但是小程序里十几分钟都不一定成功。我在这部卡了很久,都没知道到合适的优化方案,预示放弃。

最后决定还是使用后端进行转换。

node 转GIF

方案一:
使用node-canvas在后端直接将视频截取并转换为gif,本地测试时OK的,但是放到Hbuilder开发的小程序里就报错了,原因是uniCloud,云端上传云函数的依赖,不支持为进制打包的依赖,而这个node-canvas是c++开发的二进制包,因此又不能使用

方案二:gif-encoder

最后,只能找到node端转gif的包gif-encoder(注意不是gifencoder,这个实测转换后问题)。
使用这个包的思路是:

  1. 先在小程序端使用canvas读取视频数据画面截图,将截图转为base64数据保存在变量中。
  2. 第二步:将base64数组使用jsZip包将他压缩成zip文件,上传到云存储,
  3. 第三步:调用uniCloud云函数是,云函数接受参数,将zip下载到本地,保存到临时mP目录,对其进行解压,
  4. 解压后,使用get-pixels包读取图片像素数据,拿到像素数据之后,就可以使用gif-encoder对其进行转换。
  5. 最后想转换后的GIFbuffer return到小程序前端展示,和保存到本地。

这里分享了使用uniCloud实现小程序视频转GIF的思路,和开发过程中遇到的坑,相关代码已在另外两篇文章中有分享,有需要的可以点击链接去查看:
视频转gif(一):前端(小程序)实现截取视频画面图片
视频转gif(二):后端,云函数nodejs实现多图转gif

也欢迎,扫码体验一下,如有使用问题可以联系我(目前小程序云服务器未续费,导致无法正常使用20231218)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝with黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值