在 nodejs 中使用 sox 转换音频

Converting audio with sox in nodejs

我已经确保安装了 sox 运行所需的所有功能,并且我还安装了节点的 sox 包。然而,这似乎不起作用。

function encode(file, destination, quality) {
  return new Promise((resolve, reject) => {
    console.log(destination)

    let job = sox.transcode(file, destination, {
        sampleRate: 44100,
        format: 'mp3',
        bitRate: quality * 1024,
    })

    job.on('src', function(info) {
      console.log(info)
    });

    job.on('progress', (amountDone, amountTotal) => {
      console.log("progress", amountDone, amountTotal);
    });

    job.on('error', (err) => {
      reject('Could not transcode mp3.')
    })

    job.on('end', () => {
      resolve('mp3 transcoded.')
    })

    console.log(job)
  })
}

最后的console.log记录:

Transcode {
  domain: null,
  _events:
   { src: [Function],
     progress: [Function],
     error: [Function],
     end: [Function] },
  _eventsCount: 4,
  _maxListeners: undefined,
  inputFile: 'C:\Users\User\Documents\App\Media\media\uploads\audio/2016/269/1/0//10c746ef62374c6ab1f2ecfc36705618/original.mp3',
  outputFile: 'C:\Users\User\Documents\App\Media\media\uploads\audio/2016/269/1/0//10c746ef62374c6ab1f2ecfc36705618/128.mp3',
  options:
   { sampleRate: 44100,
     format: 'mp3',
     bitRate: 196608,
     channelCount: 2,
     compressionQuality: 5 } }

没有错误,所以我想知道这里是否有什么东西悄无声息地失败了。识别文件工作正常:

let original = (path + 'original.mp3')

sox.identify(original, function(err, info) {
 if (err) {
   console.log(err)
   throw(err)
 }
 if (info.format !== 'mp3') {
   throw('File must be mp3!')
 }
 console.log(info) // {format: 'mp3', ..}
});

上面的代码工作得很好。但是 sox.transcode 没有。

The example code 提到 job.start()(大概)启动转码作业。我没有看到你的代码中调用了它。