3

我正在使用 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以便获得该文件的秒数。

4

2 回答 2

4

如果您不想将ffmpeg进程结果保存到文件中,那么想到的一件事是将命令输出重定向到/dev/null.

事实上,正如fluent-ffmpeg存储库的所有者在一篇评论null中所说,使用format时无需为目标指定真实的文件名。

因此,例如,类似的事情会起作用:

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()

它仍然有点老套,但我们必须设置一个输出以避免“未指定输出”错误。

于 2018-02-15T14:01:37.690 回答
0

当没有流参数存在时, 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');
});
于 2018-10-12T07:31:22.893 回答