【问题标题】:How to calculate FPS of a video如何计算视频的FPS
【发布时间】:2013-12-30 05:12:35
【问题描述】:

我有一个视频解码器。使用openGL 我正在使用glfw 库在屏幕上渲染解码的帧。我必须在解码器解码和渲染帧时显示 FPS。我知道如何在屏幕上显示一些东西。

What i know:

我知道解码每一帧所花费的时间。即我在解码功能和显示功能之前和之后放置了一个时钟()函数。那就是我知道解码和显示每一帧所花费的时间(比如 x 毫秒)。现在使用这些数据我需要计算视频的 FPS 并显示它。

What i tried:

Time taken to decode a 1 frame=x milli seconds

How many frames are decoded (y) in 1 second (this is the definition of FPS)

因此,FPS=1*1/(x*milli)

=> FPS=1000/x

因此,对于每一帧,我都使用上述公式进行计算并显示它。但经过验证,我知道这是错误的。谁能告诉我上述方法有什么问题?我如何实时计算 FPS,而我知道解码每一帧所花费的时间?

【问题讨论】:

  • 您也可以考虑使用glfwGetTime 而不是clock()

标签: opengl video frame-rate


【解决方案1】:

一般来说,您使用的方法是正确的方法。它确实假设每个帧都需要相同的时间来解码和显示,这可能会导致每帧的确切时序不准确。解码部分的计时将告诉您解码帧所需的时间,但您的 OpenGL 计时可能不准确,除非您包含 glFinish,这可保证 OpenGL 已完成所有 OpenGL 调用的提交和执行,直到您调用glFinish.

如果您在解码部分的开头放置一个clock(),然后在调用glFinish 之后再放置一个,您应该会获得更准确的计时。每帧可能需要不同的时间,因此您的 FPS 可能会波动。此外,如果您正在同步到垂直回扫,您的 FPS 也可能会有所不同,因为您需要等待硬件更新和交换缓冲区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多