You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ffmpeg生成视频后返回路径至index.js时显示undefined

问题:FFmpeg生成视频后返回路径显示undefined

我尝试用FFmpeg生成视频,将生成后的视频路径返回给index.js,但控制台打印的路径始终是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)
});

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

解决方案

问题核心是generateVideo的异步逻辑处理错误:

  • spawn是异步执行的,你在child.on('close')回调里的return,不会成为generateVideo函数的返回值
  • 原函数没有返回任何Promise,导致index.js里的await无法获取异步操作的结果,最终得到undefined

修改contentVideo.js,将spawn的异步逻辑包装为Promise,让函数返回这个Promise:

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

const generateVideo = async (myfact) => {
  await generateImage(myfact);
  
  return new Promise((resolve, reject) => {
    const child = spawn('ffmpeg', [
      '-i', 'pictures/download/image.png', 'pictures/download/video.mp4'
    ]);
    
    child.on('close', (code, signal) => {
      if (code === 0) {
        resolve('pictures/download/video.mp4');
      } else {
        reject(new Error(`FFmpeg执行失败,退出码:${code},信号:${signal}`));
      }
    });
    
    child.on('error', (err) => {
      reject(new Error(`启动FFmpeg失败:${err.message}`));
    });
  });
}

module.exports = generateVideo

修改说明

  1. 将FFmpeg调用逻辑包裹在Promise中,用resolve返回成功后的视频路径,reject抛出执行错误
  2. 增加错误处理:通过退出码判断FFmpeg是否执行成功,同时监听启动失败的error事件
  3. 函数直接返回Promise,确保index.js里的await能正确获取到视频路径

内容的提问来源于stack exchange,提问作者Satyam Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:10:53