Благодаря комментариям и некоторым исследованиям я смог что-то собрать:
Необходимо настроить Redis, чтобы он выводил буферы, а не строки
return_buffers: true
Чтобы объединить изображения, сохраненные как отдельные буферы, я делаю
let allFramesTogether = Buffer.concat(frames)
ffmpeg может быть запущен как дочерний процесс, используя spawn, в то время как -f
должен быть установлен на image2pipe
и -i
на -
, поэтому изображения могут передаваться по конвейеру
const ffmpeg = spawn('ffmpeg', [
'-r',
`${FPS}`,
'-f',
'image2pipe',
'-s',
`${dimensions.width}x${dimensions.height}`,
'-i',
'-',
'-vcodec',
'libx264',
'-crf',
'25',
'-pix_fmt',
'yuv420p',
'test.mp4'
])
Чтобы наконец передать изображения, я делаю ffmpeg.stdin.write(allFramesTogether)
сразу после кода выше, затем ffmpeg.stdin.end()