У меня есть функция streamtogif () с ffmpeg, которая преобразует поток в gif и возвращает буфер. Это прекрасно работает, но здесь я использую busboy, и я получаю весь файл в качестве буфера. Наконец, я хотел бы передать это ffmpeg, чтобы обратиться к бывшему. MP4 в подарок. Вот мой код: streamtogif ():
function streamtogif(stream, begintime = 0, duration){ //Return promise buffer
return new Promise((resolve, reject)=>{
buffer = [] //prepare creation of the buffer for the gif
function addChunk(chunk){
this.buffer.push(chunk)
}
function getBuffer(cb){ //get buffer array
cb(this.buffer);
}
ffmpegstream = ffmpeg()
.outputOptions('-metadata', 'title=test')
.input(stream)
.fps(20)
.setStartTime(begintime)
.noAudio()
.videoCodec('gif')
.format('gif')
if(duration){ffmpegstream.duration(duration)} //only define duration if defined in function's parameters
ffmpegstream.on('start',()=>{
//console.log("starting")
this.buffer = []
})
.on('end', ()=>{
getBuffer((buff)=>{
finalBuffer = Buffer.concat(buff);
resolve(finalBuffer);
});
})
var ffstream = ffmpegstream.pipe(); //handle data
ffstream.on('data', function(chunk) {
addChunk(chunk);
})
ffmpegstream.run()
});
}
Код, использующий эту функцию: // я не помещаю все, но необходимо
finalBuffer = Buffer.concat(this.fileRead)
const bufferStream = new Stream.PassThrough();
bufferStream.end(finalBuffer);
streamtogif(bufferStream).then((buffer)=>{
upload = uploadpicture(buffer, "source/sportifeed").then((response)=>{ //success request
res.status(200).json({success: true, message: "Successfully uploaded !", url: response.data.link});
},(err)=>{ //error
console.log(err)
res.status(500).json({success: false, message: "Error happenned while uploading !"});
}).catch((err)=>{
console.log(err)
res.status(500).json({success: false, message: "Error happenned while uploading !"});
});
},(err)=>{
console.log(err);
})
Когда я передаю поток, поступающий из ytdl-core, например, все работает нормально, но в этом случае я получаю сообщение об ошибке:
Произошла ошибка: ffmpeg завершен с кодом 1: pipe: 0: при обработке ввода обнаружены неверные данные : ffmpeg завершен с кодом 1: pipe: 0: при обработке ввода обнаружены неверные данные
at ChildProcess.<anonymous> (C:\Users\famil\Desktop\sportifeed\node_modules\fluent-ffmpeg\lib\processor.js:182:22)
at ChildProcess.emit (events.js:198:13)
at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12) ffmpeg version N-92722-gf22fcd4483
Авторские права (c) 2000-2018 разработчики FFmpeg построили с помощью g cc 8.2.1 (G CC) 20181201
Когда я печатаю поток из функции streamtogif, я получаю это https://pastebin.com/NHmySWdm Это не кажется пустым
Спасибо за вашу помощь
Ps: я тоже пытался с bufferstream и пытался: https://gist.github.com/chris9753/86121a07c4aa27fcd654d16133799d30 Я пытался передать файл из busboy? Не сработало, буквально не подняло ошибку