Я использую ffmpeg без использования fluent-ffmpeg.Я использую '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 (точка входа по умолчанию в узле).И запускаем это с узлом. , который успешно копирует vid1 в vid3.
Теперь я хочу сделать водяные знаки для данного видео.Для этого я использую этот учебник .В настоящее время ссылка на само учебное пособие не работает, вы можете увидеть ее здесь .
Это команда, которую я использую
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');
и я получаю сообщение об ошибке:
Нет такого фильтра: '"overlay" Ошибка инициализации сложных фильтров. Неверный аргумент
/ Users / neerpatel / Desktop / testProjects / childProcess / index.js: 7 ошибок выброса; ^
Ошибка: команда не выполнена: ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay = 10: 10 "output.mp4
Вы можете ясно видеть, что та же команда, которая запускается непосредственно в терминале, не работает, когда я передаю ее в дочерний процесс. Почему это происходит?
Более того, я хотел добавить тег 'watermarking', но не могу создать тег, поскольку моя репутация ниже 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');