计算平均帧速率的正确方法是什么?
What is the correct way to calculate an average frame rate?
例子是用R写的,但实际上是一道数学题。
我有一个视频。我有几个连续帧的时间(tms
)。它们是视频开始后的秒数。
tms <- c(0.06, 0.07, 0.26, 0.30, 0.33, 0.38, 0.47)
我想计算视频的平均帧率。
我可以想到两种方法,但我无法决定哪一种更有意义。他们没有给出相同的结果,所以肯定是不准确的!
方法一
mean(1/diff(tms))
32.45127
方法二
1/mean(diff(tms))
14.63415
哪一个是正确的,另一个为什么不正确?
方法二正确。 Framerate一般用FPS表示,即:
总帧数/总秒数
我们可以看到与此等价:
tms <- c(0.06, 0.07, 0.26, 0.30, 0.33, 0.38, 0.47)
# total number of seconds
n_seconds <- sum(diff(tms))
# total number of frames
n_frames <- length(tms) - 1
# fps
n_frames / n_seconds
[1] 14.63415
请注意,在上面的代码中,我将 n_frames
设置为 length(tms)-1
,因为 diff
函数总是生成一个比原始向量少一个条目的向量(它是一个 差分 工具)。您可以在开始时将 0 添加到 tms
向量。
例子是用R写的,但实际上是一道数学题。
我有一个视频。我有几个连续帧的时间(tms
)。它们是视频开始后的秒数。
tms <- c(0.06, 0.07, 0.26, 0.30, 0.33, 0.38, 0.47)
我想计算视频的平均帧率。
我可以想到两种方法,但我无法决定哪一种更有意义。他们没有给出相同的结果,所以肯定是不准确的!
方法一
mean(1/diff(tms))
32.45127
方法二
1/mean(diff(tms))
14.63415
哪一个是正确的,另一个为什么不正确?
方法二正确。 Framerate一般用FPS表示,即:
总帧数/总秒数
我们可以看到与此等价:
tms <- c(0.06, 0.07, 0.26, 0.30, 0.33, 0.38, 0.47)
# total number of seconds
n_seconds <- sum(diff(tms))
# total number of frames
n_frames <- length(tms) - 1
# fps
n_frames / n_seconds
[1] 14.63415
请注意,在上面的代码中,我将 n_frames
设置为 length(tms)-1
,因为 diff
函数总是生成一个比原始向量少一个条目的向量(它是一个 差分 工具)。您可以在开始时将 0 添加到 tms
向量。