我正在运行一个带有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'
答案 0 :(得分:0)
您必须使用-f format
选项告诉ffmpeg您想要输出的格式。运行ffmpeg -formats
以获取支持的格式列表。
-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"
]);