我正在尝试使用以下方法通过 sox 合并 mp3 文件:
sox in.mp3 in2.mp3 out.mp3
我得到:
sox FAIL sox: Input files must have the same sample-rate
尝试了该-m
选项,但我猜这是默认选项。
我也尝试通过 ffmpeg 执行此操作,如下所示:
printf "file '%s'\n" ./*.mp3 > mylist.txt && ffmpeg -sn -f concat -safe 0 -i mylist.txt -acodec copy output.mp3
但输出文件output.mp3
有点问题,它只播放第一首歌曲而不播放其他歌曲 :(
有一个优雅的解决方案吗?
任何帮助都将非常有帮助。
答案1
您将必须重新采样受影响的文件,这意味着至少对其中一些文件进行重新编码。
例如,重新采样为 44.1 kHz:
ffmpeg -i in.mp3 -ar 44100 out.mp3
不要忘记设置适当的编码器和比特率或 VBR。
答案2
您可以使用袜子工具:
sox fileSource -r 48000 fileDestination
或者使用ffmpeg:
ffmpeg -i fileSource -ar 48000 fileDestination
如果你正在使用Node.js 库你可以使用这个功能
var child_process = require('child_process');
function convertFileSampleRate(file, rate, destination, callback){
// using sox:
let command = 'sox' +
' ' + file +
' ' + '-r' +
' ' + rate +
' ' + destination;
// or using ffmpeg: ffmpeg -i file -ar 44100 destination
child_process.exec(command, function (err, stdout, stderr) {
if (err) {
console.log("error " + err);
if (callback) {
callback(false);
}
return;
}
if (callback) {
callback(true);
}
});
}