我一直在尝试使用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。
由于第二种方法有效,我并不是在寻找解决方案。我只是想知道为什么会这样。
答案 0 :(得分:3)
当-ss
和-t
放在输入之前时,ffmpeg会转向快速搜索,它依赖于输入的索引以允许ffmpeg开始和停止搜索。 MP3没有索引,因此ffmpeg通过比特率估计持续时间。这可能是不准确的。
在输入后放置-ss
和-t
时,ffmpeg计算解复用的数据包。这将是准确的。