fluent-ffmpeg Как сделать рендеринг видео синхронным с кодом? - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу, чтобы код запускался только после того, как ffmpeg закончит рендеринг видео. В настоящее время код работает быстрее, чем видео может отображать.

videos.forEach((vid, i) => {
  ffmpeg(`${process.cwd()}/video/tmp/${vid}`)
  .outputOptions(['-r 30', '-filter:v scale=w=720:h=1280', '-crf 20'])
  .save(`${process.cwd()}/video/tmp/${vid}`)
  .on('end', ()=> console.log(`Video ${i} rendered`));
});
console.log("Fully Completed");

Консоль показывает:

Fully Completed
Video 0 rendered
Video 1 rendered

Выполнение должно быть противоположным. Как я могу заставить код ждать, пока видео закончится sh рендеринг, прежде чем продолжить?

1 Ответ

1 голос
/ 12 апреля 2020

код ниже поможет вам:

async function processVideos(){
    let videos = [vid1.mp4, vid2.mp4, vid3.mp4];
    for(vid of videos){
        await processVideoSync(vid)
    }
}
function processVideoSync(vid){
    return new Promise((resolve,reject)=>{
       ffmpeg(`${process.cwd()}/video/tmp/${vid}`)
       .outputOptions(['-r 30', '-filter:v scale=w=720:h=1280', '-crf 20'])
       .save(`${process.cwd()}/video/tmp/${vid}`)
       .on('end', ()=>{
          console.log(`Video ${i} rendered`)
          return resolve()
        })
        .on('err',(err)=>{
            return reject(err)
        })
    })
}

ol oop for of éo unico capaz de esperar o async await.

...