Video capture with 1:1 aspect ratio in iOS

前端 未结 3 437
深忆病人
深忆病人 2020-12-16 07:54

I want to capture videos with an iOS camera with 1:1 aspect ratio.

I tried with UIImagePickerController, but it doesn\'t provide changing aspect ratio. C

相关标签:
3条回答
  • 2020-12-16 08:07
     GPUImageMovie* movieFile = [[GPUImageMovie alloc] initWithAsset:asset];
        GPUImageCropFilter *cropFilter = [[GPUImageCropFilter alloc] initWithCropRegion:CGRectMake(0.0, 0.1, 1.0, 0.8)];
    
        [movieFile addTarget:cropFilter];
        GPUImageMovieWriter* movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(320.0, 320.0)];
    
        [cropFilter addTarget:movieWriter];
        [movieWriter startRecording];
        [movieFile startProcessing]; 
        [movieWriter finishRecordingWithCompletionHandler:^{
    
                   NSLog(@"Completed Successfully");
                   [cropFilter removeTarget:movieWriter];
                   [movieFile removeTarget:cropFilter];
        }];
    

    where

    • asset is the input movie file.
    • cropRegion is the area to crop.
    • movieUrl is the target url to save the cropped movie.
    0 讨论(0)
  • 2020-12-16 08:12

    I don't think it's possible to do so without help of some app, or even if it's possible with an app, you can capture video then crop it to 1:1

    0 讨论(0)
  • 2020-12-16 08:15
    AVCaptureVideoPreviewLayer *_preview = [AVVideoCaptureVideoPreviewLayer layerWithSession:_session];
    
    _preview.frame = CGRectMake(0,0,320,320);
    _preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
    
    
    
    NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                   AVVideoCodecH264, AVVideoCodecKey,
                                   [NSNumber numberWithInt:320], AVVideoWidthKey,
                                   [NSNumber numberWithInt:320], AVVideoHeightKey,
                                   AVVideoScalingModeResizeAspectFill,AVVideoScalingModeKey,
                                   nil];
    
    self.videoInput = [AVAssetWriterInput assetWriterInputWithMediaType: AVMediaTypeVideo
                                                         outputSettings: videoSettings];
    
    
    self.videoInput.transform = CGAffineTransformMakeRotation(M_PI);
    if([_writer canAddInput:_videoInput]) // AVAssetWriter *_writer
        [_writer addInput:_videoInput];
    

    Note:

    _preview's videoGravity and the videoSettings AVVideoScalingModeKey should be same to get the output as 320 x 320.

    0 讨论(0)
提交回复
热议问题