Как добавить фоновую музыку в видеофайл на определенную секунду видео?В node-fluent-ffmpeg - PullRequest
1 голос
/ 03 июня 2019

У меня 12-секундный файл audio.mp3 и video.mp4 имеет длину 60 с.

Мне нужно вставить audio.mp3 в 40-ю секунду видео.

Как это сделать с помощью node-fluent-ffmpeg?

1 Ответ

0 голосов
/ 25 июня 2019

Я живу в Украине и плохо знаю английский, вот как я это понял.Это асинхронные методы, которые можно добавить в класс, я думаю, вы поймете суть

// just variables
let cutesAudio = await this.cutAudio(audio, time, tempAudio);
let videoDuration = await this.getMediaDuration(video);
let mergeVideoAudio = await this.margeFiles(cutesAudio, video, tempVideo);
let cutMergeVideo = await this.cuteVideo(mergeVideoAudio, videoDuration, resultVideo);


 // cut audio from a specific time and get temp.mp3
 async cutAudio (audio, time, outputMp3) {
   return new Promise((resolve, reject) => {
      ffmpeg()
      .input(audio)
      .setStartTime(time)
      .output(outputMp3)
      .format('mp3')
      .on('end', () => {                    
          resolve(outputMp3);
      }).on('error', (_err) => {
        reject(_err);
      }).run();
   });
 }

 // get the video duration
 async getMediaDuration (file) {
   return new Promise((resolve, reject) => {
      ffmpeg.ffprobe(file, (_err, metadata) => {
        if (_err === null) {
          resolve(metadata.format.duration);
        } else {
          reject(_err);
        }
      });
   });
 } 


 // connect the cut off temp.mp3 and the video and get temp.mp4
 async margeFiles (audio, video, outputVideo) {
   return new Promise((resolve, reject) => {
      ffmpeg()
      .videoCodec('libx264')
      .format('mp4')
      .outputFormat('mp4')
      .input(audio)
      .input(video)
      .output(outputVideo)
      .on('end', () => {                    
          resolve(outputVideo);
      }).on('error', (_err) => {
          reject(_err);
      }).run();
   });
 }

 // we cut off the video we make it old length as the music can be longer.
 async cuteVideo (video, time, result) {
   return new Promise((resolve, reject) => {
      ffmpeg()
      .input(video)
      .setDuration(time)
      .format('mp4')
      .output(result)
      .on('end', () => {                    
          resolve(result);
      }).on('error', (_err) => {
        reject(_err);
      }).run();
   });
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...