答えは確かに最良の選択肢だと思いますが、それは部分的にしか正しくありません。実際、これを機能させるには、エクスポートのレンダリングサイズ、ポートレートトラックの自然なサイズの反転の高さと幅も調整する必要があります。
私はそれをテストしたばかりで、AVFoundationプログラミングガイド-編集セクションも引用しています。これは、@ dizyの回答で実際に提案されているものを実装することを提案していますが、上記の追加があります。
すべてのAVAssetTrackオブジェクトには、そのアセットトラックの方向情報を含むpreferredTransformプロパティがあります。この変換は、アセットトラックが画面に表示されるたびに適用されます。前のコードでは、レイヤー命令の変換がアセットトラックの変換に設定されている ため、レンダリングサイズを調整すると、新しいコンポジションのビデオが正しく表示されます。
その場合、コードは次のようになります(追加するのは2行だけです)。
// Grab the source track from AVURLAsset for example.
AVAssetTrack *assetVideoTrack = [asset tracksWithMediaType:AVMediaTypeVideo].lastObject;
// Grab the composition video track from AVMutableComposition you already made.
AVMutableCompositionTrack *compositionVideoTrack = [composition tracksWithMediaType:AVMediaTypeVideo].lastObject;
// Apply the original transform.
if (assetVideoTrack && compositionVideoTrack) {
[compositionVideoTrack setPreferredTransform:assetVideoTrack.preferredTransform];
}
flippedSize = CGSize(compositionVideoTrack.naturalSize.height, compositionVideoTrack.naturalSize.width);
composition.renderSize = flippedSize;
// Export..