提问者:小点点

FFMPEG派生promise未解析


我遇到一个问题,使用事件的事件侦听器API运行可以正常工作,但当我尝试将转换为时,它无法解决问题。

这很好用

 const ls = spawn(ffmpeg_static.path,`-i movie.mov movie.mp4`.split(" ");

    //Listen for processing close
  ls.on("close", (code) => {
        console.log(`child process exited with code ${code}`);
        
     });

function pspawn(args) {
 
  // *** Return the promise
  return new Promise(function (resolve, reject) {
 
    const process = spawn(ffmpeg_static.path, args);
//Listen for close and resolve.
    process.on("close", function (code) {
    
      resolve("Complete");
    });
    process.on("error", function (err) {
       // *** Process creation failed
       reject(err);
    });
  });
}

... 

async function run () {
await pspawn(['-i', 'movie.mov','movie.mp4'])
}

我可能遗漏了一些简单的东西,但似乎不知道它是什么。


共1个答案

匿名用户

我有一种预感,您正在多次运行该进程,结果是已经创建了文件。

因此将询问是否可以覆盖该文件。这会导致您的进程冻结,并且不会从接收任何事件

因此,解决方案是简单地从先前的编码中删除文件,然后再次启动该过程。或者指定一个特殊的标志来覆盖输出文件。

指定标志以覆盖现有文件。所以你的电话如下。

await pspawn(['-y', '-i', 'movie.mov','movie.mp4'])

这应该有帮助。