使用NodeJS

时间:2017-10-24 13:07:18

标签: node.js video ffmpeg

我有一个部署在AWS上的无服务器网络应用程序,我必须从上传的视频截取屏幕截图到S3。我使用ffmpeg来提取屏幕截图,但唯一的缺点是我必须先下载视频文件才能让ffmpeg使用它。
知道我正在使用AWS Lambda并且我没有视频长度限制的用户可能会上传大文件,这会使AWS Lambda达到存储限制。
为了解决这个问题,我考虑下载一小部分视频并与ffmpeg一起使用来提取缩略图,因此使用带有范围参数的S3.getOjbect方法我可以下载文件的一部分但{ {1}}无法理解 这是我的代码:

ffmpeg

提取缩略图的代码:

s3.getObject({
  Bucket: bucketName,
  Key: key,
  Range: 'bytes=0-1048576'
}, (err, data) => {
  fs.writeFile(fileName, data.Body, error => {
    if (error)
      console.log(error)
    else
      console.log('File saved');
  })
})

我从const ffmpeg = require('fluent-ffmpeg'); new ffmpeg(fileName).screenshots({ timestamps: [0], filename: 'thumb.png', folder: '.' })

收到此错误
ffmpeg

我知道保存这样的文件存在问题,但我找不到解决问题的任何解决方案。如果有人会非常感激。

更新
事实证明,Error: ffmpeg exited with code 1: ./test.mp4: Invalid data found when processing input 为我做了这个,我只是给它ffmpeg并且它下载了渲染截图所需的内容,而无需在本地下载文件,代码如下所示: / p>

url

1 个答案:

答案 0 :(得分:0)

要做到这一点,你需要了解mp4的格式,并确保你获取足够的数据沿着框架边界排列,然后改变任何标题,以便ffmpeg可以理解部分数据并且不认为它只是有一个损坏的文件。

当您进入AWS生态系统时,您可以尝试使用Elastic Transcode对视频进行转码并要求其生成缩略图吗?

http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/preset-settings.html#preset-settings-thumbnails