代码之家  ›  专栏  ›  技术社区  ›  joeycato

为什么我不能将4秒每秒60帧的剪辑缩小到1秒?

  •  1
  • joeycato  · 技术社区  · 6 年前

    我目前正在使用 设置 过滤器可以加速或减慢不同的剪辑,准确度对我来说非常重要(上下文:我将这些剪辑连接成最终剪辑,需要与单独的视频完全同步。)我一直将此作为一种通用方法:

    setpts=(targetDuration/totalFrameCount)*N/TB" -r targetDuration/totalFrameCount
    

    虽然大多数时候它都相当准确,但我想知道我是否能得到更好的结果。例如,如果我试图将一个4秒60fps的片段缩小到正好1秒,即:

    ffmpeg -y -i clip_4sec.avi -filter:v "setpts=(1/240)*N/TB" -r 240/1 clip_4sec_scaled_to_1sec.avi

    我最终得到了一个992ms的剪辑。有人知道为什么会这样吗?根据我的理解,只要目标持续时间是帧持续时间的倍数(1/60秒),这就不应该是问题,对吗?

    有没有更好的方法可以提高准确性?

    注意:FWIW I已经仔细检查了输入剪辑的实际帧数是否为240

    1 回复  |  直到 6 年前
        1
  •  2
  •   Gyan    6 年前

    震源为60 fps,进出setpts过滤器的时基为1/60。在更改PTS之前,应将其设置为1/240。

    ffmpeg -y -i clip_4sec.avi -filter:v "settb=1/240,setpts=(1/240)*N/TB" -r 240/1 clip_4sec_scaled_to_1sec.avi
    

    在实现的过程中可能会出现错误 -r w、 像AVI这样的r.t.VFR复用器。

    推荐文章