2

我正在尝试使用 GPUImage 库将图像添加到视频的每一帧,但无法使其正常工作。由于某种原因,处理后的视频只包括原始视频,没有图像叠加。我究竟做错了什么?

GPUImagePicture *overlay = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"overlayimage"] smoothlyScaleOutput:YES];
[overlay processImage];

GPUImageMovie *movie = [[GPUImageMovie alloc] initWithURL:[THE URL TO THE VIDEO ASSET]];
movie.delegate = self;
movie.runBenchmark = YES;
movie.playAtActualSpeed = YES;

self.movieView = [[GPUImageView alloc] initWithFrame:self.bounds];
self.movieView.fillMode = kGPUImageFillModePreserveAspectRatio;
[self addSubview:self.movieView];

GPUImageAlphaBlendFilter *filter = [[GPUImageAlphaBlendFilter alloc] init];
[movie addTarget:filter atTextureLocation:0];
[overlay addTarget:filter atTextureLocation:1];
[filter prepareForImageCapture];

[filter addTarget:self.movieView];

[movie startProcessing];
4

2 回答 2

7

这是解决方案,如果有人遇到同样的问题:您必须保留 GPUImagePicture、GPUImageMovie 和 GPUImageView 对象,例如通过将它们存储在属性中。否则,它们将在方法或运行循环结束时在 ARC 下释放。

于 2013-10-17T15:58:11.223 回答
0

您可以尝试两件事:

  1. 在您定位 alpha 混合滤镜之前,不要在叠加层上调用 processImage。我会在您对电影调用 startProcessing 之前或之后立即尝试。

  2. 当您定位 AlphaBlendFilter 时,不必担心指定纹理位置。您可以调用 addTarget 并让混合对其进行排序。

这些都是我的想法,我今晚下班后实际上会测试它们。

于 2013-10-16T22:06:29.677 回答