我正在开发一个将视频流式传输到OpenGL纹理的应用程序。我的第一个想法是将渲染循环锁定为60hz,因此要以30fps或60fps播放视频,我将分别更新每隔一帧或每帧的纹理。当显示器处于60hz时,计算机如何以其他帧速率播放视频,或者如果显示器处于75hz,他们如何播放30fps视频呢?
答案 0 :(得分:2)
对于大多数消费类设备,您会得到类似3:2 pulldown的内容,它基本上会不均匀地复制源视频帧。具体地说,在60Hz显示器上显示的24Hz视频中,帧交替加倍和三倍。对于您的用例(OpenGL纹理中的视频),这可能是最好的方法,因为它可以避免撕裂。
如果您有足够的计算能力来运行实际的重采样算法,则可以将任何帧速率转换为任何其他帧速率。您选择的算法定义了转换的平滑程度,不同的算法在不同的场景中效果最佳。
过于平滑可能会导致120 Hz“肥皂剧”效果 [1] [2]:
我们已经接受过以24 FPS观看电影成长的培训,期望电影具有一定的外观和感觉,这是特定帧率的神器。 当这些电影被[处理]时,额外的清晰度和清晰度可能会使观看者看起来错误,即使视频质量实际上更接近真实。
这通常被称为肥皂剧效果,因为有些人认为这些昂贵的电影看起来像便宜的视频肥皂剧(因为历史上用于肥皂剧的录像带格式工作在30 FPS)。
答案 1 :(得分:1)
这是Screen Tearing和Vertical Sync的问题 - 这些文章会比我更好地解释它。
答案 2 :(得分:1)
基本上你正在处理重采样问题。您的原始数据以30Hz或60Hz进行采样,您需要将其重新采样为另一个采样率。适用的算法完全相同。大多数情况下,您会找到有关音频信号重采样的文章。只需将每个像素的颜色通道视为要重新采样的单个波形。