【问题标题】:What does ffmpeg's "setpts" filter do exactly? [closed]ffmpeg 的“setpts”过滤器究竟做了什么? [关闭]
【发布时间】:2020-02-04 06:21:02
【问题描述】:

我一直在寻找很长一段时间,但无论我在哪里看,它都好像很明显,是常识。 ffmpeg 的“setpts”过滤器究竟做了什么?为什么要使用 setpts=PTS-STARTPTS 将其重置为零?谢谢。

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    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 到初始时间戳的间隙。这仅在少数情况下相关。

    【讨论】:

    • 流如何具有不同的起始 PTS?流不是从 PTS=0 开始的吗?
    • 作为 MPEG 传输流发送的广播馈送具有非零起始 PTS。使用修剪过滤器的流切割可以具有非零的起始 PTS。还有很多其他方法。
    • 您能告诉我:setpts 是否更改了存储在容器中的时间信息?还是在比特流中?(VUI/SPS 等?)
    • setpts 最终会影响数据包的时间戳,所以容器。
    • 非常感谢,请告诉我 bsf-setts=pts 过滤器究竟对哪里有影响? (又是容器?)
    【解决方案2】:

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

    【讨论】:

    • “修剪值”?
    • 修剪时间戳值 *
    猜你喜欢
    • 2015-01-10
    • 2013-05-31
    • 2011-05-09
    • 2014-09-13
    • 2012-07-23
    • 2016-09-10
    • 2023-03-15
    • 2012-10-17
    • 2021-06-04
    相关资源
    最近更新 更多