特定の部分でビデオをトリミングしたい.高さ、幅、x、および y を指定すると、ビデオの特定の領域をトリミングしたい.誰かに何か考えがありますか.
GPUImage Cropfilter を使用してクロッピングを試みましたが、時間がかかりすぎています。
この操作をできるだけ早く実行したいので、その方法や方法の例を教えてください。前もって感謝します
You can use AVMutableComposition
and AVAssetExportSession
Which are available in AVFoundation Framework
For more detail visit apple's reference library AVMutableComposition Class Reference and AVAssetExportSession Class Reference
AVAsset* asset = // Create your asset with source video url
AVMutableComposition *videoComposition = [AVMutableComposition composition];
AVMutableCompositionTrack *compositionVideoTrack = [videoComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetTrack *clipVideoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
AVMutableVideoComposition* videoComposition = [[AVMutableVideoComposition videoComposition]retain];
videoComposition.renderSize = CGSizeMake(320, 240);
videoComposition.frameDuration = CMTimeMake(1, 30);
AVMutableVideoCompositionInstruction *instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
instruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(60, 30) );
AVMutableVideoCompositionLayerInstruction* transformer = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:clipVideoTrack];
CGAffineTransform finalTransform = // setup a transform that grows the video, effectively causing a crop
[transformer setTransform:finalTransform atTime:kCMTimeZero];
instruction.layerInstructions = [NSArray arrayWithObject:transformer];
videoComposition.instructions = [NSArray arrayWithObject: instruction];
CGSize videoSize = myVideoComposition.renderSize;
CALayer *parentLayer = [CALayer layer];
CALayer *videoLayer = [CALayer layer];
NSLog(@"%f %f",_playerLayer.frame.origin.x,_playerLayer.frame.size.width);
parentLayer.frame = CGRectMake( 0, 0 , cropsize.x , cropsize.y );
[videoLayer setPosition:CGPointMake(videoLayer.position.x, videoSize.height)];
[parentLayer addSublayer:videoLayer];
videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
exporter = [[AVAssetExportSession alloc] initWithAsset:saveComposition presetName:AVAssetExportPresetHighestQuality] ;
exporter.videoComposition = videoComposition;
exporter.outputURL=url3;
exporter.outputFileType=AVFileTypeQuickTimeMovie;
[exporter exportAsynchronouslyWithCompletionHandler:^(void){}];