FFMPEG的-ss和-t用于剪切mp3文件。

20

我一直在尝试使用FFMPEG来剪辑声音轨中的特定部分。我想要从00:07剪辑到04:33,所以我输入了以下FFMPEG命令:

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

我在-t参数中使用了04:26,表示[end_time - start_time]。但是,我得到的output.mp3文件从00:07截断到了04:40,并且轨道长达04:33。为了获得正确的输出文件,我必须使用一个-t 04:19,即[end_time - 2*(start_time)]。

timeline of desired mp3 track

我尝试了一种替代命令,使用 -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。

由于第二种方法可以工作,我并不真正寻找解决方案。我只是想知道为什么会发生这种情况。

1个回答

39

当在输入文件之前加上-ss-t参数时,ffmpeg会使用快速定位方式来寻找指定时间点的位置。该方式依赖于输入文件的索引来实现开始和停止定位。由于MP3文件没有索引信息,ffmpeg会通过比特率来估算时长,因此可能存在不准确的情况。

当在输入文件之后加上-ss-t参数时,ffmpeg会按照数据包数量来计算时长,从而得到准确结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接