GPUImage:将文件应用于现有的video文件

我试图使用GPUImage框架的videofilter。 我遵循过滤和重新编码电影教程。 它给我错误Unknown type name GPUImageRotationFilter 。 所以我试图将一个简单的filter应用到我的video文件

这是我的代码
viewController.h

 @interface ViewController : UIViewController<GPUImageMovieWriterDelegate,GPUImageInput> { GPUImageMovie *_movieFile; GPUImageOutput<GPUImageInput> *_sketchFilter; GPUImageMovieWriter *_movieWriter; } @property (nonatomic,retain) GPUImageMovie *movieFile; @property (nonatomic,retain) GPUImageOutput<GPUImageInput> *sketchFilter; @property (nonatomic,retain) GPUImageMovieWriter *movieWriter; @end 

viewController.m

 NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample_iPod" withExtension:@"m4v"]; self.movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL]; self.sketchFilter = [[GPUImageSketchFilter alloc] init]; [self.movieFile addTarget:self.sketchFilter]; NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"]; unlink([pathToMovie UTF8String]); NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie]; self.movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)]; [self.sketchFilter addTarget:self.movieWriter]; [self.movieWriter startRecording]; [self.movieFile startProcessing]; [self.movieWriter setCompletionBlock:^{ [self.sketchFilter removeTarget:self.movieWriter]; [self.movieWriter finishRecording]; }]; 

这一个也给我BAD_ACCESS

堆栈跟踪

在这里输入图像说明

  1. Iam做错了什么?
  2. 任何可以解释我如何将GPUImagefilter应用到现有的video文件?

首先用最新的GPUImageFramework来更新你的GPUImageFramework 。 你可以从这里得到新的。

仔细检查moviewWriter的大小。 它应该是CGSizeMake(640.0, 480.0)而不是CGSizeMake(480.0, 640.0)

或者,您可以创buildvideo资源,然后在大小参数中提供video资源的大小。

 AVURLAsset *asset = [AVURLAsset URLAssetWithURLNSURL fileURLWithPath:pathToMovie] options:nil]; AVAssetTrack *videoAssetTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(videoAssetTrack.naturalSize.width, videoAssetTrack.naturalSize.height)]; 

它为我工作。