ffmpeg的“ setpts”过滤器到底能做什么?

时间:2019-10-06 21:23:27

标签: ffmpeg

我已经寻找了很长时间,到处都是看起来很明显的常识。 ffmpeg的“ setpts”过滤器到底能做什么?为什么要将其重置为零,例如setpts = PTS-STARTPTS?谢谢。

2 个答案:

答案 0 :(得分:1)

PTS代表Presentation TimeStamps。参见What is video timescale, timebase, or timestamp in ffmpeg?

setpts过滤器计算表达式并将该值分配为其正在处理的当前帧的时间戳

例如setpts=2*N+5/TB,其中N是从0开始的帧索引,而TB是流的时基。假设它是1/1000,所以每个PTS单位是1毫秒。

所以,对于每一帧,它都会如下所示,

N       expression        New PTS    New PTS time
0     2*0+5/(1/1000)       5000        5.000 sec
1     2*1+5/(1/1000)       5002        5.002 sec
2     2*2+5/(1/1000)       5004        5.004 sec
...

在多个输入上工作的过滤器会通过时间戳同步,即在覆盖过滤器中,该过滤器将在主输入上以PTS时间5.0覆盖时间戳为5.0的覆盖输入。如果流具有不同的起始PTS,则可能导致意外的输出,因此会重置时间戳记,以使每个流都从0开始。当然,如果您考虑了自定义同步,则可以相应地修改setpts expr。

另一个原因是,当流的起始时间戳不为零时,ffmpeg可以在-vsync cfr模式下复制帧,以插入从时间戳0到初始时间戳的间隔。这仅在某些情况下相关。

答案 1 :(得分:0)

修剪值时,您经常会遇到开始不再是从0开始的问题。因此,在使用-ss和-t标志时,您可能需要重新设置