因此,我正在使用aws lambda函数,该函数下载一些文件并将它们连接在一起。我发现实际的ffmpeg命令超级快,最后一个240mb的文件大概6-10s。我的功能中最耗时的事情是将实际的最终结果视频保存到s3。我真的想尽可能地加快速度。
我当前的ffmpeg命令(节点上的Fluent-ffmpeg):
(f =多个已在本地下载的.ts文件的文本文件)
(temp_mp4 =临时mp4文件,该文件已保存在系统上,然后上传到s3)
ffmpeg()
.addInput(f)
.inputFormat('concat')
.addInputOptions([ '-safe 0', '-protocol_whitelist file' ])
.addOutputOptions([ '-y', '-codec copy' ])
.output(temp_mp4)
.on('error', (err) => {
console.error('ffmpeg err', err)
})
.on('end', () => {
resolve()
})
.run()
然后我上传到s3函数是:
function saveVideo (video, filename) {
const params = {
Bucket: '',
Key: filename,
Body: fs.createReadStream(video),
ACL: 'public-read'
}
return s3.putObject(params).promise()
}
根据确切的文件大小,这可能需要20-30秒,而ffmpeg命令为6-10秒。
我最好的想法是能够以某种方式直接将ffmpeg输出传递给s3,这可能吗?