如何合并正面和背面视频,同时又获得正确的方向

问题描述

贝洛是我一直试图使之工作的合并功能。无论是我使用条件语句还是开始时使用PreferredTransform,这两个问题都不会以用户录制它们的方式结束。

我该如何解决?

   func merge(arrayVideos:[AVAsset],completion:@escaping (URL?,Error?) -> ()) {

      let mainComposition = AVMutableComposition()
      let compositionVideoTrack = mainComposition.addMutableTrack(withMediaType: .video,preferredTrackID: kCMPersistentTrackID_Invalid)
//      compositionVideoTrack?.preferredTransform = CGAffineTransform(a: 6.123233995736766e-17,b: 1.0,c: 1.0,d: 6.123233995736766e-17,tx: 0.0,ty: 0.0) //new aug 25 2020 fixes the front face camera //used to be: CGAffineTransform(rotationAngle: .pi / 2)

      let soundtrackTrack = mainComposition.addMutableTrack(withMediaType: .audio,preferredTrackID: kCMPersistentTrackID_Invalid)

        var insertTime = CMTime.zero
        var ind = 0
      for videoAsset in arrayVideos {
        if ind == 0 {
            compositionVideoTrack?.preferredTransform = CGAffineTransform(a: 6.123233995736766e-17,ty: 0.0)
        } else {
            //compositionVideoTrack?.preferredTransform = CGAffineTransform(a: 6.123233995736766e-17,ty: 0.0)
        }
        ind+=1
        try! compositionVideoTrack?.insertTimeRange(CMTimeRangeMake(start: .zero,duration: videoAsset.duration),of: videoAsset.tracks(withMediaType: .video)[0],at: insertTime)
        try! soundtrackTrack?.insertTimeRange(CMTimeRangeMake(start: .zero,of: videoAsset.tracks(withMediaType: .audio)[0],at: insertTime)

        insertTime = CMTimeAdd(insertTime,videoAsset.duration)
      }

      let outputFileURL = URL(fileURLWithPath: NSTemporaryDirectory() + "merge.mp4")

      let fileManager = FileManager()
      try? fileManager.removeItem(at: outputFileURL)

      let exporter = AVAssetExportSession(asset: mainComposition,presetName: AVAssetExportPresetHighestQuality)

      exporter?.outputURL = outputFileURL
      exporter?.outputFileType = AVFileType.mp4
      exporter?.shouldOptimizeForNetworkUse = true

      exporter?.exportAsynchronously {
        if let url = exporter?.outputURL{
            completion(url,nil)
        }
        if let error = exporter?.error {
            completion(nil,error)
        }
      }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)