Ffmpeg在AWS Lamda函数中返回错误代码1

时间:2018-04-12 13:12:45

标签: javascript node.js ffmpeg aws-lambda

我正在运行一个带有mp4视频的lambda函数,并在右下角的顶部添加png图像的水印(带10px边际)。然后它将该图像输出到临时位置。它始终与Error code 1失败,但这不是很有帮助。我正在使用代码主目录中指定的ffmpeg二进制版本。我知道ffmpeg是正确设置的,因为它以这种方式在另一个lambda函数中使用它,这是有效的。但是添加叠加失败了。这是我的代码的相关部分:

function addWatermark(next) {
    var ffmpeg = child_process.spawn("ffmpeg", [
      "-i", target, // url to stream from
      "-i", watermarkPath,
      "-filter_complex" ,"overlay=x=W-w-10:y=H-h-10:format=rgb,format=yuv420p",
      "-c:a", "copy",
      "pipe:1"
    ]);
    ffmpeg.on("error", function(err) {
      console.log(err);
    })
    ffmpeg.on("close", function(code) {
      if (code != 0 ) {
        console.log("child process exited with code " + code); // Always exits here.
      } else {
        console.log("Processing finished !");
      }
      tmpFile.end(); 
      next(code);
    });
    tmpFile.on("error", function(err) {
      console.log("stream err: ", err);
    });
    ffmpeg.on("end", function() {
      tmpFile.end();  
    })
    ffmpeg.stdout.pipe(tmpFile)
    .on("error", function(err){
      console.log("error while writing: ",err);
    });
}

有人能发现可能出错的地方吗?

更新

我设法打印出更多日志,我收到错误:

[NULL @ 0x42923e0] Unable to find a suitable output format for 'pipe:1'

1 个答案:

答案 0 :(得分:0)

您必须使用-f format选项告诉ffmpeg您想要输出的格式。运行ffmpeg -formats以获取支持的格式列表。

来自ffmpeg documentation

  

-f fmt(输入/输出)   强制输入或输出文件格式。通常会自动检测输入文件的格式,并从输出文件的文件扩展名中猜出格式,因此在大多数情况下不需要此选项。

例如,如果您希望输出为MPEG-4,那么您对ffmpeg的调用应如下所示:

   var ffmpeg = child_process.spawn("ffmpeg", [
     "-i", target, // url to stream from
     "-i", watermarkPath,
     "-filter_complex" ,"overlay=x=W-w-10:y=H-h-10:format=rgb,format=yuv420p",
     "-c:a", "copy",
     "-f", "m4v",
     "pipe:1"
   ]);