opengl - 以不是刷新率倍数的帧速率播放视频。

标签 opengl video frame-rate

我正在开发一个将视频流式传输到 OpenGL 纹理的应用程序。我的第一个想法是将渲染循环锁定为 60hz,因此要以 30fps 或 60fps 播放视频,我会分别更新每隔一帧或每一帧的纹理。当显示器为 60hz 时,计算机如何以其他帧速率播放视频,或者如果显示器为 75hz,它们如何播放 30fps 视频?

最佳答案

对于大多数消费设备,您会得到类似 3:2 pulldown 的信息,这基本上是不均匀地复制源视频帧。具体来说,在 60 Hz 显示器上显示的 24 Hz 视频中,帧交替加倍和加倍。对于您的用例(OpenGL 纹理中的视频),这可能是最好的方法,因为它可以避免撕裂。

如果您有足够的计算能力来运行实际的重采样算法,您可以将任何帧速率转换为任何其他帧速率。您选择的算法决定了转换的流畅程度,不同的算法在不同的场景下效果最佳。

过于平滑可能会导致 120 Hz 的“肥皂剧”效果 [1] [2] :

We have been trained by growing up watching movies at 24 FPS to expect movies to have a certain look and feel to them that is an artifact of that particular frame rate. When these movies are [processed], the extra sharpness and clearness can make the movies look wrong to viewers, even though the video quality is actually closer to real.

This is commonly called the Soap Opera Effect, because some feel it makes these expensive movies look like cheap shot-on-video soap operas (because the videotape format historically used on soap operas worked at 30 FPS).

关于opengl - 以不是刷新率倍数的帧速率播放视频。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9166509/

相关文章:

opengl - 为什么相机必须留在opengl的原点

javascript - 在javascript/jquery中获取当前视频帧

java - 如何在android os中获取视频的帧速率?

c - OpenGL:用于加载资源的辅助线程?

opengl - OpenGL-在屏幕上绘制像素?

javascript - 使用 JQuery 或 Javascript 将 IFrame 中的一个视频替换为另一个视频

ios - 从 CMBlockBuffer 中提取 h264

html - 如何解决提供极高 FPS 的 webkitRequestAnimationFrame

Qt 使用 ShaderEffect 进行 QImage 渲染

javascript - HTML5 视频在滚动时播放,但存在 JavaScript 滞后问题