К сожалению, на момент написания этого Fluent-ffmpeg по-прежнему не поддерживает настраиваемые сложные атрибуты FFMPEG, поэтому единственными решениями являются либо его разветвление, либо использование уродливых «взломов», которые побеждают основное назначение этой библиотеки (для большинства случаи).
Я использую Fluent-ffmpeg с этим «хаком» только в качестве аккуратной обертки для обработки нескольких сложных процессов FFMPEG с хорошим анализом вывода / ошибки / прогресса.
const fluent = require('fluent-ffmpeg');
const executeFfmpeg = args => {
let command = fluent().output(' '); // pass "Invalid output" validation
command._outputs[0].isFile = false; // disable adding "-y" argument
command._outputs[0].target = ""; // bypass "Unable to find a suitable output format for ' '"
command._global.get = () => { // append custom arguments
return typeof args === "string" ? args.split(' ') : args;
};
return command;
};
executeFfmpeg('-i input.mp4 -i input.mp3 -c copy -map 0:v:0 -map 1:a:0 output.mp4')
.on('start', commandLine => console.log('start', commandLine))
.on('codecData', codecData => console.log('codecData', codecData))
.on('error', error => console.log('error', error))
.on('stderr', stderr => console.log('stderr', stderr))
.run();
ПРИМЕЧАНИЕ: это решение не поддерживает событие 'progress', но вы можете легко это сделать, проанализировав событие 'stderr' с методом extractProgress из fluent-ffmpeg / lib / options. js