FFMPEG -ss 和 -t 用于切割 mp3

FFMPEG -ss and -t for cutting mp3

我一直在尝试使用 FFMPEG 剪切音轨的特定部分。我想从00:07切到04:33,所以输入ffmpeg命令如下:

bin\ffmpeg -ss 00:07 -t 04:26 -i "input.mp3" -acodec copy "output.mp3"

我使用 04:26 作为 -t,即 [end_time - start_time]。然而,我得到的output.mp3被从00:07剪成了04:40,曲目长04:33。为了获得正确的输出文件,我不得不使用 -t 04:19,即 [end_time - 2*(start_time)].

我尝试使用 -to 而不是 -t 的替代命令

bin\ffmpeg -i "input.mp3" -ss 00:07 -to 04:33 -acodec copy -y "output.mp3"

这按预期工作,提供了从 00:07 到 04:33 的所需输出轨道。

问题来了,为什么第一种方法要求-t为[end_time - 2* (start_time)]?直觉上,我想寻找 00:07 然后捕获后续的 04:26,所以 -ss 00:07 和 -t 04:26 对我来说很有意义。我不知道 ffmpeg 是如何解释这个的,所以我必须使用 04:19 作为 -t 来代替。

由于第二种方法有效,所以我并不是真的在寻找解决方案。我只是想知道为什么会这样。

-ss-t 被放置在输入之前时,ffmpeg 求助于快速搜索,它依赖于输入的索引来允许 ffmpeg 开始和停止搜索。 MP3 没有索引,因此 ffmpeg 通过比特率估计持续时间。这可能不准确。

-ss-t 放在输入之后时,ffmpeg 会计算解复用的数据包。这将是准确的。