创建AVPlayer视频的动画,部分模糊

时间:2016-07-31 22:33:24

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

我有一个播放视频的AVPlayer,我想应用一种"高斯高斯" /"反转虹膜"模糊不清。

我的意思是我的视频中心应用了最多的模糊量,当你从中心点移动得更远时,视频模糊得更少。像这样:

Botticelli Venus Blurred

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

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

可以完成两个程序之间的任何操作。例如,您可以使用附加纹理的FBO实时创建模糊版本的样本,然后将mix与原始和FBO纹理一起使用。