【问题标题】:Creating an animated, partial blur of an AVPlayer video创建 AVPlayer 视频的动画部分模糊
【发布时间】:2016-08-09 15:32:51
【问题描述】:

我有一个播放视频的 AVPlayer,我想对其应用一种“高斯高斯”/“反向虹膜”模糊。

我的意思是我让视频的中心应用了最高的模糊量,并且随着您从该中心点移动得越远,视频的模糊就越少。像这样:

然后,我希望能够在视频播放时四处移动(例如在视频中来回移动)。

有什么想法可以做到这一点吗?

【问题讨论】:

  • 有很多方法可以做到这一点,但最好的方法取决于具体情况......视频是固定的而不是从相机中获取帧吗?模糊位置是固定的还是实时可移动的?您尝试实现什么模糊算法以及模糊必须有多精确?
  • 视频已修复;模糊是动画的,但不一定是实时的,动画可以在查看之前预先计算/应用/始终相同;如上所述,我想要一个“高斯高斯”模糊,当你离开它的中心时,模糊的强度会逐渐减弱。关于我可以从哪里开始的任何想法?

标签: ios swift opengl-es avplayer core-image


【解决方案1】:

由于巨大的性能增益,高斯模糊通常分为垂直和水平两个通道。如果画布的一部分没有模糊,则不能直接应用此方法。因此,一种直接的方法是创建一个单通道模糊着色器,您可以在其中添加焦点位置和大小。根据片段的当前位置,您可以调整应用到该像素的模糊程度。这只是简单地修改标准矩阵,逐渐在片段周围使用更少的样本,并在靠近焦点时降低远像素的效果(将差异添加到中心像素)。

更聪明的解决方案是将图像的模糊版本与原始版本混合。这个结果可能不完全相同,但非常接近。有很多方法可以做到这一点,如果可能的话,最好模糊整个视频并保留原始视频。然后,您将使用 2 个纹理并在每一帧上将它们混合在一起以获得所需的效果。但是,如果您很棒,您将生成一个视频,其中将包含原始版本和模糊版本(例如,上半部分为原始版本,底部为模糊版本),这将获得性能并通过查找 2 个不同的版本来消除任何可能的问题视频。

因此,使用焦点将 2 混合在一起,您将拥有几乎相同的着色器程序,但更容易。在片段着色器中使用焦点和焦点大小。然后计算当前片段和焦点之间的距离,得到需要应用的模糊图像的比例。使用比例尺,您可以使用mix 将两者有效结合。

如果用户可以更改焦点,则此过程特别好,因为不需要进行额外的计算。仍然模糊整个视频可能会非常耗时。

这两个过程之间的任何事情都可以完成。例如,您可以使用带有附加纹理的 FBO 实时创建样本的模糊版本,然后使用带有原始和 FBO 纹理的mix。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    相关资源
    最近更新 更多