J'essayais de fusionner un son et une vidéo. Tout est complètement parfait. Mais la vidéo s'exporte en mode paysage. Mais je le veux en mode portrait.Le mode portrait d'orientation vidéo ne fonctionne pas
Je sais que cette question a déjà été répondue dans StackOverflow. Mais ces réponses sont ne fonctionne pas pour moi. Est-ce que quelqu'un peut m'aider s'il vous plait. J'en ai besoin rapidement 3 version.
C'est la liste de réponse que j'ai suivi, mais ne fonctionne pas pour moi
Note: S'il vous plaît ne pas voter ce double. Je sais que cette question a déjà mais pas la bonne réponse pour moi. aidez-moi s'il vous plaît. Je suis coincé ici pour une longue journée.
ici ce que j'essaie de mettre en œuvre
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")
}
}
juste enlever. encore ça ne marche pas .. –
C'est intéressant. Cela fonctionne comme prévu après avoir supprimé cette ligne de ma part. –