簡體   English   中英

fluent-ffmpeg獲取編解碼器數據而不指定輸出

[英]fluent-ffmpeg get codec data without specifying output

我正在使用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以便獲取該文件的秒數持續時間。

如果您不想將ffmpeg進程結果保存到文件中,那么想到的一件事情就是將命令輸出重定向到/dev/null

實際上,正如fluent-ffmpeg存儲庫的所有者在一條評論中所述,使用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()

它仍然有些古怪,但是我們必須設置輸出以避免“未指定輸出”錯誤。

如果不存在流參數,則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');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM