使用GPUImage将图像添加到视频

时间:2013-10-16 07:12:33

标签: ios objective-c gpuimage

我正在尝试使用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];

2 个答案:

答案 0 :(得分:7)

这是解决方案,如果有人遇到同样的问题:你必须保留GPUImagePicture,GPUImageMovie和GPUImageView对象,例如将它们存储在属性中。否则,它们将在方法结束时或在runloop下在ARC下发布。

答案 1 :(得分:0)

你可以尝试两件事:

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

  2. 当您定位AlphaBlendFilter时,不要担心指定textureLocation。你可以调用addTarget并让混合排序。

  3. 这些都是我的头脑,我今晚下班后会测试它们。