无法更改AVAssetTrack

时间:2017-03-31 19:02:26

标签: ios swift avfoundation

我尝试为视频的每个帧添加一个过滤器,由AVAsset表示。但是,当我使用AVMutableVideoComposition添加过滤器时,视频的方向会发生变化。例如,视频是以人像拍摄的,应用滤镜后,新视频变为风景。我尝试从两个不同的轨道打印出preferredTransform,一个在应用滤镜后保持其方向,一个旋转。正确轨道的preferredTransform将打印出CGAffineTransform(a: 1.0, b: 0.0, c: 0.0, d: 1.0, tx: 0.0, ty: 0.0)的单位矩阵,旋转的单位矩阵将打印出CGAffineTransform(a: 0.0, b: 1.0, c: -1.0, d: 0.0, tx: 1080.0, ty: 0.0)之类的内容。我的直觉告诉我,我可能能够重置错误轨道的preferredTransform。我试图使用AVMutableVideoCompsitionLayerInstruction,但它不起作用,视频停止播放没有应用过滤器。我是这样做的:

func addFilter(){
    if let asset = self.asset{
         let filterString =  "CIPhotoEffectInstant"
         let composition = AVMutableVideoComposition(asset: asset, applyingCIFiltersWithHandler: { request in
         let filtered = request.sourceImage.applyingFilter(filterString, withInputParameters: nil)
                    request.finish(with: filtered, context: nil)
                })
          guard let videoTrack = asset.tracks(withMediaType: AVMediaTypeVideo).first else {
                    return
          }
          print(CGAffineTransform.identity)

          //AVMutableVideoCompositionLayerInstruction
          let compositionLayerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: videoTrack)
               compositionLayerInstruction.setTransform(.identity, at: asset.duration)


           //AVMutable​Video​Composition​Instruction
           let compositionInstruction =     AVMutableVideoCompositionInstruction()
           compositionInstruction.layerInstructions = [compositionLayerInstruction]
            composition.instructions = [compositionInstruction]

            print(videoTrack.preferredTransform)
            self.playerItem?.videoComposition = composition

            self.currentVideoComposition = composition

        }
    }

0 个答案:

没有答案