sox 和 ffmpeg 结合 mp3 失败‘输入文件必须具有相同的采样率’

sox 和 ffmpeg 结合 mp3 失败‘输入文件必须具有相同的采样率’

我正在尝试使用以下方法通过 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);
            }
        });

    }

相关内容