我已经使用react native和firebase在我的应用程序中成功地实现了视频共享,但我想确保存储的视频不超过1080x1080(可能是720,具体取决于它的外观(。
视频最长8秒,如果可能的话,我会尽最大努力将每个视频保持在5MB以下。我能够在客户端进行一些压缩(裁剪到方形/修剪(,但我希望能够通过云功能(存储触发器(在不损失质量的情况下对视频进行更多压缩。
环顾四周,Moviepy似乎是一个不错的选择,但它使用了python,我不确定如何在云功能存储触发器中使用此脚本。
以下是它的样子:
//Not sure how this will import
import moviepy.editor as mp
//Can I get the video here from the bucket path in a cloud function?
clip = mp.VideoFileClip("video-stored.mp4")
clip_resized = clip.resize(height=1080) # make the height 1080px ( According to moviePy documenation The width is then computed so that the width/height ratio is conserved.)
//resize video, then we need to store it in the same location (same file path)
clip_resized.write_videofile("video-stored-resized.mp4")
我很乐意听到一些关于通过云功能压缩视频的建议,以及关于将上述脚本/模块与云功能一起使用的想法。
目前,firebase函数不支持node.js以外的语言。因此,有两种解决方案。
-
如果您想继续使用moviepy。当在node.js中触发firebase存储时,编写一个部分来调用moviepy相关的api,并在任何首选环境中使用python api。(我想你应该使用gcp提供的pubsub来调用python api(
-
在node.js中编写所有部分node.js中也有一个很棒的模块叫做fluent ffmepg,但我知道用这个模块添加水印并不像moviepy那么容易…
顺便说一句,当我试图在firebase函数中组合vid时,可能是因为环境的限制,我没能做到。所以,我个人推荐第一个解决方案:这取决于你的情况,比如你的视频文件有多大。