fluent-ffmpeg将音频块转换为mp3并将它们附加到mp3文件中

时间:2016-10-14 06:09:20

标签: node.js stream buffer fs fluent-ffmpeg

什么?

将附加的写入流fs.createWriteStream(filePath, { flags: 'a' })作为输出传递似乎不起作用。

我试图运行的代码

const stream = require('stream');
let bufferReadStream = new stream.PassThrough();
bufferReadStream.end(Buffer.concat(largeChunk));

ffmpeg(bufferReadStream)
.format('mp3')
.output(fs.createWriteStream(filePath, { flags: 'a' }))
.on('end', () => {
  console.log('formatting finished!');
})
.on('error', err => {
  console.log('format buffer error: ', err);
})
.run();

我期望发生什么以及实际发生了什么

我正在将音频流(.webm)上传到节点,该节点被接受为缓冲区数组。我试图避免将非常大的音频文件保存到磁盘,然后将其格式化为.mp3文件,因为大型音频文件的等待时间。

我尝试了一个音频文件的块并直接将它们转换为mp3并将它们附加到mp3文件中。代码第一次成功运行,创建了一个mp3文件,但是在第二次之后,它会抛出错误而不是将其附加到现有的mp3文件中。

format buffer error:  
Error: ffmpeg exited with code 1: pipe:0: Invalid data found when processing input

at ChildProcess.<anonymous> (/Users/inspiredtolive/Desktop/HackReactor/Picky-Notes/node_modules/fluent-ffmpeg/lib/processor.js:177:22)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)

1 个答案:

答案 0 :(得分:0)

不要制作/使用截断的文件。而是将请求上传流本身传递给您拥有的ffmpeg。您可以使用具有Stream支持的var arr = [{ "name": "Marine Lines", "location_id": 3 }, { "name": "Ghatkopar", "location_id": 2 }]; var res = []; for ({location_id} of arr) {res.push(location_id)}; console.log(res);模块之类的东西。顺便说一下你遗漏的其他代码,比如文件上传细节,以及ffmpeg来自哪个模块/它是如何被引入的,这很重要。