| 
					
				 | 
			
			
				@@ -57,11 +57,12 @@ public class BFRecordExport { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 1,背景视频素材 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if let itemModels = data { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var totalDur = 0.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var titleStickers = [PQEditSubTitleModel]() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var voiceList = [PQVoiceModel]() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var videoStickers = [PQEditVisionTrackMaterialsModel]() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 切割视频素材 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (_, itemModel) in itemModels.enumerated() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                itemModel.videoStickers.removeAll() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (_, itemModel) in itemModels.enumerated() {                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 保留录音部分时,是否按录音顺序合成最终视频; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 如果需要排序,则排视频的顺序;否则排音频的顺序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let needSort = false 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -80,19 +81,39 @@ public class BFRecordExport { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if itemModel.mediaType == .IMAGE { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 图片素材 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    let duration = itemModel.materialDuraion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if !synthesisAll && itemModel.voiceStickers.count == 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 图片无录音在保留模式里不合成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var duration = itemModel.materialDuraion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if itemModel.voiceStickers.count == 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 图片无录音保持2s 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        duration = 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let voice = PQVoiceModel() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        voice.startTime = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        voice.endTime = 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        voice.duration = "2" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        voice.voiceType = VOICETYPT.None.rawValue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        voiceList.append(voice) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let sticker = splitBaseMaterial(timelineIn: totalDur, model_in: 0, duration: duration) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     sticker.originalData = itemModel.coverImg?.pngData() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     sticker.volumeGain = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     sticker.type = StickerType.IMAGE.rawValue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    itemModel.videoStickers.append(sticker) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    videoStickers.append(sticker) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     BFLog(1, message: "image sticker - timIn:\(sticker.timelineIn), modIn:\(sticker.model_in), dur:\(duration)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var subDur = 0.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     for titleS in itemModel.titleStickers { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         let leng = titleS.timelineOut - titleS.timelineIn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        titleS.timelineIn = totalDur + subDur 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        titleS.timelineOut = totalDur + subDur + leng 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let newTitleSticker = PQEditSubTitleModel() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        titleStickers.append(newTitleSticker) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        newTitleSticker.text = titleS.text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        newTitleSticker.setting = titleS.setting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        newTitleSticker.timelineIn = totalDur + subDur 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        newTitleSticker.timelineOut = totalDur + subDur + leng 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         subDur += leng 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -108,6 +129,7 @@ public class BFRecordExport { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    voiceList.append(contentsOf: itemModel.voiceStickers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if synthesisAll { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var subDur = 0.0 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -117,17 +139,22 @@ public class BFRecordExport { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             let sticker = splitBaseMaterial(timelineIn: totalDur + subDur, model_in: range.start.seconds, duration: range.duration.seconds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             sticker.locationPath = localPath 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             sticker.volumeGain = Float64(srange.isRecord ? originSoundInRecordVolumn*100 : originSoundVolumn*100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            itemModel.videoStickers.append(sticker) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            videoStickers.append(sticker) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             subDur += range.duration.seconds 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         for titleS in itemModel.titleStickers { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            titleS.timelineIn = totalDur + titleS.timelineIn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            titleS.timelineOut = totalDur + titleS.timelineOut 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            let newTitleSticker = PQEditSubTitleModel() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            titleStickers.append(newTitleSticker) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            newTitleSticker.text = titleS.text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            newTitleSticker.setting = titleS.setting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            newTitleSticker.timelineIn = totalDur + titleS.timelineIn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            newTitleSticker.timelineOut = totalDur + titleS.timelineOut 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         totalDur += subDur 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 只保留录音部分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var subDur = 0.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var drangs = itemModel.dealedDurationRanges.filter { srange in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             srange.isRecord == true 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -139,25 +166,34 @@ public class BFRecordExport { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        for srange in drangs { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for (index, srange) in drangs.enumerated() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             let range = srange.range 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             let sticker = splitBaseMaterial(timelineIn: totalDur + subDur, model_in: range.start.seconds, duration: range.duration.seconds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             sticker.locationPath = localPath 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             sticker.volumeGain = Float64(srange.isRecord ? originSoundInRecordVolumn*100 : originSoundVolumn*100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            itemModel.videoStickers.append(sticker) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            videoStickers.append(sticker) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            let voiceSticker = itemModel.voiceStickers[index] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            let titleModels = itemModel.titleStickers.filter({ mod in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                mod.audioFilePath == voiceSticker.wavFilePath 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            for titleS in titleModels { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                let newTitleSticker = PQEditSubTitleModel() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                titleStickers.append(newTitleSticker) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                newTitleSticker.text = titleS.text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                newTitleSticker.setting = titleS.setting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                newTitleSticker.timelineIn = totalDur + subDur + titleS.timelineIn - voiceSticker.startTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                newTitleSticker.timelineOut = totalDur + subDur + titleS.timelineOut - voiceSticker.startTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                BFLog(1, message: "timein - \(newTitleSticker.timelineIn)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             subDur += range.duration.seconds 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        for titleS in itemModel.titleStickers { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                            let leng = titleS.timelineOut - titleS.timelineIn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            titleS.timelineIn = totalDur + titleS.timelineIn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            titleS.timelineOut = totalDur + titleS.timelineOut 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         totalDur += subDur 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            beginExport(synthesisAll: synthesisAll) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            beginExport(synthesisAll: synthesisAll, videoStickers: videoStickers, voiceList:voiceList, titleStickers:titleStickers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -205,7 +241,9 @@ public class BFRecordExport { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return bgMovieInfo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    func beginExport(synthesisAll: Bool) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 因为titleStickers 是传递过来的,会修改timelinein,需要重新生成,以免影响原来的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // voiceList是考虑到图片有时候没有录音,在保留全部时,需要添加一个2秒的空sticker 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    func beginExport(synthesisAll: Bool, videoStickers: [PQEditVisionTrackMaterialsModel], voiceList: [PQVoiceModel], titleStickers: [PQEditSubTitleModel]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 输出视频地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        exprotVideo() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -224,14 +262,6 @@ public class BFRecordExport { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 处理导出 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var voiceList = [PQVoiceModel]() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var videoStickers = [PQEditVisionTrackMaterialsModel]() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var titleStickers = [PQEditSubTitleModel]() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for itemModel in itemData { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            voiceList.append(contentsOf: itemModel.voiceStickers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            videoStickers.append(contentsOf: itemModel.videoStickers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            titleStickers.append(contentsOf: itemModel.titleStickers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         guard let voiceCount = data?.reduce(0, { partialResult, itemModell in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             itemModell.voiceStickers.count + partialResult 
			 |