最近動画の加工アプリが徐々に盛り上がりを見せていますが、iOSで写真と同じように簡単にフィルターをかける方法を教えます。
それはみんな大好きGPUImageを利用すれば非常に簡単です。
https://github.com/BradLarson/GPUImage
GPUImageFilter *filter = xxxxx ;//かけたいフィルタ
NSURL *url = xxxxxxx; //movieのURL
GPUImageMovie *movieFile = [[GPUImageMovie alloc] initWithURL:url];
AVURLAsset *asset = [AVURLAsset assetWithURL:url];
NSArray *videoTracks = [asset tracksWithMediaType:AVMediaTypeVideo];
AVAssetTrack *videoTrack = [videoTracks objectAtIndex:0];
movieFile.playAtActualSpeed = YES;
[movieFile addTarget:filter];
NSURL *exportUrl = xxxxxxxxxx; //出力先
GPUImageMovieWriter *movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:exportUrl size:videoTrack.naturalSize];
[filter addTarget:_movieWriter];
movieWriter.shouldPassthroughAudio = YES;
movieFile.audioEncodingTarget = _movieWriter;
[movieFile enableSynchronizedEncodingUsingMovieWriter:_movieWriter];
BOOL alreadyRecordComplate = NO;
movieWriter.completionBlock = ^(){
if(!alreadyRecordComplate){
NSLog(@"movie writer end");
alreadyRecordComplate = YES;
[movieWriter finishRecordingWithCompletionHandler:^{
[filter removeTarget:movieWriter];
}];
}
};
movieWriter.failureBlock = ^(NSError *error){
NSLog(@"movie writer failure %@",error.description);
};
[movieWriter startRecording];
[movieFile startProcessing];
GPUImageには非常に多数のFilter
その他iOSは非常に動画を扱うAPIが充実しており、AVFoundation.framework を利用すると、もっと凝った編集が可能です。
皆さんもGPUImageを使って楽しい動画アプリを作ってみてください!