我使用ffmpeg按开始/结束时间对视频进行分段。例如,我有一组时间[[0,2],[2,4],[4,6]],我在这里调用ffmpeg 3次以创建3个2秒视频0次,2和4。
我的问题是这些时间(正确的)没有正确分割视频。当我使用ffprobe -i test.mov -show_format
检查视频的统计信息时,我注意到start_time=-0.381044
。我也知道这似乎是由于在QuickTime中修剪视频来制作这个视频。为了纠正这个问题,我必须在我的代码中的某处添加(start + 0.381044),输出正常。
那么,为什么start_time通过快速修剪设置为负值?如何设置start_time = 0,这样我的代码可以在没有+ 0.381044的情况下工作?
答案 0 :(得分:5)
视频流通常是帧间编码的,即大多数帧依赖于要解码的其他帧。因此,当修剪这样的流而不进行代码转换时,即使不在修整的时间范围内,这些参考帧也必须包括在输出中以便视频可播放。现在,修剪s / w可以通过两种方式处理这些参考帧的时间戳:为它们分配负PTS,以便它们可用于解码但不显示。或者从零(或任何正值)开始所有时间戳,以便它们也显示出来。在这种情况下,视频修剪不精确,包括额外的帧。
如果使用FFmpeg修剪主视频,则可以通过向trim命令添加-avoid_negative_ts make_zero
来强制执行第二种行为。但是不知道如何使用QT设置它。