如何使用AVFoundation裁剪video
我正在尝试使用AVFoundation裁剪正在录制的video。 所以我们可以说我创build一个AVCaptureVideoPreviewLayer并设置帧为300×300。
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session]; captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; captureVideoPreviewLayer.delegate = self; captureVideoPreviewLayer.frame = CGRectMake(0,0, 300, 300); [previewView.layer addSublayer:captureVideoPreviewLayer];
用户看到裁剪的video。 我想按照用户查看的方式保存video。 使用AVCaptureMovieFileOutput,video显然得到保存而不裁剪。 我正在考虑使用AVCaptureVideoDataOutput来拦截帧并自己裁剪,但是我想知道是否有更高效的方法来实现这一点,或许使用AVExportSession并使用AVVideoComposition。
任何指导将不胜感激。
像这样的东西。 这段代码的99%只是设置自定义CGAffineTransform,然后保存结果。
我假设你想裁剪的video占用输出的全尺寸/宽度 – 例如,一个Scale Affine是正确的解决scheme(放大video,给出裁剪+resize的效果)。
AVAsset* asset = // your input 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]; exporter = [[AVAssetExportSession alloc] initWithAsset:saveComposition presetName:AVAssetExportPresetHighestQuality] ; exporter.videoComposition = videoComposition; exporter.outputURL=url3; exporter.outputFileType=AVFileTypeQuickTimeMovie; [exporter exportAsynchronouslyWithCompletionHandler:^(void){}];
ios7添加了一个特定的层指令只是为了裁剪。
videolayerInstruction setCropRectangle:atTime:
_麦克风
- UIWebView:当应用程序进入后台时,HTML5audio会在iOS 6中暂停
- AVPlayerItem失败,AVStatusFailed和错误代码“无法解码”
- 如何在IOS中做慢动作video
- Swift 2.0:expression式的types是不明确的,没有更多的上下文?
- dyld:Library未加载:@ rpath / libswiftAVFoundation.dylib
- 将实时相机video从iOS(iPhone / iPad)stream式传输到远程PC /服务器
- 如何将UIImage数组导出为电影?
- 具有多个预览的AVCaptureSession
- 使用AVPlayer时保持良好的滚动性能