我正在尝试使用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];
答案 0 :(得分:7)
这是解决方案,如果有人遇到同样的问题:你必须保留GPUImagePicture,GPUImageMovie和GPUImageView对象,例如将它们存储在属性中。否则,它们将在方法结束时或在runloop下在ARC下发布。
答案 1 :(得分:0)
你可以尝试两件事:
在您定位Alpha混合滤镜之后,不要在叠加层上调用processImage。我会在电影上调用startProcessing之前或之后立即尝试。
当您定位AlphaBlendFilter时,不要担心指定textureLocation。你可以调用addTarget并让混合排序。
这些都是我的头脑,我今晚下班后会测试它们。