问题描述
贝洛是我一直试图使之工作的合并功能。无论是我使用条件语句还是开始时使用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 (将#修改为@)