Я использую библиотеки из npm -модуля, называемые ytdl-core и ffmpeg для NodeJS У меня есть 2 функции из этих модулей, одна для загрузки видео, а другая для получения аудио из видео Youtube. Обе функции являются асинхронными, но в моем алгоритме одна зависит от другой. Сначала я хочу загрузить аудио, а после того, как я хочу получить видео источника аудио, и я не хочу выполнять обе асинхронизированные, я хочу синхронизированную операцию
Это мой код:
var stream = app.ytdl(req.body.linkYoutube,{quality: 18});
//First, download audio
app.ffmpeg(stream)
.audioBitrate(128)
.save(`${__dirname}/music.mp3`)
.on('progress', (p) => {
app.readline.cursorTo(process.stdout, 0);
process.stdout.write(`${p.targetSize}kb downloaded`);
})
.on('end', () => {
res.status(200).download('./controllers/music.mp3');
});
//Second, download video of that audio
app.ytdl(req.body.linkYoutube, { filter : (format) =>
format.container === 'mp4' &&
format.qualityLabel ==='720p'// &&
// format.itag === 18
})
.pipe(app.fs.createWriteStream('video.mp4'));
Я знаю, что это не хорошо, но это хорошее упражнение для изучения асинхронизма, спасибо!