|
@@ -60,8 +60,11 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
var lastEditModelBtn: UIButton?
|
|
|
|
|
|
// add by ak 最大、最小速度 有固定值和自定义,当快慢速下两个值都有效,当跳跃卡点只有maxSpeed有效
|
|
|
- var maxSpeed: Float = 1
|
|
|
- var minSpeed: Float = 1
|
|
|
+ // 快慢速模式的 速度设置,快/慢速
|
|
|
+ var modelSpeed_maxSpeed: Float = 1.0
|
|
|
+ var modelSpeed_minSpeed: Float = 1.0
|
|
|
+ //跳跃模式的速度
|
|
|
+ var modelPoint_speed:Float = 1.0
|
|
|
|
|
|
// 快慢速最后一次选择的速度位置
|
|
|
var lastSpeedSelectIndex: Int = 0
|
|
@@ -359,13 +362,15 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
// 更新最后一次选择的位置恢复时使用
|
|
|
if self?.speedSettingView.viewType == 1 {
|
|
|
self?.lastSpeedSelectIndex = selectIndex
|
|
|
+ self?.modelSpeed_maxSpeed = maxSpeed
|
|
|
+ self?.modelSpeed_minSpeed = minSpeed
|
|
|
} else if self?.speedSettingView.viewType == 2 {
|
|
|
self?.lastJumpSpeedSelectIndex = selectIndex
|
|
|
+ self?.modelPoint_speed = maxSpeed
|
|
|
} else {
|
|
|
self?.lastCyclesSelectIndex = selectIndex
|
|
|
}
|
|
|
- self?.maxSpeed = maxSpeed
|
|
|
- self?.minSpeed = minSpeed
|
|
|
+
|
|
|
} else {
|
|
|
BFLog(message: "设置速度无效")
|
|
|
}
|
|
@@ -384,16 +389,18 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
customSpeedSetView.isHidden = true
|
|
|
customSpeedSetView.selectSpeedCallBack = { [weak self, weak customSpeedSetView] maxSpeed, minSpeed, isJumpSpeedModel, isCancle in
|
|
|
if !isCancle {
|
|
|
- self?.maxSpeed = maxSpeed
|
|
|
- self?.minSpeed = minSpeed
|
|
|
+
|
|
|
BFLog(message: "自定义速度maxSpeed is\(maxSpeed) minSpeed \(minSpeed) \(isJumpSpeedModel)")
|
|
|
self?.musicEditBGView.pausePlayer()
|
|
|
|
|
|
// 自定定义的更新一下最后的选择位置
|
|
|
if self?.speedSettingView.viewType == 1 {
|
|
|
self?.lastSpeedSelectIndex = -1
|
|
|
+ self?.modelSpeed_maxSpeed = maxSpeed
|
|
|
+ self?.modelSpeed_minSpeed = minSpeed
|
|
|
} else if self?.speedSettingView.viewType == 2 {
|
|
|
self?.lastJumpSpeedSelectIndex = -1
|
|
|
+ self?.modelPoint_speed = maxSpeed
|
|
|
} else {
|
|
|
self?.lastCyclesSelectIndex = Int(maxSpeed - 1)
|
|
|
}
|
|
@@ -833,8 +840,8 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
playerView.pause()
|
|
|
let videoExporter = PQStuckPointPublicController()
|
|
|
videoExporter.rhythmMode = currentCreateStickersModel
|
|
|
- videoExporter.syncedUpVideoSpeedMin = minSpeed
|
|
|
- videoExporter.syncedUpVideoSpeedMax = maxSpeed
|
|
|
+ videoExporter.syncedUpVideoSpeedMin = modelSpeed_maxSpeed
|
|
|
+ videoExporter.syncedUpVideoSpeedMax = modelSpeed_minSpeed
|
|
|
videoExporter.isReCreate = isReCreate
|
|
|
videoExporter.selectedTotalDuration = selectedTotalDuration
|
|
|
videoExporter.selectedDataCount = selectedDataCount
|
|
@@ -1265,7 +1272,8 @@ extension PQStuckPointEditerController {
|
|
|
// 当前分段的速度
|
|
|
var tempSpeed: Float = 1.0
|
|
|
if model == .createStickersModelSpeed {
|
|
|
- tempSpeed = (stickers.count % 2) == 0 ? maxSpeed : minSpeed
|
|
|
+
|
|
|
+ tempSpeed = (stickers.count % 2) == 0 ? modelSpeed_maxSpeed : modelSpeed_minSpeed
|
|
|
}
|
|
|
|
|
|
if stickers.count + 1 < finallyStuckPoints.count {
|
|
@@ -1314,7 +1322,7 @@ extension PQStuckPointEditerController {
|
|
|
|
|
|
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)) clipCount \(sticker.clipCount) timelineIN: \(String(format: "%.6f", deepCopySticker?.timelineIn ?? 0)) timelineOUT:\(String(format: "%.6f", deepCopySticker?.timelineOut ?? 0)) speedRate:\(deepCopySticker?.speedRate ?? 0.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)) clipNum \(sticker.clipCount) timelineIN: \(String(format: "%.6f", deepCopySticker?.timelineIn ?? 0)) timelineOUT:\(String(format: "%.6f", deepCopySticker?.timelineOut ?? 0)) speedRate:\(deepCopySticker?.speedRate ?? 0.0)")
|
|
|
|
|
|
if deepCopySticker != nil {
|
|
|
if(deepCopySticker?.timelineIn == 0){
|
|
@@ -1406,10 +1414,10 @@ extension PQStuckPointEditerController {
|
|
|
return stuckPoints
|
|
|
}
|
|
|
|
|
|
- func clipPoint(clipCount: Int, oldPoints: Array<Float>) {
|
|
|
- BFLog(message: "拼接卡点数:\(clipCount)")
|
|
|
- if(clipCount < 0 || oldPoints.count < 2){
|
|
|
- BFLog(message: "clipCount is error!!!! \(clipCount)")
|
|
|
+ func clipPoint(clipNum: Int, oldPoints: Array<Float>) {
|
|
|
+ BFLog(message: "拼接卡点数:\(clipNum)")
|
|
|
+ if(clipNum < 0 || oldPoints.count < 2){
|
|
|
+ BFLog(message: "clipNum is error!!!! \(clipNum)")
|
|
|
return
|
|
|
}
|
|
|
// 如果是第一次拼接先补第0位
|
|
@@ -1417,7 +1425,7 @@ extension PQStuckPointEditerController {
|
|
|
finallyStuckPoints.append(stuckPointsTemp.first ?? 0.0)
|
|
|
}
|
|
|
|
|
|
- for i in finallyStuckPoints.count ... clipCount + finallyStuckPoints.count {
|
|
|
+ for i in finallyStuckPoints.count ... clipNum + finallyStuckPoints.count {
|
|
|
if (i % (oldPoints.count - 1)) != 1 {
|
|
|
let value = String(format: "%.6f", finallyStuckPoints[i - 1] + oldPoints[((i-1) % (oldPoints.count - 1)) + 1] - oldPoints[((i - 2) % (oldPoints.count - 1)) + 1])
|
|
|
|
|
@@ -1446,7 +1454,7 @@ extension PQStuckPointEditerController {
|
|
|
var i: Int = 0
|
|
|
// L/(n+1) L -原视觉素材总时长 n-抛留倍数 lastJumpSpeedSelectIndex 是位置 对应的值要+1
|
|
|
// 根据公式计划出的总时长
|
|
|
- let jumpTime = Float(selectedTotalDuration) / Float(maxSpeed + 1)
|
|
|
+ let jumpTime = Float(selectedTotalDuration) / Float(modelPoint_speed + 1)
|
|
|
// 只有图片素材时会为0
|
|
|
if jumpTime > 0 {
|
|
|
while useAssestDuration < Float(jumpTime) {
|
|
@@ -1464,7 +1472,7 @@ extension PQStuckPointEditerController {
|
|
|
|
|
|
// 拼接要使用的卡点信息
|
|
|
|
|
|
- clipPoint(clipCount: clipNum, oldPoints: stuckPointsTemp)
|
|
|
+ clipPoint(clipNum: clipNum, oldPoints: stuckPointsTemp)
|
|
|
}
|
|
|
|
|
|
break
|
|
@@ -1473,11 +1481,11 @@ extension PQStuckPointEditerController {
|
|
|
var tempMaxSpeed: Float = 1
|
|
|
var tempMinSpeed: Float = 1
|
|
|
//速度有为0 会出现在切换模式时,目前是共用一个参数值,会清掉老值 TODO
|
|
|
- if((maxSpeed == 0.0 && minSpeed == 0.0) && selectedDataCount != selectedImageDataCount && model == .createStickersModelSpeed){
|
|
|
- BFLog(message: "速度参数有错误 要重新计算!!!")
|
|
|
- dealWithDataSuccess()
|
|
|
- return
|
|
|
- }
|
|
|
+// if((maxSpeed == 0.0 && minSpeed == 0.0) && selectedDataCount != selectedImageDataCount && model == .createStickersModelSpeed){
|
|
|
+// BFLog(message: "速度参数有错误 要重新计算!!!")
|
|
|
+// dealWithDataSuccess()
|
|
|
+// return
|
|
|
+// }
|
|
|
if model == .createStickersModelSpeed {
|
|
|
// 改变速率,.只有快慢速且非只有图片素材时自动+1处理
|
|
|
if model == .createStickersModelSpeed && selectedDataCount != selectedImageDataCount {
|
|
@@ -1486,8 +1494,8 @@ extension PQStuckPointEditerController {
|
|
|
stuckPointsTemp = getUsedStuckPoint(seed: (stuckPointMusicData?.speed ?? 0))
|
|
|
}
|
|
|
|
|
|
- tempMaxSpeed = maxSpeed
|
|
|
- tempMinSpeed = minSpeed
|
|
|
+ tempMaxSpeed = modelSpeed_maxSpeed
|
|
|
+ tempMinSpeed = modelSpeed_minSpeed
|
|
|
} else {
|
|
|
stuckPointsTemp = getUsedStuckPoint(seed: (stuckPointMusicData?.speed ?? 0))
|
|
|
|
|
@@ -1518,12 +1526,12 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
var j = finallyStuckPoints.count
|
|
|
// 添加卡点的段数 用于判断当前卡点是快/慢速
|
|
|
- var pointCount:Int = 0
|
|
|
+ var pointCount:Int = 1
|
|
|
// 已经取到的视频素材总长度,用于和原视频素材时长做对比,不够多加一个卡点
|
|
|
var useAssestDurationTemp: Float = 0.0
|
|
|
while useAssestDurationTemp < assetDuration {
|
|
|
//当前段的应该使用的速度 A/B
|
|
|
- let useSpeed = (pointCount % 2 == 0 ) ? tempMaxSpeed : tempMinSpeed
|
|
|
+ let useSpeed = (pointCount % 2 != 0 ) ? tempMaxSpeed : tempMinSpeed
|
|
|
// 计算卡点
|
|
|
//要添加的卡点数值
|
|
|
var sub:Float = 0.0
|
|
@@ -1557,10 +1565,10 @@ extension PQStuckPointEditerController {
|
|
|
|
|
|
// 3,多补一个卡点 做 C级 速处理,要根据条件不满足 要删除最后一位,
|
|
|
if useAssestDurationTemp < assetDuration {
|
|
|
- // 下一个卡的的速度性质快、慢
|
|
|
+ // 下一个卡的的速度性质快、慢,e.g. sticker.clipCount = 5时 tempSpeed 应该是慢速。下面计算正确。
|
|
|
var tempSpeed: Float = 1.0
|
|
|
if model == .createStickersModelSpeed {
|
|
|
- tempSpeed = (sticker.clipCount) % 2 == 0 ? maxSpeed : minSpeed
|
|
|
+ tempSpeed = (sticker.clipCount) % 2 == 0 ? modelSpeed_maxSpeed : modelSpeed_minSpeed
|
|
|
}
|
|
|
// 最后一点素材时长
|
|
|
let lastAssetDuration = Float(CMTimeGetSeconds(asset.duration)) - useAssestDurationTemp
|
|
@@ -1602,7 +1610,7 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
// 拼接图片所使用的时长.选择一组图片 按图片数量计算卡点的总时长
|
|
|
if selectedImageDataCount > 0 {
|
|
|
- clipPoint(clipCount: selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
|
|
|
+ clipPoint(clipNum: selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
|
|
|
}
|
|
|
|
|
|
// 全是图片时数组里放着的一定都是图片的使用的卡点
|
|
@@ -1619,7 +1627,7 @@ extension PQStuckPointEditerController {
|
|
|
if lastCyclesSelectIndex != -1 {
|
|
|
// 纯图片时 已经默认添加一次循环 所以要用lastCyclesSelectIndex - 1
|
|
|
if(lastCyclesSelectIndex != 0){
|
|
|
- clipPoint(clipCount: selectedImageDataCount * lastCyclesSelectIndex - 1, oldPoints: stuckPointsTemp)
|
|
|
+ clipPoint(clipNum: selectedImageDataCount * lastCyclesSelectIndex - 1, oldPoints: stuckPointsTemp)
|
|
|
}
|
|
|
|
|
|
} else {
|
|
@@ -1627,7 +1635,7 @@ extension PQStuckPointEditerController {
|
|
|
lastCyclesSelectIndex = 0
|
|
|
while oneSelectImageDuration < 10 {
|
|
|
// 不够10S 时 一次加图片数量的卡点数
|
|
|
- clipPoint(clipCount: selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
|
|
|
+ clipPoint(clipNum: selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
|
|
|
oneSelectImageDuration = Float((finallyStuckPoints.last ?? 0) - (finallyStuckPoints.first ?? 0))
|
|
|
|
|
|
lastCyclesSelectIndex = lastCyclesSelectIndex + 1
|