7

AVAssetExportSession を介してビデオ アセットをエクスポートすると、結果ファイルはランドスペース モードになります。(iTunes 経由で取得したファイル -> アプリ -> ファイル共有 -> マイ アプリ)。ビデオ アセットをポートレート モード (回転) でエクスポートするにはどうすればよいですか?

4

2 に答える 2

22

iPhone キャプチャ デバイスからのビデオは、キャプチャ時のデバイスの向きに関係なく、常に横向きになります。

ビデオを回転させたい場合の「簡単な」解決策は、エクスポートされたセッションのビデオ トラックに変換を割り当てることです。

AVComposition オブジェクトに 2 つの変更可能なトラックを作成します。

AVMutableCompositionTrack *videoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *audioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

メディア トラックをコンポジションのトラックに追加します。

...        
BOOL videoResult = [videoTrack insertTimeRange:sourceCMTime 
                                       ofTrack:[tracks objectAtIndex:0] 
                                        atTime:currentTime 
                                         error:&error];

BOOL audioResult = [audioTrack insertTimeRange:sourceCMTime 
                                       ofTrack:[tracks objectAtIndex:0] 
                                        atTime:currentTime 
                                         error:&error];
...

すべてのトラックを追加したら、コンポジションのビデオ トラックに変換を適用します。

    CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(M_PI_2);
//    CGAffineTransform rotateTranslate = CGAffineTransformTranslate(rotationTransform,360,0);
    videoTrack.preferredTransform = rotationTransform;

(変換は左上隅を原点としていたため、回転後に平行移動が必要でしたが、iPhone 4S、iOS 5.1 でテストしたところ、中心を中心に回転が行われるようになりました。)

于 2012-04-06T12:15:47.423 に答える
0

フレームから外れたり、黒いブロックで表示されたりする可能性があるため、U トランスフォームの間、トラックはコンポジションの renderSize を設定する必要があります。

self.mutableVideoComposition.renderSize = CGSizeMake(assetVideoTrack.naturalSize.height,assetVideoTrack.naturalSize.width);
于 2017-02-24T10:04:10.873 に答える