我已经寻找了很长时间,到处都是看起来很明显的常识。 ffmpeg的“ setpts”过滤器到底能做什么?为什么要将其重置为零,例如setpts = PTS-STARTPTS?谢谢。
答案 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标志时,您可能需要重新设置