2016-07-05 2 views
3

私はAVCaptureを使ってビデオを記録しています。私はビデオをトリミングする必要があります。私はiOS AVWritterセンターからビデオオフセットを切り出すキー

AVVideoWidthKey : [NSNumber numberWithInteger:outputSize.width], 
AVVideoHeightKey : [NSNumber numberWithInteger:outputSize.height], 

を設定することによってそれを行うことができた。しかし、私はオフセット、私はそれがデフォルトで動作するように、中心からトリミングしたくないとクロップする必要があります。

私はAVVideoCleanApertureVerticalOffsetKey

を使用すると、このキーの値はAVVideoCleanAperture *キーのキーを含むNSDictionaryのであること。達成できることをAVFoundationでAVVideoSettings.hで読みますAVVideoCleanApertureWidthKeyとAVVideoCleanApertureHeightKeyは、ビデオフレームの中央に配置されたクリーンな矩形を定義します。この矩形を中央からオフセットするには、AVVideoCleanApertureHorizo​​ntalOffsetKeyおよびAVVideoCleanApertureVerticalOffsetKeyを使用します。 AVVideoCleanApertureHorizo​​ntalOffsetKeyの正の値はクリーンアパーチャ領域を右に移動し、AVVideoCleanApertureVerticalOffsetKeyの正の値はクリーンアパーチャ領域を下に移動します。

私は次のことを試していますが、オフセットなしで中央で切り抜くだけです。

NSDictionary *videoCleanApertureSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
              [NSNumber numberWithInteger:outputSize.width], AVVideoCleanApertureWidthKey, 
              [NSNumber numberWithInteger:outputSize.height], AVVideoCleanApertureHeightKey, 
              [NSNumber numberWithInteger:0], AVVideoCleanApertureHorizontalOffsetKey, 
              [NSNumber numberWithInteger:-200], AVVideoCleanApertureVerticalOffsetKey, 
              nil]; 

NSMutableDictionary *compressionSettings = [NSMutableDictionary dictionaryWithObject:[NSNumber numberWithUnsignedLong:bitrate] forKey:AVVideoAverageBitRateKey]; 

[compressionSettings setObject:videoCleanApertureSettings forKey:AVVideoCleanApertureKey]; 

if (self.shouldKeepOnlyKeyFrames) { 
    [compressionSettings setObject:@1 forKey:AVVideoMaxKeyFrameIntervalKey]; 
} 

if (self.profileLevel) { 
    [compressionSettings setObject:self.profileLevel forKey:AVVideoProfileLevelKey]; 
} 
[compressionSettings setObject:@NO forKey:AVVideoAllowFrameReorderingKey]; 
[compressionSettings setObject:@30 forKey:AVVideoExpectedSourceFrameRateKey]; 



return @{ 
     AVVideoCodecKey : self.codec, 
     AVVideoScalingModeKey : self.scalingMode, 
     AVVideoWidthKey : [NSNumber numberWithInteger:outputSize.width], 
     AVVideoHeightKey : [NSNumber numberWithInteger:outputSize.height], 
     AVVideoCompressionPropertiesKey : compressionSettings 
     }; 

答えて

0

情報がありません。あなたのパラメータはこのように見えるはずです。

NSDictionary *videoCleanApertureSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
             [NSNumber numberWithInt:320], AVVideoCleanApertureWidthKey, 
             [NSNumber numberWithInt:480], AVVideoCleanApertureHeightKey, 
             [NSNumber numberWithInt:10], AVVideoCleanApertureHorizontalOffsetKey, 
             [NSNumber numberWithInt:10], AVVideoCleanApertureVerticalOffsetKey, 
             nil]; 


NSDictionary *videoAspectRatioSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
             [NSNumber numberWithInt:3], AVVideoPixelAspectRatioHorizontalSpacingKey, 
             [NSNumber numberWithInt:3],AVVideoPixelAspectRatioVerticalSpacingKey, 
               nil]; 



NSDictionary *codecSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSNumber numberWithInt:960000], AVVideoAverageBitRateKey, 
          [NSNumber numberWithInt:1],AVVideoMaxKeyFrameIntervalKey, 
          videoCleanApertureSettings, AVVideoCleanApertureKey, 
          //videoAspectRatioSettings, AVVideoPixelAspectRatioKey, 
          //AVVideoProfileLevelH264Main30, AVVideoProfileLevelKey, 
          nil]; 





NSString *targetDevice = [[UIDevice currentDevice] model]; 

NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
          AVVideoCodecH264, AVVideoCodecKey, 
          codecSettings,AVVideoCompressionPropertiesKey, 
          [NSNumber numberWithInt:320], AVVideoWidthKey, 
          [NSNumber numberWithInt:480], AVVideoHeightKey, 
          nil]; 
関連する問題