Как я могу выполнить пользовательскую строковую команду ffmpeg с помощью fluent-ffmpeg - PullRequest
2 голосов
/ 18 января 2020

Как передать пользовательскую команду в fluent-ffmpeg (https://www.npmjs.com/package/fluent-ffmpeg/v/1.7.0)? Я просто хочу передать командную строку. Что-то вроде

var command = FFmpeg("ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:v:0 -map 1:a:0 output.mp4")

Я видел приведенные примеры, но кажется, что ffmpeg требуется знание того, что такое файлер, код c et c ...

Ответы [ 3 ]

0 голосов
/ 05 апреля 2020

Вам просто нужно передать его в метод outputOptions.

const ffmpeg = require('fluent-ffmpeg');

ffmpeg()
  .input('input.mp4')
  .input('input.mp3')
  .outputOptions('-c copy -map 0:v:0 -map 1:a:0')
  .save('output.mp4');
0 голосов
/ 12 апреля 2020

Вам нужен код ниже:

const ffmpeg = require('child_process').exec

ffmpeg("ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:v:0 -map 1:a:0 output.mp4")
0 голосов
/ 24 января 2020

К сожалению, на момент написания этого 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

...