Ios 如何将AVMutableVideoComposition转换为AVAsset
我正在做一些视频编辑,我需要把我正在处理的AVMutableVideoComposition放回一个播放器项目中。要进入玩家物品,它需要是一个AVAsset。如何做到这一点?您可以使用Ios 如何将AVMutableVideoComposition转换为AVAsset,ios,swift,avfoundation,Ios,Swift,Avfoundation,我正在做一些视频编辑,我需要把我正在处理的AVMutableVideoComposition放回一个播放器项目中。要进入玩家物品,它需要是一个AVAsset。如何做到这一点?您可以使用AVMutableComposition作为AVPlayerItem的资产,因为AVMutableComposition是AVAsset的子类 AVMutableVideoComposition不是AVAsset的子类,而是在AVMutableComposition中显示插入到AVAssetTracks中的视频的一
AVMutableComposition
作为AVPlayerItem
的资产,因为AVMutableComposition
是AVAsset
的子类
AVMutableVideoComposition
不是AVAsset
的子类,而是在AVMutableComposition
中显示插入到AVAssetTracks
中的视频的一种方式
(如果您的所有视频都按照您希望的方式放置,而没有AVMutableVideoComposition
,则您可能不需要设置播放器项目的videoComposition
属性)
ObjC:
斯威夫特:
let composition = AVMutableComposition(...
let videoComposition = AVMutableVideoComposition(...
let item = AVPlayerItem(asset: composition)
item.videoComposition = videoComposition
选中此选项-exportPath可以是保存视频的任何临时路径
func ConvertAvcompositionToAvasset(avComp: AVComposition, completion:@escaping (_ avasset: AVAsset) -> Void){
let exporter = AVAssetExportSession(asset: avComp, presetName: AVAssetExportPresetHighestQuality)
let randNum:Int = Int(arc4random())
//Generating Export Path
let exportPath: NSString = NSTemporaryDirectory().appendingFormat("\(randNum)"+"video.mov") as NSString
let exportUrl: NSURL = NSURL.fileURL(withPath: exportPath as String) as NSURL
//SettingUp Export Path as URL
exporter?.outputURL = exportUrl as URL
exporter?.outputFileType = AVFileTypeQuickTimeMovie
exporter?.shouldOptimizeForNetworkUse = true
exporter?.exportAsynchronously(completionHandler: {() -> Void in
DispatchQueue.main.async(execute: {() -> Void in
if exporter?.status == .completed {
let URL: URL? = exporter?.outputURL
let Avasset:AVAsset = AVAsset(url: URL!)
completion(Avasset)
}
else if exporter?.status == .failed{
print("Failed")
}
})
}) }
看看这个答案:
func ConvertAvcompositionToAvasset(avComp: AVComposition, completion:@escaping (_ avasset: AVAsset) -> Void){
let exporter = AVAssetExportSession(asset: avComp, presetName: AVAssetExportPresetHighestQuality)
let randNum:Int = Int(arc4random())
//Generating Export Path
let exportPath: NSString = NSTemporaryDirectory().appendingFormat("\(randNum)"+"video.mov") as NSString
let exportUrl: NSURL = NSURL.fileURL(withPath: exportPath as String) as NSURL
//SettingUp Export Path as URL
exporter?.outputURL = exportUrl as URL
exporter?.outputFileType = AVFileTypeQuickTimeMovie
exporter?.shouldOptimizeForNetworkUse = true
exporter?.exportAsynchronously(completionHandler: {() -> Void in
DispatchQueue.main.async(execute: {() -> Void in
if exporter?.status == .completed {
let URL: URL? = exporter?.outputURL
let Avasset:AVAsset = AVAsset(url: URL!)
completion(Avasset)
}
else if exporter?.status == .failed{
print("Failed")
}
})
}) }