如何将 .wav 文件转换为 .m4a 而不添加任何前导/尾随静音?

如何将 .wav 文件转换为 .m4a 而不添加任何前导/尾随静音?

简短的问题是:如何将.wav文件转换为.m4a不向输出添加任何前导或尾随静音?该文件应该无限循环播放,即使是非常短暂的静音也会非常明显。

例如:其中一个输入 (wav) 文件的长度为 7.385 秒。在 Audacity (Ubuntu) 中打开它并将其保存为 .m4a 时,Audacity 在开头 (15) 和结尾 (24) 总共添加了 39 毫秒的静音,这显然会破坏音频循环。

尝试在 Garage Band(MacOS)中转换文件可以获得更好的结果:最好的情况下,只会在剪辑末尾添加 15 毫秒的静音。

旁注:要将 Garage Band 缩短至 15 毫秒,必须设置复选框Export cycle area, or length of selectged regions (if Cycle is turned off)。除此之外,TrackMaster插件已被禁用,以及ReverbEcho也已被禁用。但是,这仍然多出了 15 毫秒……

所以现在的问题是,如何转换这些文件(在 Linux 或 MacOS 上)?

非常感谢您的建议。谢谢。

答案1

Tetsujin 的评论很好,值得首先考虑。如果您仍想转换音频格式,我会使用 ffmpeg 并给它这个命令

ffmpeg -i input.wav -c:a aac -b:a 256k output.m4a

-c:a aac这将获取您的输入并使用 aac以 256 的比特率复制音频-b:a 256k并将其包装在 m4a 中output.m4a

如果你想像 Tetsujin 建议的那样将音频循环到单个文件中,请添加-stream_loop n你想要的循环次数 -1,其中 n 是循环次数。和-shortest

这将为你提供一个包含 4 个循环的文件。

ffmpeg -stream_loop 3 -i input.wav -c:a aac -b:a 256k -shortest output.m4a

答案2

仅作为记录,请允许我回答我自己的问题:

事实证明这是一个填充问题。从 转换为 时wavm4a输入数据必须是 1024 个样本的倍数。如果不是,则输出将被填充到下一个 1024 个样本的倍数,从而导致尾随静音。

例如:假设你想创建一个 1 秒的 .m4a 文件毫无保留来自速率为 48.000Hz 的波形文件。第一个想法是简单地将输入数据剪切为 48.000 个样本,这将导致 1 秒的输出:

ffmpeg -i input.wav -c:a aac -b:a 128k -af atrim=end_sample=48000 output.m4a

在 Audacity 中打开后output.m4a显示音频数据的预期长度为 1.000 毫秒,但整个文件长度为 1.003 毫秒,结尾有 3 毫秒的静默。

现在,如果我们将输入文件剪切到最接近的 1024 的倍数,而不是 48.000(即样本 48.128):

ffmpeg -i input.wav -c:a aac -b:a 128k -af atrim=end_sample=48128 output.m4a

我们最终会得到 1.003 毫秒的音频内容和文件长度,音频数据末尾不添加静音

因此,总结一下:要从 wav 文件创建可循环的 m4a 文件,输入文件的样本数必须是 1024 个样本的倍数。

伙计们,谢谢你们的帮助,解决了这个问题!

现在剩下的问题是如何将 wav 文件拉伸到特定数量的样本?

相关内容