如何同步执行ffmpeg命令?

How to execute ffmpeg commands synchronously?

我有一个视频处理 API,我想 运行 ffmpeg 命令同步,否则处理的文件会损坏。

到目前为止,我尝试了以下步骤:

var execute = (command) => {
  const ffmpeg = spawn("./bin/ffmpeg/ffmpeg", command);
  ffmpeg.stderr.on("data", (data) => {
    debug(data.toString());
  });

  ffmpeg.on("close", () => {
    console.log('DONE');
  });
};

var sourceFilePath = '/tmp/test.mp4';
var outputPath = '/tmp/test_processed.mp4';
var ss = 5;
var t = 10;

execute([
  "-i",
  sourceFilePath,
  "-ss",
  ss,
  "-t",
  t,
  outputPath,
]);

await uploadTos3(outputPath); // Helper function to upload processed file to s3

上传的文件无法使用。它已损坏。

注意: 当我尝试上传工作视频时,它正在工作。所以问题出在ffmpeg辅助函数上。

我认为您应该将 execute 函数转换为:

exports.execute = async (command) => {

  return new Promise((resolve, reject) => {
    const ffmpeg = spawn("./bin/ffmpeg/ffmpeg", command);
    ffmpeg.once('error',reject);
    ffmpeg.stderr.on("data", (data) => {
      debug(data.toString(); //I'm not sure what debug is
    });

    ffmpeg.on("exit", (code,signal) => {
      if(signal)
        code = signal;
      if(code != 0) {
        reject(new Error(`Returned exit code ${code}`);
        console.log('Error');
      }
      else {
        resolve(); // Call resolve here
        console.log('DONE');
      }
    });
  });
};
await execute([  // Call function with `await`
  "-i",
  sourceFilePath,
  "-ss",
  ss,
  "-t",
  t,
  outputPath,
]);