使用しているGPUImageフレームワークのみを使用してください...これは、これまでビデオフィルターに最適なフレームワークです。フレームワークhttps://github.com/BradLarson/GPUImageのドキュメントに目を通し、ページを下にスクロールすると、利用可能なフィルターの詳細が表示されます...
このフィルターはビデオに適用され、ビデオを書き込むには GPUImageMovieWriter クラスを使用する必要があります...自動的にオーディオを処理します..
維持する必要はありません... GPUImageMovieWriter の shouldPassThroughAudio プロパティを使用すると、独自にオーディオを管理します。
このチュートリアルを参考にしてください http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework
GPUImageフレームワークを使用してビデオをトリミングし、オーディオを編集後に削除せずに保存するコードを次に示します。
NSURL *videoUrl = [selectedAsset defaultRepresentation].url;
GPUImageMovie *movieUrl = [[GPUImageMovie alloc] initWithURL:videoUrl];
self.cropFilter = [[GPUImageCropFilter alloc] initWithCropRegion:videoArea];
movieUrl.runBenchmark = YES;
movieUrl.playAtActualSpeed = YES;
[movieUrl addTarget:self.cropFilter];
//Setting path for temporary storing the video in document directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPathDocs = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithFormat:@"CroppedVideo-%d.mov",arc4random() % 1000]];
NSURL *movieURL = [NSURL fileURLWithPath:myPathDocs];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:videoUrl options:nil];
AVAssetTrack *videoAssetTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
CGAffineTransform videoTransform = videoAssetTrack.preferredTransform;
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(videoAssetTrack.naturalSize.width, videoAssetTrack.naturalSize.height)];
[_cropFilter addTarget:movieWriter];
movieWriter.shouldPassthroughAudio = YES;
movieUrl.audioEncodingTarget = movieWriter;
[movieUrl enableSynchronizedEncodingUsingMovieWriter:movieWriter];
[self.movieWriter startRecordingInOrientation:videoTransform];
[self.movieWriter startRecording];
[movieUrl startProcessing];
__block BOOL completeRec = NO;
__unsafe_unretained typeof(self) weakSelf = self;
[self.movieWriter setCompletionBlock:^{
[weakSelf.cropFilter removeTarget:weakSelf.movieWriter];
[weakSelf.movieWriter finishRecording];
[movieUrl removeTarget:weakSelf.cropFilter];
if (!completeRec)
{
[weakSelf videoCropDoneUrl:movieURL];
completeRec = YES;
}
}];