How to preserve the aspect ratio of video using AVAssetWriter

Posted by Satoshi Nakajima on Stack Overflow See other posts from Stack Overflow or by Satoshi Nakajima
Published on 2012-12-19T16:57:08Z Indexed on 2012/12/19 17:03 UTC
Read the original article Hit count: 845

Filed under:
|
|

I have a following code, which captures the video from the camera and stores it as a QuickMovie file using AVAssetWriter. It works fine, but the aspect ratio is not perfect because the width and height are hardcoded (480 x 320) in the outputSettings for AVAssetWriterInput.

I'd rather find out the aspect ratio of the source video, and specify the appropriate height (480 x aspect ratio). Does anybody know how to do it? Should I defer the creation of AssetWriterInput until the first sampleBuffer?


      // set the sessionPreset to 'medium'
      self.captureSession = [[AVCaptureSession alloc] init];
      self.captureSession.sessionPreset = AVCaptureSessionPresetMedium;
      ...

      // create AVCaptureVideoDataOutput
      self.captureVideo = [[AVCaptureVideoDataOutput alloc] init];
      NSString* formatTypeKey = (NSString*)kCVPixelBufferPixelFormatTypeKey;
      self.captureVideo.videoSettings = @{
        formatTypeKey:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA]
      };
      [self.captureVideo setSampleBufferDelegate:self queue:dispatch_get_main_queue()];

      // create an AVAssetWriter
      NSError* error = nil;
      self.videoWriter = [[AVAssetWriter alloc] initWithURL:url 
                             fileType:AVFileTypeQuickTimeMovie
                             error:&error];
      ...
      // create AVAssetWriterInput with specified settings
      NSDictionary* compression = @{
        AVVideoAverageBitRateKey:[NSNumber numberWithInt:960000],
        AVVideoMaxKeyFrameIntervalKey:[NSNumber numberWithInt:1]
      };
      self.videoInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo
            outputSettings:@{
              AVVideoCodecKey:AVVideoCodecH264,
              AVVideoCompressionPropertiesKey:compression,
              AVVideoWidthKey:[NSNumber numberWithInt:480], // required
              AVVideoHeightKey:[NSNumber numberWithInt:320] // required
            }];

      // add it to the AVAssetWriter
      [self.videoWriter addInput:self.videoInput];

© Stack Overflow or respective owner

Related posts about ios

Related posts about avfoundation