gpt4 book ai didi

audio - Sox:连接多个音频文件,中间没有间隙

转载 作者:行者123 更新时间:2023-12-02 11:35:56 25 4
gpt4 key购买 nike

我正在使用 SoX 连接多个(最多 25 个)音频文件与

sox first.mp3 second.mp3 third.mp3 result.mp3

它做了它应该做的事情;将给定文件连接到一个文件中。但不幸的是,result.mp3 中的这些文件之间存在很小的时间间隔。有没有办法消除这个差距?

我正在创建first.mp3、second.mp3等,然后通过合并多个音频(相同的长度/格式/速率)来连接它们:

sox -m drums.mp3 bass.mp3 guitar.mp3 first.mp3

如何检查并确保所有这些文件都没有添加时间间隙? (合并并连接)

我需要实现所有串联文件的无缝播放(在浏览器中依次播放它们时可以正常工作)。

感谢您的帮助。

编辑:

我现在运行的命令的确切示例(没有真实的文件名)是:

sox "|sox -m file1.mp3 file2.mp3 file3.mp3 file4.mp3 -p" "|sox -m file1.mp3 file6.mp3 file7.mp3 -p" "|sox -m file5.mp3 file6.mp3 file4.mp3 -p" "|sox -m file0.mp3 file2.mp3 file9.mp3 -p" "|sox -m file1.mp3 file15.mp3 file4.mp3 -p" result.mp3

这会合并文件并将它们直接通过管道传输到串联命令中。生成的 mp3 (result.mp3) 在连接的文件之间有非常轻微的延迟。任何想法都非常感激。

最佳答案

最好的(尽管最无用的)方法是不要使用 MP3 文件作为源文件。 WAV、FLAC 或 M4A 文件不存在此问题。

MP3 并非由固定速率样本组成,因此裁剪出任意长度的部分将无法按您的预期工作。除非编码器很智能(如跛脚),否则 MP3 文件音频的开头或结尾处通常会出现间隙。我用 0.98 秒长的样本进行了测试(恰好是 73½ CDDA 帧,许多 MP3 编码器使用帧作为最小样本长度)。然后,我使用三种不同的 MP3 编码器(lame、sox 和古老的 shine)对样本进行编码,然后使用三种解码器(lame、sox 和 madplay)对这些文件进行解码。以下是样本长度与原始长度的比较:

 Enc.→Dec.          Length     Samples  CDDA Frames
----------------- --------- ------- -----------
shine→lame 0.95" 42095 71.5901
shine→madplay 0.97" 42624 72.4898
shine→sox 0.97" 42624 72.4898
lame→lame 0.98" 43218 73.5000
*Original 0.98" 43218 73.5000
sox→sox 0.99" 43776 74.4490
sox→lame 1.01" 44399 75.5085
lame→madplay 1.02" 44928 76.4082
lame→sox 1.02" 44928 76.4082
sox→madplay 1.02" 44928 76.4082

只有由lame编码和解码的文件最终具有相同的长度(主要是因为lame插入了一个长度标签来纠正这些太短的样本,并且知道如何解码它)。无论我使用什么解码器,sox 编码的所有内容最终都会有一个微小的间隙。因此,加入文件将导致微小的点击。

您的浏览器可能会非常轻微地混合和重叠源文件,因此您听不到喀哒声。 Gapless playback很难正确地做到这一点。

关于audio - Sox:连接多个音频文件,中间没有间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25280958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com