gpt4 book ai didi

node.js - 在 Node 中使用 ffmpeg,而不使用 fluent-ffmpeg

转载 作者:行者123 更新时间:2023-12-04 22:59:34 25 4
gpt4 key购买 nike

我正在使用 ffmpeg 而不使用 fluent-ffmpeg。我正在使用 Node 中的“child_process”。

首先,我验证了如何将多个参数传递给子进程命令。我在下面的代码中验证了它。

我使用了这样的复制命令

cp vid1.mp4 vid2.mp4



成功将 vid1 复制到 vid2 中。
const execFile = require('child_process').execFile;
const child = execFile('cp', ['vid1.mp4', 'vid3.mp4'], (error, stdout, stderr) => {
if (error) {
console.error('stderr: =============================', stderr);
throw error;
}
console.log('stdout: ==========================', stdout);
});

console.log('here');

上面的代码是'index.js'( Node 中的默认入口点)的内容。并使用 运行它 Node 。 ,成功将 vid1 复制到 vid3 中。

现在,我想为给定的视频添加水印。为此,我正在使用 tutorial .目前实际教程链接失效,可以查看 here .

这是我正在使用的命令
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4

现在我正在使用这样的相同命令,
const execFile = require('child_process').execFile;

const child = execFile('ffmpeg', ['-i', 'input.mp4' , '-i' , 'logo.png' , '-filter_complex' , '"overlay=10:10"' , 'output.mp4' ], (error, stdout, stderr) => {
if (error) {
console.error('stderr: =============================', stderr);
throw error;
}
console.log('stdout: ==========================', stdout);
});

console.log('here');

我得到一个错误,那个,

No such filter: '"overlay' Error initializing complex filters. Invalid argument

/Users/neerpatel/Desktop/testProjects/childProcess/index.js:7 throw error; ^

Error: Command failed: ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4



您可以清楚地看到直接在终端中运行的相同命令,当我在子进程中传递它时不起作用。为什么会这样?

此外,我想添加标签“水印”,但我无法创建标签,因为我的声誉低于 1500。请有人这样做。

更新 :
我使用了 EXEC ,而不是 execFile 。它就像魅力一样工作,但父文件一直在等待子进程。子进程永远不会返回 END 信号。这是我的代码。
const exec = require('child_process').exec;

const child = exec('ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4', (error, stdout, stderr) => {
if (error) {
console.error('stderr: =============================', stderr);
throw error;
}
console.log('stdout: ==========================', stdout);
});

console.log('here');

最佳答案

终于找到解决办法了
正如 marekful 建议的那样,问题出在 "overlay=10:10"字符串中,

所以我拿了另一个变量 str = "overlay=10:10",并将其作为参数传递,它就像魅力一样工作。

谢谢Marekful。

const execFile = require('child_process').execFile;
const str = "overlay=10:10";
const child = execFile('ffmpeg', ['-i', 'input.mp4' , '-i' , 'logo.png' , '-filter_complex' , str , 'output.mp4' ], (error, stdout, stderr) => {
if (error) {
console.error('stderr: =============================', stderr);
throw error;
}
console.log('stdout: ==========================', stdout);
});

console.log('here');

关于node.js - 在 Node 中使用 ffmpeg,而不使用 fluent-ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50351142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com