在 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()
(大概)启动转码作业。我没有看到你的代码中调用了它。
我已经确保安装了 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()
(大概)启动转码作业。我没有看到你的代码中调用了它。