2013-09-04 2 views
3

특정 부분에서 비디오를 잘라내려고합니다. 높이, 너비, x 및 y가 주어지면 비디오의 특정 영역을 자르고 싶습니다. 아무도 아이디어가 없습니다.비디오 자르기 방법?

나는 많은 연구를했지만 결실을 맺지 못했습니다. GPUImage Cropfilter를 사용하여 자르기를 시도했지만 너무 많은 시간이 걸립니다.

최대한 빨리이 작업을 수행하고 싶습니다. 수행 방법이나 예제를 제안 해주세요. 사전에 감사

+2

HTTP의 AVFoundation Framework

에서 사용할 수있는 AVAssetExportSession을 사용할 수 있습니다 : // stackoverflow.com/questions/8387756/ipad-crop-the-video-and-pla y-cropped-portion-only –

+0

나는 그것을 시도했다. 그러나 그것은 최종 결과물에서 비디오를 자르지 않았다. –

+0

그냥 자른 부분을 보여 주지만, 비디오를 내보낼 때 그대로 ... : ( –

답변

1

당신은 AVMutableComposition 더 상세 방문 사과의 참조 라이브러리 AVMutableComposition Class ReferenceAVAssetExportSession 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){}]; 
+0

CGAffineTransform 클래스의 CGAffineTransformMake() 함수는 이미이 코드를 사용하여 비디오 프레임을 수평 또는 수직으로 뒤집거나 회전하지만 그것을 잘라하지 않습니다! 이것이 당신이 CGAffinetransformMake과 함께 할 수있는 일입니다 참조 내가 가진 위 http://tiddlyspace.com/bags/iphonesnipplets_public/tiddlers/CGAffineTransformMake/revisions/115363 –

+0

확인하시기 바랍니다 (이 링크를 확인) 편집 된 답변 지금 우리는 비디오 레이어를 추가해야하는 부모 레이어를 자르기 때문에 내보내기 후에 비디오를 자릅니다. – abhishekkharwar

+0

cropsize.x와 cropsize.y는 무엇입니까? –