根据Firebase云计算功能文档,您可以在云计算功能中利用ImageMagick:https://firebase.google.com/docs/functions/use-cases
是否有可能做类似的事情,但呼吁FFMPEG而不是ImageMagick?虽然缩略图像非常棒,但我还希望能够将传入的图像附加到存储在Firebase存储上的视频文件中。
答案 0 :(得分:27)
ffmpeg
未预装(几乎只是ImageMagick);要查看确切安装的内容,请在此处查看Dockerfile:https://github.com/GoogleCloudPlatform/nodejs-docker/blob/master/runtime-image/Dockerfile。
但是,您可以在使用gcloud beta functions deploy
上传代码时上传任意二进制文件,因为当前目录中的所有内容(node_modules
除外)都已上传。
注意:您只有/tmp/
的磁盘写入权限。
ffmpeg-static
是一个npm模块,它在npm install
期间根据当前系统构建正确的ffmpeg二进制文件。由于Cloud Functions在云中构建代码,因此它将构建正确的ffmpeg二进制文件。
https://github.com/eugeneware/ffmpeg-static
您可以在Cloud Functions for Firebase examples repo中看到它。
const ffmpeg = require('fluent-ffmpeg');
const ffmpeg_static = require('ffmpeg-static');
var cmd = ffmpeg('/tmp/video.avi')
.setFfmpegPath(ffmpeg_static.path)
.videoBitrate(1024)
.videoCodec('divx')
.format('avi')
.on('end', () => {
// ...
})
.on('error', err => {
console.error(err);
})
.save('/tmp/file-out.avi');
(感谢Daniel Lessa在his answer中指出这个模块。)
您可以在上传过程中包含ffmpeg二进制文件,然后使用child_process.exec
之类的内容运行shell命令。您需要为目标平台(Debian / jessie)编译的ffmpeg二进制文件。
./
../
index.js
ffmpeg
然后运行例如gcloud beta functions deploy myFunc --trigger-http
var exec = require('child_process').exec;
var cmd = 'ffmpeg -i /tmp/myvideo.mp4 /tmp/image-%d.jpg';
exec(cmd, function(error, stdout, stderr) {
// command output is in stdout
});
答案 1 :(得分:5)
使用lib https://github.com/eugeneware/ffmpeg-static
const ffmpeg = require('fluent-ffmpeg');
const ffmpeg_static = require('ffmpeg-static');
let cmd = ffmpeg.('filePath.mp4')
.setFfmpegPath(ffmpeg_static.path)
.setInputFormat('mp4')
.output('outputPath.mp4')
...
...
.run()
答案 2 :(得分:3)
虽然您在技术上可以在Firebase Functions实例上运行FFMPEG,但您将很快达到小配额限制。
根据this answer,您可以使用函数来触发对GCP更强大的App Engine或计算引擎服务的请求。 App Engine进程可以从同一个存储桶中获取文件,处理转码,并将完成的文件上传回存储桶。如果您在链接中查看其他答案,则会有一位用户发布了一个样本仓库。
答案 3 :(得分:3)
ffmpeg
现在包含在Cloud Functions环境中,因此可以直接使用:
spawn(
'ffmpeg',
['-i', 'video.mp4']
)
已安装软件包的完整列表:https://cloud.google.com/functions/docs/reference/nodejs-system-packages
答案 4 :(得分:0)
据我所知,ffmpeg没有预先安装在容器上。
当我需要转码媒体时,我查看了emscripten cross-compiled version of ffmpeg。它似乎在本地节点环境中工作正常,但我从来没有开始部署它(因为我们根本不需要转码)。
答案 5 :(得分:0)
DELETE FROM Table1 where Name IN (select Name from Table2 group by [Name] having count(Name)>=40)
https://github.com/firebase/functions-samples/blob/master/ffmpeg-convert-audio/functions/index.js
答案 6 :(得分:0)
实际上,不。 FFMPEG处理通常超过Cloud Functions quotas(上传10MB)的音频/视频文件。