Ffmpeg 连接音频,中间无空格

Ffmpeg 连接音频,中间无空格

我正在尝试连接一些 m4a 音频文件,似乎一切正常。

我正在使用这样的命令ffmpeg -f concat -safe 0 -i files.txt -y -af anlmdn output.m4a

我注意到音频之间有间隙音频之间的空格

也许有人知道如何删除这些空格,并在每个条目后连接每个条目

答案1

当 ffmpeg 加载 AAC 流时,它会在内部添加额外的 2 个静音帧作为填充,通常称为“启动样本”。上面的注释说,对于特定的采样率,添加 0.2322 的入点是正确的,但如果您希望它完美无缝,还有很多事情要做。

为了无缝连接且没有间隙,您可以执行以下操作:

  1. 根据采样率计算 AAC 帧长度,例如 44.1KHz 的 1024/44100 = 0.02321995。
  2. 在每个片段的开始和结束处编码额外的 2 个 AAC 帧。
  3. 考虑 ffmpeg 内部始终添加的 2 个静默填充帧。
  4. 在 concat txt 文件中分配 inpoint 和 outpoint 指令,以便在创建输出文件时仅使用“好”的内容。

需要 2 个额外的开始帧,因为每个 AAC 帧都依赖于它之前的最多 2 个帧。因此,要正确编码第一帧,它需要该上下文。需要末尾的 2 个额外帧,因为 ffmpeg 会在末尾逐渐减小音频以避免突然出现爆音。通过添加 2 个额外帧,我们可以改变逐渐减小的幅度,这样它就不会影响我们的实际内容。然后使用入点和出点删除这些额外的帧,以避免重复内容。

使用此方法时,所有片段的长度必须为 AAC 帧持续时间的整数倍。如果不是,您将在片段边界看到不可预测的伪影。

我最近发布了一个 repo,通过实际代码进一步证明了这一点:https://github.com/wistia/seamless-aac-split-and-stitch-demo

相关内容