简短的问题是:如何将.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)
。除此之外,Track
和Master
插件已被禁用,以及Reverb
和Echo
也已被禁用。但是,这仍然多出了 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
仅作为记录,请允许我回答我自己的问题:
事实证明这是一个填充问题。从 转换为 时wav
,m4a
输入数据必须是 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 文件拉伸到特定数量的样本?