【发布时间】:2020-02-04 06:21:02
【问题描述】:
我一直在寻找很长一段时间,但无论我在哪里看,它都好像很明显,是常识。 ffmpeg 的“setpts”过滤器究竟做了什么?为什么要使用 setpts=PTS-STARTPTS 将其重置为零?谢谢。
【问题讨论】:
标签: ffmpeg
我一直在寻找很长一段时间,但无论我在哪里看,它都好像很明显,是常识。 ffmpeg 的“setpts”过滤器究竟做了什么?为什么要使用 setpts=PTS-STARTPTS 将其重置为零?谢谢。
【问题讨论】:
标签: ffmpeg
PTS 代表演示时间戳。见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 到初始时间戳的间隙。这仅在少数情况下相关。
【讨论】:
setpts 是否更改了存储在容器中的时间信息?还是在比特流中?(VUI/SPS 等?)
在修剪值时,您经常会遇到开始不再从 0 开始的问题。因此,当使用 -ss 和 -t 标志时,您可能需要重新设置
【讨论】: