1

我目前正在使用setpts过滤器来加速或减慢不同的剪辑,准确性对我来说非常重要(上下文:我将这些连接成一个需要与单独的视频完美同步的最终剪辑。)我'一直将其用作一般方法:

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

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

我可以采取更好的方法来提高准确性吗?

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

4

1 回答 1

2

源为 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

这里可能存在与-rAVI 等 wrt VFR 多路复用器的实现有关的错误。

于 2018-05-20T06:56:46.353 回答