|
@@ -15,15 +15,32 @@ class BFVideoCompositionManager {
|
|
|
var itemModels = [BFRecordItemModel]()
|
|
|
var currItemModelIndex = 0
|
|
|
|
|
|
- var write = GPUImageMovieWriter(movieURL: URL(fileURLWithPath: exportVideosDirectory+"test.mov"), size: UIScreen.main.bounds.size, fileType: "com.apple.quicktime-movie", outputSettings: [
|
|
|
- AVVideoCodecKey: AVVideoCodecH264,
|
|
|
- AVVideoWidthKey: 1080,
|
|
|
- AVVideoHeightKey: 1920,
|
|
|
- AVVideoCompressionPropertiesKey: [AVVideoAverageBitRateKey: 6*1024*1024 ]
|
|
|
- ] as [String : Any])
|
|
|
+ var write : GPUImageMovieWriter?
|
|
|
+
|
|
|
+ func getVideoSize(asset: AVURLAsset) -> CGSize {
|
|
|
+ var size = CGSize.zero
|
|
|
+ asset.tracks.forEach { track in
|
|
|
+ if track.mediaType == .video {
|
|
|
+ let realSize = __CGSizeApplyAffineTransform(track.naturalSize, track.preferredTransform)
|
|
|
+ size = CGSize(width: ceil(abs(realSize.width)), height: ceil(abs(realSize.height)))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return size
|
|
|
+ }
|
|
|
+
|
|
|
func export(avsss:AVURLAsset){
|
|
|
let start = Date()
|
|
|
saveMovie = GPUImageMovie(asset: avsss)
|
|
|
+ let size = getVideoSize(asset: avsss)
|
|
|
+
|
|
|
+ write = GPUImageMovieWriter(movieURL: URL(fileURLWithPath: exportVideosDirectory+"test.mov"), size: CGSize(width: 1080, height: 1920), fileType: "com.apple.quicktime-movie", outputSettings: [
|
|
|
+ AVVideoCodecKey: AVVideoCodecH264,
|
|
|
+ AVVideoWidthKey: 1080.0,
|
|
|
+ AVVideoHeightKey: size.height * 1080.0 / size.width ,
|
|
|
+ AVVideoCompressionPropertiesKey: [AVVideoAverageBitRateKey: 6*1024*1024 ]
|
|
|
+ ] as [String : Any])
|
|
|
+
|
|
|
if let saveWrite = write{
|
|
|
let filter = GPUImageFilter()
|
|
|
saveMovie.addTarget(filter)
|
|
@@ -34,10 +51,10 @@ class BFVideoCompositionManager {
|
|
|
saveMovie.enableSynchronizedEncoding(using: saveWrite)
|
|
|
saveMovie.startProcessing()
|
|
|
saveWrite.startRecording()
|
|
|
- DispatchQueue.global().asyncAfter(deadline: .now() + 2) { [weak self] in
|
|
|
- saveWrite.finishRecording()
|
|
|
- self?.saveMovie.endProcessing()
|
|
|
- }
|
|
|
+// DispatchQueue.global().asyncAfter(deadline: .now() + 2) { [weak self] in
|
|
|
+// saveWrite.finishRecording()
|
|
|
+// self?.saveMovie.endProcessing()
|
|
|
+// }
|
|
|
saveWrite.completionBlock = {[weak self] in
|
|
|
BFLog(1, message: "导出完毕:\(Date().timeIntervalSince(start))")
|
|
|
self?.mix(date: start, index: 0)
|