AVMutableVideoCompositionLayerInstruction перевести вращение масштаба

Я использую AVMutableComposition для объединения/сшивания нескольких записанных видеодорожек и сохраняю их следующим образом: ожидаемый результат

.. поэтому я перебираю подвиды, чтобы преобразовать каждую дорожку в соответствии с размером каждого подвида.

    var index = 0
    for subview:UIView in template.subviews {
        let scaleX = (subview.frame.width / template.frame.width) / (tracks[index].naturalSize.width /  mainComposition.renderSize.width)
        let scaleY = (subview.frame.height / template.frame.height) / (tracks[index].naturalSize.height /  mainComposition.renderSize.height)
        let x = subview.frame.origin.x
        let y = subview.frame.origin.y

        let rotate = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
        let scale = CGAffineTransformMakeScale(scaleX, scaleY)
        let translate = CGAffineTransformMakeTranslation(x, y)
        let transform = CGAffineTransformConcat(scale, translate)

        let transformation = AVMutableVideoCompositionLayerInstruction(assetTrack: tracks[index])
        transformation.setTransform(CGAffineTransformConcat(rotate, transform), atTime: kCMTimeZero)
        instructions.append(transformation)
        index++
    }

Проблема в том, что все видео не помещаются в сохраненное видео. Но без поворота я получаю ожидаемый результат, как на прикрепленном изображении, но с видео в альбомной ориентации, что, как я читал, всегда имеет место для захваченных видео на устройстве iPhone (как экспортировать видеоресурс через AVAssetExportSession в портретном режиме)

Я играл с CGAffineTransform, переставляя перевод, поворот или масштабирование, которые идут первыми или последними, но не получаю хорошего результата. Я также попытался создать две инструкции слоя, разделяющие вращение и sctaletranslate, но все равно.

Спасибо за любую помощь


person super handsum    schedule 09.02.2016    source источник