使用node fluent-ffmpeg将图像转换为视频

时间:2017-06-08 13:42:41

标签: node.js video ffmpeg fluent-ffmpeg

我为此找到了很多样品,但没有一个适合我。

我有几张图片。 URL,Base64s或Buffers。

我需要将它们转换为视频,而不会改变质量。

我最接近的是这个命令:
ffmpeg -framerate 1 pattern_type glob -i 'images/*.jpg' -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

但它每秒显示1张图像。我需要视频为30fps,而不是1帧30帧,而是一秒钟30张图像。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

我最终使用了另一个包 - ffmpeg-stream

我从AWS获取图片,因此下面有一些AWS代码:

const frames = ['frame1.jpg', 'frame2.jpg', ...]

const conv = ffmpeg() // create converter
const input = conv.input({f: 'image2pipe', r: 30}) // create input writable stream
conv.output('out.mp4', {vcodec: 'libx264', pix_fmt: 'yuv420p'}) // output to file

// for every frame create a function that returns a promise
frames.map(filename => () =>
  new Promise((fulfill, reject) =>
    s3
      .getObject({Bucket: '...', Key: filename})
      .createReadStream()
      .on('end', fulfill) // fulfill promise on frame end
      .on('error', reject) // reject promise on error
      .pipe(input, {end: false}) // pipe to converter, but don't end the input yet
  )
)
// reduce into a single promise, run sequentially
.reduce((prev, next) => prev.then(next), Promise.resolve())
// end converter input
.then(() => input.end())

conv.run()

以下是我在github repo上发布的问题: https://github.com/phaux/node-ffmpeg-stream/issues/5