pig*_*_39 5 rotation ios avasset swift
我使用以下代码将多个视频合并为一个。
func mergeMultipleVideos() {
let composition = AVMutableComposition()
let videoTrack = composition.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)
let audioTrack = composition.addMutableTrack(withMediaType: AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid)
var time: Double = 0.0
for video in self.arrayOfSelectedVideoURL {
let sourceAsset = AVAsset(url: video as URL)
let videoAssetTrack = sourceAsset.tracks(withMediaType: AVMediaTypeVideo)[0]
let audioAssetTrack = sourceAsset.tracks(withMediaType: AVMediaTypeAudio)[0]
let atTime = CMTime(seconds: time, preferredTimescale:1)
do{
try videoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, sourceAsset.duration) , of: videoAssetTrack, at: atTime)
try audioTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, sourceAsset.duration) , of: audioAssetTrack, at: atTime)
}catch{
print("-----Something wrong.")
}
time += sourceAsset.duration.seconds
}
mergeVideoURL = NSURL(fileURLWithPath: NSHomeDirectory() + "/Documents/mergeVideo.mp4")
let exporter: AVAssetExportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetHighestQuality)!
exporter.outputFileType = AVFileTypeMPEG4
exporter.outputURL = mergeVideoURL as URL
exporter.exportAsynchronously(completionHandler:
{
switch exporter.status
{
case AVAssetExportSessionStatus.failed:
print("failed \(exporter.error)")
case AVAssetExportSessionStatus.cancelled:
print("cancelled \(exporter.error)")
case AVAssetExportSessionStatus.unknown:
print("unknown\(exporter.error)")
case AVAssetExportSessionStatus.waiting:
print("waiting\(exporter.error)")
case AVAssetExportSessionStatus.exporting:
print("exporting\(exporter.error)")
default:
print("-----Merge video exportation complete.\(self.mergeVideoURL)")
}
})
}
Run Code Online (Sandbox Code Playgroud)
以上完成了工作。但问题是,如果我选择纵向视频,它会在最终导出的视频中被美化。我需要在最终视频中保持所有视频的实际方向。
我已经尝试过这些代码片段
Run Code Online (Sandbox Code Playgroud)//video orientation let assetVideoTrack = (sourceAsset.tracks(withMediaType: AVMediaTypeVideo)).last let compositionVideoTrack = (composition.tracks(withMediaType: AVMediaTypeVideo)).last if ((assetVideoTrack?.isPlayable)! && (compositionVideoTrack?.isPlayable)!) { compositionVideoTrack?.preferredTransform = (assetVideoTrack?.preferredTransform)! }
从这个链接。它没有用。任何帮助,将不胜感激
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |