3

フレームワークのビデオフィルターを使用しようとしていましたGPUImage。映画のチュートリアルのフィルタリングと再エンコードに従いました。それは私にエラーを与えますUnknown type name GPUImageRotationFilter。だから私は自分のビデオファイルに簡単なフィルターを適用しようとしました

ここに私のコード
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. 私は何を間違っていますか?
  2. GPUImage フィルターを既存のビデオ ファイルに適用する方法を教えてもらえますか?
4

1 に答える 1

0

まずGPUImageFramework、最新のものに更新してください。新品はこちらから入手できます。

moviewWriter のサイズを再確認してください。CGSizeMake(640.0, 480.0)の代わりにする必要がありCGSizeMake(480.0, 640.0)ます。

または、ビデオ アセットを作成してから、サイズ パラメーターでビデオ アセットのサイズを指定することもできます。

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)];

それは私のために働いています。

于 2014-06-12T06:38:22.300 に答える