2017-09-22 3 views
0

Ich habe versucht, ein Audio- und Video zu verschmelzen. Alle sind völlig in Ordnung. Das Video wird jedoch in den Querformatmodus exportiert. Aber ich möchte es im Hochformat.Video Orientierung Portrait-Modus funktioniert nicht

Ich weiß, dass diese Frage bereits in StackOverflow beantwortet wird. Aber diese Antworten sind nicht für mich arbeiten. Kann mir bitte jemand helfen. Ich brauche es schnelle 3 Version.

Dies ist die Antwort Liste folgte ich habe aber nicht für mich

First

second

3rd

4th

01 Arbeits

6th

Hinweis: Bitte stimmen Sie es nicht duplizieren. Ich kenne diese Frage schon, habe aber keine richtige Antwort für mich. bitte hilf mir. Ich stecke hier für einen langen Tag fest.

hier, was ich versuche, aus dem Code folgende Zeile

let aVideoAsset : AVAsset = AVAsset(url: videoUrl as URL) 
     let aAudioAsset : AVAsset = AVAsset(url: audioUrl as URL) 

     let mainComposition = AVMutableComposition() 

     let videoTrack = mainComposition.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid) 
     let videoAssetTrack = aVideoAsset.tracks(withMediaType: AVMediaTypeVideo).first! 
     try? videoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, aVideoAsset.duration), of: videoAssetTrack, at: kCMTimeZero) 

     let audioTrack = mainComposition.addMutableTrack(withMediaType: AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid) 
     let audioAssetTrack = aAudioAsset.tracks(withMediaType: AVMediaTypeAudio).first! 
     try? audioTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, aAudioAsset.duration), of: audioAssetTrack, at: kCMTimeZero) 

     let videoCompositionLayerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: videoTrack) 
     videoCompositionLayerInstruction.setTransform(videoAssetTrack.preferredTransform, at: kCMTimeZero) 
     let videoCompositionInstuction = AVMutableVideoCompositionInstruction() 
     videoCompositionInstuction.timeRange = CMTimeRangeMake(kCMTimeZero, mainComposition.duration) 
     videoCompositionInstuction.layerInstructions = [ videoCompositionLayerInstruction ] 



     var renderSize = videoAssetTrack.naturalSize 
     renderSize = renderSize.applying(videoAssetTrack.preferredTransform) 
     renderSize = CGSize(width: fabs(renderSize.width), height: fabs(renderSize.height)) 

     let videoComposition = AVMutableVideoComposition() 
     videoComposition.renderSize = renderSize 
     videoComposition.renderSize = CGSize(width: 1280, height: 720) 
     videoComposition.frameDuration = CMTimeMake(1, 30) 
     videoComposition.instructions = [ videoCompositionInstuction ] 




     let savePathUrl : NSURL = NSURL(fileURLWithPath: NSHomeDirectory() + "/Documents/newVideo.mp4") 

     let assetExport = AVAssetExportSession(asset: mainComposition, presetName: AVAssetExportPresetHighestQuality) 
     assetExport?.outputURL = savePathUrl as URL 
     assetExport?.outputFileType = AVFileTypeQuickTimeMovie 
     assetExport?.shouldOptimizeForNetworkUse = true 
     assetExport?.exportAsynchronously {() -> Void in 
      switch assetExport?.status { 

      case AVAssetExportSessionStatus.completed?: 

       //Uncomment this if u want to store your video in asset 

       let assetsLib = ALAssetsLibrary() 
       assetsLib.writeVideoAtPath(toSavedPhotosAlbum: savePathUrl as URL!, completionBlock: nil) 

       print("success") 
      case AVAssetExportSessionStatus.failed?: 
       print("failed \(String(describing: assetExport?.error))") 
      case AVAssetExportSessionStatus.cancelled?: 
       print("cancelled \(String(describing: assetExport?.error))") 
      default: 
       print("complete") 
      } 
     } 

Antwort

0

Entfernen Sie einfach zu implementieren.

videoComposition.renderSize = CGSize(width: 1280, height: 720) 
+0

einfach entfernen. funktioniert immer noch nicht .. –

+0

Das ist interessant. Es funktioniert wie erwartet, nachdem ich diese Linie an meinem Ende entfernt habe. –