我正在使用 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",并将其作为参数传递,它的工作方式就像魅力一样。
谢谢马立克弗。
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,而不使用fluid-ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50351142/