Ваша функция start
выглядит некорректно, потому что вам не хватает оператора async
.
Для ясности я предлагаю рассматривать это больше как файл C и создать async function main() {}
, где вы вызываете и await
ваши три функции.
В своей функции convertVideos
вы вызываете Promise.all()
, но не ждете этого. Обратите внимание, что Promise.all()
на самом деле тоже возвращает обещание, и вы должны его дождаться, но для того, чтобы вы его ожидали, окружающая функция также должна иметь ключевое слово async
. Я вижу ту же проблему в функции clearConverted
.
Попробуйте дождаться ваших вызовов Promise.all
и посмотрите, поможет ли это решить вашу проблему.
На самом деле ваша функция convertVideos
кажется завернуть все в обещание, и я не думаю, что вам это нужно. Попробуйте это:
function convertVideos() {
console.log('>>>Starting conversion!!!');
const promises = videos.map(
(video, index) => {
var command = `ffmpeg -i ${video} -c:v libx264 -vf scale=1920:1080 -r 60 -c:a aac -ar 48000 -b:a 160k -strict experimental -f mp4 ./converted/${index}.mp4`;
return new Promise((resolve) => {
exec(command, (error, stdout, stderr) => {
if (error) {
console.warn(error);
}
resolve(stdout ? stdout : stderr);
console.log('Converted video', index);
});
});
});
// Notice that you can return this promise from Promise.all.
// The caller can then await this promise that will let you know when
// all the videos are converted.
return Promise.all(promises);
}