Search code examples
javascriptnode.jsexpressffmpegchild-process

String is showing undefined


I am trying to create video using ffmpeg and returning its path to index.js but path is showing undefined.

index.js

app.get('/content/:myfact', async (req, res) => {
  let myfactdata = req.params.myfact;
  let myfact = myfactdata.replace("_", " ");
  const video = await generateVideo(myfact);
  console.log(video)
});

This is my contentVideo.js

const generateImage = require('./contentimage.js');
const { spawn } = require('child_process');

const generateVideo = async (myfact) => {
  await generateImage(myfact);
  const child = spawn('ffmpeg', [
    '-i', 'pictures/download/image.png', 'pictures/download/video.mp4'
  ]);
  child.on('close', function (code, signal) {
    const video = 'pictures/download/video.mp4'
    return video
  });
}

module.exports = generateVideo

Solution

  • Should be something like this:

    const generateVideo = async (myfact) => {
      await generateImage(myfact);
      const child = spawn('ffmpeg', [
        '-i', 'pictures/download/image.png', 'pictures/download/video.mp4'
      ]);
    
      return new Promise((resolve, reject) => {
        child.on('close', function (code, signal) {
          const video = 'pictures/download/video.mp4'
          resolve(video);
        });
    
        child.on('error', function(err){
          reject(err);
        });
      })
    }