fluent-ffmpeg получить данные кодека без указания вывода

Я использую модуль узла fluent-ffmpeg для получения данных кодека из файла. Он работает, если я даю вывод, но мне было интересно, есть ли возможность запустить fluent-ffmpeg, не давая ему вывода. Вот что я делаю:

readStream.end(new Buffer(file.buffer));
var process = new ffmpeg(readStream);

process.on('start', function() {
  console.log('Spawned ffmpeg');
}).on('codecData', function(data) {
  //get recording duration
  const duration = data.duration;
  console.log(duration)
}).save('temp.flac');

Как видите, я сохраняю файл в temp.flac, чтобы получить продолжительность этого файла в секундах.


person agonza1    schedule 13.02.2018    source источник


Ответы (2)


Если вы не хотите сохранять результат процесса ffmpeg в файл, на ум приходит одна вещь - перенаправить вывод команды на /dev/null.

Фактически, как сказал владелец репозитория fluent-ffmpeg в одном comment, при использовании формата null нет необходимости указывать реальное имя файла для места назначения.

Так, например, сработает что-то вроде этого:

let process = new ffmpeg(readStream);

process
  .addOption('-f', 'null')  // set format to null 
  .on('start', function() {
    console.log('Spawned ffmpeg');
  })
  .on('codecData', function(data) {
    //get recording duration
    let duration = data.duration;
    console.log(duration)
  })
  .output('nowhere')  // or '/dev/null' or something else
  .run()

Это остается немного хакерским, но мы должны установить вывод, чтобы избежать ошибки «Не указан вывод».

person TGrif    schedule 15.02.2018

Если аргумент потока отсутствует, метод pipe () возвращает поток PassThrough, который вы можете передать куда-нибудь еще (или просто прослушивать события).

var command = ffmpeg('/path/to/file.avi')
  .videoCodec('libx264')
  .audioCodec('libmp3lame')
  .size('320x240')
  .on('error', function(err) {
    console.log('An error occurred: ' + err.message);
  })
  .on('end', function() {
    console.log('Processing finished !');
  });

var ffstream = command.pipe();
ffstream.on('data', function(chunk) {
  console.log('ffmpeg just wrote ' + chunk.length + ' bytes');
});
person Hobai Riku    schedule 12.10.2018