|
@@ -1002,221 +1002,178 @@ extension PQStuckPointEditerController {
|
|
|
dealParameter(model: model)
|
|
|
// 保存滤镜对象数据
|
|
|
var stickers: Array = Array<PQEditVisionTrackMaterialsModel>.init()
|
|
|
- if model == .createStickersModelPoint { //跳跃卡点
|
|
|
- for section in sections {
|
|
|
- if section.sectionType == "normal" {
|
|
|
-
|
|
|
- // 当用户上传视觉素材个数大于等于音乐选择区域节拍分割个数时,无需进行视频分割,只显示卡点数-1 个素材
|
|
|
- if section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials().count >= stuckPointMusicData!.rhythmSdata[0].pointTimes.count {
|
|
|
- for (index, sticker) in section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials().enumerated() {
|
|
|
- if index == stuckPointMusicData!.rhythmSdata[0].pointTimes.count {
|
|
|
- BFLog(message: "到达卡点数量")
|
|
|
- break
|
|
|
- }
|
|
|
- BFLog(message: "创建 filter start :\(sticker.timelineIn) end :\(sticker.timelineOut) type is \(sticker.type) \(sticker.locationPath)")
|
|
|
- sticker.timelineIn = Float64("\(finallyStuckPoints[index])") ?? 0.0
|
|
|
- sticker.timelineOut = Float64("\(finallyStuckPoints[index + 1])") ?? 0.0
|
|
|
- BFLog(message: "卡点 间隔 \(sticker.timelineIn - sticker.timelineOut)")
|
|
|
- sticker.generateDefaultValues()
|
|
|
- stickers.append(sticker)
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- // 第一种情况:全是图片,图片回环播放
|
|
|
- if section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials(type: "video").count == 0, section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials(type: "image").count > 0 {
|
|
|
- for (index, point) in finallyStuckPoints.enumerated() {
|
|
|
- let sticker: PQEditVisionTrackMaterialsModel = section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials()[index % section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials().count]
|
|
|
- BFLog(message: "stickerlocationPath sticker : \(sticker.locationPath)")
|
|
|
- let stickerjson = sticker.toJSONString(prettyPrint: false)
|
|
|
-
|
|
|
- let deepCopySticker = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: stickerjson!)
|
|
|
- if deepCopySticker!.type == StickerType.IMAGE.rawValue {
|
|
|
- if index + 1 < finallyStuckPoints.count {
|
|
|
- deepCopySticker!.timelineIn = Float64("\(finallyStuckPoints[index])") ?? 0.0
|
|
|
-
|
|
|
- deepCopySticker!.timelineOut = Float64("\(finallyStuckPoints[index + 1])") ?? 0.0
|
|
|
- if deepCopySticker != nil {
|
|
|
- deepCopySticker?.generateDefaultValues()
|
|
|
- stickers.append(deepCopySticker!)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 第二种情况:有视频要进行分割
|
|
|
- let clipFilters = clipVideoMerage(section: section, stuckPoints: finallyStuckPoints)
|
|
|
- for (index, point) in finallyStuckPoints.enumerated() {
|
|
|
- BFLog(message: "aaaaaindexindeindexxindexindexindex \(index) \(point)")
|
|
|
- if index + 1 < finallyStuckPoints.count, index < clipFilters.count {
|
|
|
- BFLog(message: "bbbbbindexindeindexxindexindexindex \(index) \(point)")
|
|
|
- let sticker: PQEditVisionTrackMaterialsModel = clipFilters[index]
|
|
|
- sticker.timelineIn = Float64("\(finallyStuckPoints[index])") ?? 0.0
|
|
|
-
|
|
|
- sticker.timelineOut = Float64("\(finallyStuckPoints[index + 1])") ?? 0.0
|
|
|
- // 卡点的时间 > in out 值 这里就会出现鬼畜效果
|
|
|
- let timelineInterval = sticker.timelineOut - sticker.timelineIn
|
|
|
- let inOutInterval = sticker.out - sticker.model_in
|
|
|
- if timelineInterval > inOutInterval {
|
|
|
- BFLog(message: "实际要显示卡点时长\(timelineInterval) 素材裁剪时长:\(inOutInterval)")
|
|
|
- sticker.out = sticker.model_in + timelineInterval
|
|
|
-
|
|
|
- // 下面只是 LOG 方便查问题
|
|
|
- let stickerInOut = sticker.out - sticker.model_in
|
|
|
- let stickerTimelineInOut = sticker.timelineOut - sticker.timelineIn
|
|
|
- if stickerInOut != stickerTimelineInOut {
|
|
|
- BFLog(message: "sticker.timelineIn \(sticker.timelineIn) stickerTimelineInOut is\(stickerTimelineInOut) stickerInOut is\(stickerInOut) 相差\(stickerTimelineInOut - stickerInOut)")
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // out > 素材的总时长in out 进行前移操作
|
|
|
- let offsetAssetDuration = sticker.out - sticker.duration
|
|
|
- if offsetAssetDuration > 0 {
|
|
|
- sticker.model_in = sticker.model_in - offsetAssetDuration
|
|
|
- sticker.out = sticker.out - offsetAssetDuration
|
|
|
- }
|
|
|
-
|
|
|
- BFLog(message: "index is \(index)分割后 创建 filter timelineIn :\(sticker.timelineIn) timelineOut :\(sticker.timelineOut) in :\(sticker.model_in) out:\(sticker.out) type is \(sticker.type) 显示总时长为:\(sticker.timelineOut - sticker.timelineIn) 裁剪总时长\(sticker.out - sticker.model_in)")
|
|
|
-
|
|
|
- stickers.append(sticker)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }else if (model == .createStickersModelOnlyMusic || model == .createStickersModelSpeed){ //仅音乐 和 跳跃卡点
|
|
|
- for section in sections {
|
|
|
- if section.sectionType == "normal" {
|
|
|
-
|
|
|
- BFLog(message: "stuckPoints count is \(finallyStuckPoints.count)")
|
|
|
-
|
|
|
- // 第一种情况:全是图片,图片回环播放
|
|
|
- if section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials(type: "video").count == 0, section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials(type: "image").count > 0 {
|
|
|
- for (index, point) in finallyStuckPoints.enumerated() {
|
|
|
- let sticker: PQEditVisionTrackMaterialsModel = section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials()[index % section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials().count]
|
|
|
- BFLog(message: "stickerlocationPath sticker : \(sticker.locationPath)")
|
|
|
- let stickerjson = sticker.toJSONString(prettyPrint: false)
|
|
|
-
|
|
|
- let deepCopySticker = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: stickerjson!)
|
|
|
- if deepCopySticker!.type == StickerType.IMAGE.rawValue {
|
|
|
- if index + 1 < finallyStuckPoints.count {
|
|
|
- deepCopySticker!.timelineIn = Float64("\(finallyStuckPoints[index])") ?? 0.0
|
|
|
-
|
|
|
- deepCopySticker!.timelineOut = Float64("\(finallyStuckPoints[index + 1])") ?? 0.0
|
|
|
- if deepCopySticker != nil {
|
|
|
- deepCopySticker?.generateDefaultValues()
|
|
|
- stickers.append(deepCopySticker!)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }else{
|
|
|
- //一共裁剪的段数
|
|
|
- var totalClipNum:Int = 0
|
|
|
- for sticker in section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials() {
|
|
|
- if sticker.type == StickerType.VIDEO.rawValue {
|
|
|
- let asset: AVURLAsset = AVURLAsset(url: URL(fileURLWithPath: documensDirectory + sticker.locationPath), options: nil)
|
|
|
-
|
|
|
- var i:Int = 0
|
|
|
- //一个视频切的的段落
|
|
|
- var oneVideoClipNum:Int = 0
|
|
|
-
|
|
|
- var realUsedMusicDuration = 0.0
|
|
|
- while realUsedMusicDuration <= CMTimeGetSeconds(asset.duration) {
|
|
|
- //快速段
|
|
|
- let LA = maxSpeed * (finallyStuckPoints[i+1] - finallyStuckPoints[i])
|
|
|
- realUsedMusicDuration = realUsedMusicDuration + Float64(LA)
|
|
|
- if(realUsedMusicDuration > CMTimeGetSeconds(asset.duration)){ break}
|
|
|
- oneVideoClipNum = oneVideoClipNum + 1
|
|
|
- //慢速段
|
|
|
- if(i + 2 >= finallyStuckPoints.count){
|
|
|
- break
|
|
|
- }
|
|
|
- let LB = minSpeed * (finallyStuckPoints[i+2] - finallyStuckPoints[i+1])
|
|
|
- realUsedMusicDuration = realUsedMusicDuration + Float64(LB)
|
|
|
- oneVideoClipNum = oneVideoClipNum + 1
|
|
|
- i = i + 1
|
|
|
- }
|
|
|
- BFLog(message: "单个视频\(sticker.locationPath)时长::\(CMTimeGetSeconds(asset.duration)) ,clipNum is:\(oneVideoClipNum)")
|
|
|
- var lastOutTime:Float64 = 0.0
|
|
|
- for clipindex in 0 ... oneVideoClipNum - 1 {
|
|
|
- // deep copy sticker model 防止只有一个对象
|
|
|
- let stickerjson = sticker.toJSONString(prettyPrint: false)
|
|
|
- let deepCopySticker = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: stickerjson!)
|
|
|
- // 设置循环模式和适配模式
|
|
|
+ for section in sections {
|
|
|
+
|
|
|
+ if section.sectionType == "normal" {
|
|
|
+
|
|
|
+ // 第一种情况:全是图片,三种模式都进行图片回环播放
|
|
|
+ if section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials(type: "video").count == 0, section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials(type: "image").count > 0 {
|
|
|
+ for (index, point) in finallyStuckPoints.enumerated() {
|
|
|
+ let sticker: PQEditVisionTrackMaterialsModel = section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials()[index % section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials().count]
|
|
|
+ BFLog(message: "stickerlocationPath sticker : \(sticker.locationPath)")
|
|
|
+ let stickerjson = sticker.toJSONString(prettyPrint: false)
|
|
|
+
|
|
|
+ let deepCopySticker = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: stickerjson!)
|
|
|
+ if deepCopySticker!.type == StickerType.IMAGE.rawValue {
|
|
|
+ if index + 1 < finallyStuckPoints.count {
|
|
|
+ deepCopySticker!.timelineIn = Float64("\(finallyStuckPoints[index])") ?? 0.0
|
|
|
+
|
|
|
+ deepCopySticker!.timelineOut = Float64("\(finallyStuckPoints[index + 1])") ?? 0.0
|
|
|
+ if deepCopySticker != nil {
|
|
|
deepCopySticker?.generateDefaultValues()
|
|
|
- //当前分段的速度
|
|
|
- var tempSpeed:Float = 1.0
|
|
|
- if model == .createStickersModelSpeed{
|
|
|
- tempSpeed = (totalClipNum + clipindex) % 2 == 0 ? maxSpeed : minSpeed
|
|
|
- }
|
|
|
-
|
|
|
- if(totalClipNum + 1 + clipindex < finallyStuckPoints.count){
|
|
|
- deepCopySticker?.speedRate = tempSpeed
|
|
|
-
|
|
|
- //定义临时使用的变量
|
|
|
- let tempModel_In = lastOutTime
|
|
|
- let tempOut = lastOutTime + Float64(tempSpeed) * Float64(finallyStuckPoints[totalClipNum + 1 + clipindex] - finallyStuckPoints[totalClipNum + clipindex])
|
|
|
-
|
|
|
- let tempTimelineIn = Float64(finallyStuckPoints[totalClipNum + clipindex])
|
|
|
- let timelineOut = Float64(finallyStuckPoints[totalClipNum + 1 + clipindex])
|
|
|
-
|
|
|
- //处理最后一点视频素材不够卡点时长 e.g. 0.3 卡点时长0.5
|
|
|
- if(tempOut > realUsedMusicDuration){
|
|
|
- BFLog(message: "最后一点视频素材不够卡点时长 ")
|
|
|
- //最后一点素材时长
|
|
|
- let lastAssetDuration = realUsedMusicDuration - tempOut
|
|
|
- let pointDuration = timelineOut - tempTimelineIn
|
|
|
- let needSpeed = lastAssetDuration / pointDuration
|
|
|
- //当前卡点段为快速
|
|
|
- if(tempSpeed >= 1){
|
|
|
- if(needSpeed > 0.4 * Double(tempSpeed)){
|
|
|
- deepCopySticker?.speedRate = tempSpeed
|
|
|
- } else{
|
|
|
- continue
|
|
|
- }
|
|
|
- }else{//当前卡点段为慢速
|
|
|
- if(needSpeed > 0.4 * Double(tempSpeed) && needSpeed > 0.2){
|
|
|
- deepCopySticker?.speedRate = tempSpeed
|
|
|
- } else{
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- deepCopySticker?.model_in = tempModel_In
|
|
|
- deepCopySticker?.out = tempOut
|
|
|
-
|
|
|
- deepCopySticker?.timelineIn = tempTimelineIn
|
|
|
- deepCopySticker?.timelineOut = timelineOut
|
|
|
-
|
|
|
- lastOutTime = deepCopySticker?.out ?? 0
|
|
|
-
|
|
|
- }
|
|
|
- BFLog(message: " 创建 sticker crilp is in \(String(format: "%.6f", deepCopySticker?.model_in ?? 0)) out \(String(format: "%.6f", deepCopySticker?.out ?? 0)) ,分段素材时长:\(String(format: "%.6f", (deepCopySticker?.out ?? 0) - (deepCopySticker?.model_in ?? 0))) ,分段显示时长:\(String(format: "%.6f", (deepCopySticker?.timelineOut ?? 0) - (deepCopySticker?.timelineIn ?? 0))), 总时长\(CMTimeGetSeconds(asset.duration)) timelineIN: \(String(format: "%.6f", deepCopySticker?.timelineIn ?? 0)) timelineOUT:\(String(format: "%.6f", deepCopySticker?.timelineOut ?? 0)) speedRate:\(deepCopySticker?.speedRate ?? 0.0)")
|
|
|
-
|
|
|
- if deepCopySticker != nil {
|
|
|
- stickers.append(deepCopySticker!)
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- totalClipNum = totalClipNum + oneVideoClipNum - 1
|
|
|
- } else if sticker.type == StickerType.IMAGE.rawValue {
|
|
|
- if(totalClipNum + 1 >= finallyStuckPoints.count){
|
|
|
- BFLog(message: "数据出现错误!!!查正")
|
|
|
- break
|
|
|
+ stickers.append(deepCopySticker!)
|
|
|
}
|
|
|
- sticker.generateDefaultValues()
|
|
|
- sticker.timelineIn = Float64(finallyStuckPoints[totalClipNum])
|
|
|
- sticker.timelineOut = Float64(finallyStuckPoints[totalClipNum + 1])
|
|
|
- totalClipNum = totalClipNum + 1
|
|
|
- stickers.append(sticker)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ }else{//第二种情况:视频 + 图片情况、视频要分段+图片按卡点时长创建
|
|
|
+ if model == .createStickersModelPoint { //跳跃卡点
|
|
|
+ // 第二种情况:有视频要进行分割
|
|
|
+ let clipFilters = clipVideoMerage(section: section, stuckPoints: finallyStuckPoints)
|
|
|
+ for (index, point) in finallyStuckPoints.enumerated() {
|
|
|
+ BFLog(message: "aaaaaindexindeindexxindexindexindex \(index) \(point)")
|
|
|
+ if index + 1 < finallyStuckPoints.count, index < clipFilters.count {
|
|
|
+ BFLog(message: "bbbbbindexindeindexxindexindexindex \(index) \(point)")
|
|
|
+ let sticker: PQEditVisionTrackMaterialsModel = clipFilters[index]
|
|
|
+ sticker.timelineIn = Float64("\(finallyStuckPoints[index])") ?? 0.0
|
|
|
+
|
|
|
+ sticker.timelineOut = Float64("\(finallyStuckPoints[index + 1])") ?? 0.0
|
|
|
+ // 卡点的时间 > in out 值 这里就会出现鬼畜效果
|
|
|
+ let timelineInterval = sticker.timelineOut - sticker.timelineIn
|
|
|
+ let inOutInterval = sticker.out - sticker.model_in
|
|
|
+ if timelineInterval > inOutInterval {
|
|
|
+ BFLog(message: "实际要显示卡点时长\(timelineInterval) 素材裁剪时长:\(inOutInterval)")
|
|
|
+ sticker.out = sticker.model_in + timelineInterval
|
|
|
+
|
|
|
+ // 下面只是 LOG 方便查问题
|
|
|
+ let stickerInOut = sticker.out - sticker.model_in
|
|
|
+ let stickerTimelineInOut = sticker.timelineOut - sticker.timelineIn
|
|
|
+ if stickerInOut != stickerTimelineInOut {
|
|
|
+ BFLog(message: "sticker.timelineIn \(sticker.timelineIn) stickerTimelineInOut is\(stickerTimelineInOut) stickerInOut is\(stickerInOut) 相差\(stickerTimelineInOut - stickerInOut)")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // out > 素材的总时长in out 进行前移操作
|
|
|
+ let offsetAssetDuration = sticker.out - sticker.duration
|
|
|
+ if offsetAssetDuration > 0 {
|
|
|
+ sticker.model_in = sticker.model_in - offsetAssetDuration
|
|
|
+ sticker.out = sticker.out - offsetAssetDuration
|
|
|
+ }
|
|
|
+
|
|
|
+ BFLog(message: "index is \(index)分割后 创建 filter timelineIn :\(sticker.timelineIn) timelineOut :\(sticker.timelineOut) in :\(sticker.model_in) out:\(sticker.out) type is \(sticker.type) 显示总时长为:\(sticker.timelineOut - sticker.timelineIn) 裁剪总时长\(sticker.out - sticker.model_in)")
|
|
|
+
|
|
|
+ stickers.append(sticker)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if (model == .createStickersModelOnlyMusic || model == .createStickersModelSpeed){ //仅音乐 和 快慢速卡点
|
|
|
+ BFLog(message: "stuckPoints count is \(finallyStuckPoints.count)")
|
|
|
+
|
|
|
+
|
|
|
+ //一共裁剪的段数
|
|
|
+ var totalClipNum:Int = 0
|
|
|
+ for sticker in section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials() {
|
|
|
+ if sticker.type == StickerType.VIDEO.rawValue {
|
|
|
+ let asset: AVURLAsset = AVURLAsset(url: URL(fileURLWithPath: documensDirectory + sticker.locationPath), options: nil)
|
|
|
+
|
|
|
+ var i:Int = 0
|
|
|
+ //一个视频切的的段落
|
|
|
+ var oneVideoClipNum:Int = 0
|
|
|
+
|
|
|
+ var realUsedMusicDuration = 0.0
|
|
|
+ while realUsedMusicDuration <= CMTimeGetSeconds(asset.duration) {
|
|
|
+ //快速段
|
|
|
+ let LA = maxSpeed * (finallyStuckPoints[i+1] - finallyStuckPoints[i])
|
|
|
+ realUsedMusicDuration = realUsedMusicDuration + Float64(LA)
|
|
|
+ if(realUsedMusicDuration > CMTimeGetSeconds(asset.duration)){ break}
|
|
|
+ oneVideoClipNum = oneVideoClipNum + 1
|
|
|
+ //慢速段
|
|
|
+ if(i + 2 >= finallyStuckPoints.count){
|
|
|
+ break
|
|
|
+ }
|
|
|
+ let LB = minSpeed * (finallyStuckPoints[i+2] - finallyStuckPoints[i+1])
|
|
|
+ realUsedMusicDuration = realUsedMusicDuration + Float64(LB)
|
|
|
+ oneVideoClipNum = oneVideoClipNum + 1
|
|
|
+ i = i + 1
|
|
|
+ }
|
|
|
+ BFLog(message: "单个视频\(sticker.locationPath)时长::\(CMTimeGetSeconds(asset.duration)) ,clipNum is:\(oneVideoClipNum)")
|
|
|
+ var lastOutTime:Float64 = 0.0
|
|
|
+ for clipindex in 0 ... oneVideoClipNum - 1 {
|
|
|
+ // deep copy sticker model 防止只有一个对象
|
|
|
+ let stickerjson = sticker.toJSONString(prettyPrint: false)
|
|
|
+ let deepCopySticker = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: stickerjson!)
|
|
|
+ // 设置循环模式和适配模式
|
|
|
+ deepCopySticker?.generateDefaultValues()
|
|
|
+ //当前分段的速度
|
|
|
+ var tempSpeed:Float = 1.0
|
|
|
+ if model == .createStickersModelSpeed{
|
|
|
+ tempSpeed = (totalClipNum + clipindex) % 2 == 0 ? maxSpeed : minSpeed
|
|
|
+ }
|
|
|
+
|
|
|
+ if(totalClipNum + 1 + clipindex < finallyStuckPoints.count){
|
|
|
+ deepCopySticker?.speedRate = tempSpeed
|
|
|
+
|
|
|
+ //定义临时使用的变量
|
|
|
+ let tempModel_In = lastOutTime
|
|
|
+ let tempOut = lastOutTime + Float64(tempSpeed) * Float64(finallyStuckPoints[totalClipNum + 1 + clipindex] - finallyStuckPoints[totalClipNum + clipindex])
|
|
|
+
|
|
|
+ let tempTimelineIn = Float64(finallyStuckPoints[totalClipNum + clipindex])
|
|
|
+ let timelineOut = Float64(finallyStuckPoints[totalClipNum + 1 + clipindex])
|
|
|
+
|
|
|
+ //处理最后一点视频素材不够卡点时长 e.g. 0.3 卡点时长0.5
|
|
|
+ if(tempOut > realUsedMusicDuration){
|
|
|
+ BFLog(message: "最后一点视频素材不够卡点时长 ")
|
|
|
+ //最后一点素材时长
|
|
|
+ let lastAssetDuration = realUsedMusicDuration - tempOut
|
|
|
+ let pointDuration = timelineOut - tempTimelineIn
|
|
|
+ let needSpeed = lastAssetDuration / pointDuration
|
|
|
+ //当前卡点段为快速
|
|
|
+ if(tempSpeed >= 1){
|
|
|
+ if(needSpeed > 0.4 * Double(tempSpeed)){
|
|
|
+ deepCopySticker?.speedRate = tempSpeed
|
|
|
+ } else{
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }else{//当前卡点段为慢速
|
|
|
+ if(needSpeed > 0.4 * Double(tempSpeed) && needSpeed > 0.2){
|
|
|
+ deepCopySticker?.speedRate = tempSpeed
|
|
|
+ } else{
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ deepCopySticker?.model_in = tempModel_In
|
|
|
+ deepCopySticker?.out = tempOut
|
|
|
+
|
|
|
+ deepCopySticker?.timelineIn = tempTimelineIn
|
|
|
+ deepCopySticker?.timelineOut = timelineOut
|
|
|
+
|
|
|
+ lastOutTime = deepCopySticker?.out ?? 0
|
|
|
+
|
|
|
+ }
|
|
|
+ BFLog(message: " 创建 sticker crilp is in \(String(format: "%.6f", deepCopySticker?.model_in ?? 0)) out \(String(format: "%.6f", deepCopySticker?.out ?? 0)) ,分段素材时长:\(String(format: "%.6f", (deepCopySticker?.out ?? 0) - (deepCopySticker?.model_in ?? 0))) ,分段显示时长:\(String(format: "%.6f", (deepCopySticker?.timelineOut ?? 0) - (deepCopySticker?.timelineIn ?? 0))), 总时长\(CMTimeGetSeconds(asset.duration)) timelineIN: \(String(format: "%.6f", deepCopySticker?.timelineIn ?? 0)) timelineOUT:\(String(format: "%.6f", deepCopySticker?.timelineOut ?? 0)) speedRate:\(deepCopySticker?.speedRate ?? 0.0)")
|
|
|
+
|
|
|
+ if deepCopySticker != nil {
|
|
|
+ stickers.append(deepCopySticker!)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ totalClipNum = totalClipNum + oneVideoClipNum - 1
|
|
|
+ } else if sticker.type == StickerType.IMAGE.rawValue {
|
|
|
+ if(totalClipNum + 1 >= finallyStuckPoints.count){
|
|
|
+ BFLog(message: "数据出现错误!!!查正")
|
|
|
+ break
|
|
|
+ }
|
|
|
+ sticker.generateDefaultValues()
|
|
|
+ sticker.timelineIn = Float64(finallyStuckPoints[totalClipNum])
|
|
|
+ sticker.timelineOut = Float64(finallyStuckPoints[totalClipNum + 1])
|
|
|
+ totalClipNum = totalClipNum + 1
|
|
|
+ stickers.append(sticker)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1243,11 +1200,7 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- 一,快慢速模式下取卡点 1 3 5
|
|
|
- 快节奏为选中区域的所有点位,即0,1,2,3,4 5 6 7 8 9 10 ……
|
|
|
- 适中为每两个点位取一个,即0,3,6,9 12
|
|
|
- 慢节奏为每三个点位取一个,即0 5 10 15
|
|
|
-
|
|
|
+ 一,快慢速模式下取卡点 2 3 4
|
|
|
二,跳跃卡点模式下根据不同速度 取卡点 1,2,3
|
|
|
快节奏为选中区域的所有点位,即0,1,2,3,4 5 6 7 8 9 10 ……
|
|
|
适中为每两个点位取一个,即0,2,4,6……
|
|
@@ -1278,14 +1231,6 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
stuckPoints.insert(Float(stuckPointMusicData?.startTime ?? 0), at: 0)
|
|
|
|
|
|
-
|
|
|
-// if stuckPoints.last != nil {
|
|
|
-// stuckPoints.removeLast()
|
|
|
-// }
|
|
|
- // 开始时间是服务器返回, 结果时间根据策略计算的
|
|
|
-// stuckPoints.insert(Float(stuckPointMusicData?.startTime ?? 0), at: 0)
|
|
|
-// stuckPoints.insert(Float(stuckPointMusicData?.endTime ?? 0), at: stuckPoints.count)
|
|
|
-
|
|
|
for point in stuckPoints {
|
|
|
BFLog(message: "有 start end 计算后的卡点数\(point)")
|
|
|
}
|