|
@@ -67,6 +67,7 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
|
|
|
// 最终使用的卡点数据
|
|
|
var finallyStuckPoints: Array = Array<Float>.init()
|
|
|
+ var finallyStuckPointsInt64: Array = Array<Int64>.init()
|
|
|
// 最终使用的音频时长
|
|
|
var finallyUserAudioTime: Float = 0.0
|
|
|
|
|
@@ -74,6 +75,7 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
// 保存丢卡点处理后的卡点信息推荐开始到最后倒数第二个
|
|
|
// 经过档位处理后的卡点信息
|
|
|
var stuckPointsTemp: Array = Array<Float>.init()
|
|
|
+ var stuckPointsTempInt64: Array = Array<Int64>.init()
|
|
|
// 下一步
|
|
|
lazy var nextBtn: UIButton = {
|
|
|
let nextBtn = UIButton(type: .custom)
|
|
@@ -172,6 +174,10 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
self?.playeTimeRange = CMTimeRange(start: CMTimeMakeWithSeconds(Float64(startTime), preferredTimescale: BASE_FILTER_TIMESCALE), end: CMTimeMakeWithSeconds(Float64(endTime), preferredTimescale: BASE_FILTER_TIMESCALE))
|
|
|
|
|
|
self?.dealParameter(model: self?.currentCreateStickersModel ?? .createStickersModelSpeed)
|
|
|
+ if((self?.finallyStuckPoints.count ?? 0) < 1){
|
|
|
+ BFLog(message: "finallyStuckPoints data is error!!!!")
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
DispatchQueue.global().async { // 并行、异步
|
|
|
let beginTime: TimeInterval = Date().timeIntervalSince1970
|
|
@@ -1255,7 +1261,7 @@ extension PQStuckPointEditerController {
|
|
|
if dunshu >= Int64((stuckPointMusicData?.startTime ?? 0) * Float64(BASE_FILTER_TIMESCALE)) && dunshu < lastPoint {
|
|
|
let savePointStr = String(format: "%.6f", Float(dunshu) / Float(BASE_FILTER_TIMESCALE))
|
|
|
BFLog(message: "原所有卡点数:\(index) \(savePointStr)")
|
|
|
-
|
|
|
+
|
|
|
pointsTemp.append(Float(savePointStr) ?? 0.0)
|
|
|
}
|
|
|
}
|
|
@@ -1301,7 +1307,7 @@ extension PQStuckPointEditerController {
|
|
|
|
|
|
func clipPoint(clipCount: Int, oldPoints: Array<Float>) {
|
|
|
BFLog(message: "拼接卡点数:\(clipCount)")
|
|
|
- if(clipCount < 0){
|
|
|
+ if(clipCount < 0 || oldPoints.count < 2){
|
|
|
BFLog(message: "clipCount is error!!!! \(clipCount)")
|
|
|
return
|
|
|
}
|
|
@@ -1309,10 +1315,10 @@ extension PQStuckPointEditerController {
|
|
|
if finallyStuckPoints.count == 0 {
|
|
|
finallyStuckPoints.append(stuckPointsTemp.first ?? 0.0)
|
|
|
}
|
|
|
+
|
|
|
for i in finallyStuckPoints.count ... clipCount + finallyStuckPoints.count {
|
|
|
- if (i % (oldPoints.count - 1)) != 0 {
|
|
|
-
|
|
|
- let value = String(format: "%.6f", finallyStuckPoints[i - 1] + oldPoints[i % (oldPoints.count - 1)] - oldPoints[(i - 1) % (oldPoints.count - 1)])
|
|
|
+ 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])
|
|
|
|
|
|
finallyStuckPoints.append(Float(value) ?? 0.0)
|
|
|
} else {
|
|
@@ -1377,6 +1383,7 @@ extension PQStuckPointEditerController {
|
|
|
tempMinSpeed = minSpeed
|
|
|
} else {
|
|
|
stuckPointsTemp = getUsedStuckPoint(seed: (stuckPointMusicData?.speed ?? 0))
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1399,54 +1406,42 @@ extension PQStuckPointEditerController {
|
|
|
let assetDuration = Float(CMTimeGetSeconds(asset.duration))
|
|
|
BFLog(message: "输入素材时长 \(assetDuration)")
|
|
|
|
|
|
- // 查找使用的最后一个卡点在原数组中的位置
|
|
|
- var lastPointIndex = stuckPointsTemp.firstIndex(where: { (point) -> Bool in
|
|
|
- (point == (finallyStuckPoints.last ?? 0.0).truncatingRemainder(dividingBy: (stuckPointsTemp.last ?? 0)))
|
|
|
- })
|
|
|
- var i = lastPointIndex ?? 0
|
|
|
- // 1,计算 AB 段的个数
|
|
|
- var LACount: Int = 0
|
|
|
- var LBCount: Int = 0
|
|
|
+ if(finallyStuckPoints.count == 0){
|
|
|
+ finallyStuckPoints.append(stuckPointsTemp[0])
|
|
|
+ }
|
|
|
+ var j = finallyStuckPoints.count
|
|
|
+ // 添加卡点的段数 用于判断当前卡点是快/慢速
|
|
|
+ var pointCount:Int = 0
|
|
|
// 已经取到的视频素材总长度,用于和原视频素材时长做对比,不够多加一个卡点
|
|
|
var useAssestDurationTemp: Float = 0.0
|
|
|
while useAssestDurationTemp < assetDuration {
|
|
|
- // 回环从头取
|
|
|
- if i + 1 >= stuckPointsTemp.count || i + 2 >= stuckPointsTemp.count {
|
|
|
- i = 0
|
|
|
- }
|
|
|
- // 快速段
|
|
|
- let LAValue = String(format: "%.6f", tempMaxSpeed * (stuckPointsTemp[i + 1] - stuckPointsTemp[i]))
|
|
|
- useAssestDurationTemp = useAssestDurationTemp + (Float(LAValue) ?? 0.0)
|
|
|
- if useAssestDurationTemp > Float(assetDuration) {
|
|
|
- useAssestDurationTemp = Float(assetDuration) - (Float(LAValue) ?? 0.0)
|
|
|
- //6x 第一个卡点X 倍速 > 原素材
|
|
|
- break
|
|
|
- }
|
|
|
- LACount = LACount + 1
|
|
|
- BFLog(message: "快速段段段段段段后LACount:\(LACount) realUsedMusicDuration:\(useAssestDurationTemp)")
|
|
|
- // 慢速段
|
|
|
-
|
|
|
- let LBValue = String(format: "%.6f", tempMinSpeed * (stuckPointsTemp[i + 2] - stuckPointsTemp[i + 1]))
|
|
|
-
|
|
|
- useAssestDurationTemp = useAssestDurationTemp + (Float(LBValue) ?? 0.0)
|
|
|
- if useAssestDurationTemp > Float(assetDuration) {
|
|
|
- useAssestDurationTemp = useAssestDurationTemp - (Float(LBValue) ?? 0.0)
|
|
|
- break
|
|
|
+ //当前段的应该使用的速度 A/B
|
|
|
+ let useSpeed = (pointCount % 2 == 0 ) ? tempMaxSpeed : tempMinSpeed
|
|
|
+ // 计算卡点
|
|
|
+ //要添加的卡点数值
|
|
|
+ var sub:Float = 0.0
|
|
|
+ if stuckPointsTemp.count > 2 {
|
|
|
+ if ((j - 1) % (stuckPointsTemp.count - 1)) != 0{
|
|
|
+ sub = stuckPointsTemp[((j - 1) % (stuckPointsTemp.count-1)) + 1] - stuckPointsTemp[(j - 1) % (stuckPointsTemp.count - 1)]
|
|
|
+ }else {
|
|
|
+ sub = stuckPointsTemp[1] - stuckPointsTemp[0]
|
|
|
+ }
|
|
|
+
|
|
|
+ finallyStuckPoints.append(finallyStuckPoints[j - 1] + sub)
|
|
|
+ j += 1
|
|
|
}
|
|
|
- LBCount = LBCount + 1
|
|
|
- BFLog(message: "慢速段段段段段段后LACount:\(LBCount) realUsedMusicDuration:\(useAssestDurationTemp)")
|
|
|
- i = i + 1
|
|
|
+ useAssestDurationTemp += sub * useSpeed
|
|
|
+ pointCount += 1
|
|
|
+ FilterLog(message: "wwwwwwwaaaaaaafin;\((finallyStuckPoints.last ?? 0.0) - (finallyStuckPoints.first ?? 0.0)), tmp:\(useAssestDurationTemp)")
|
|
|
+
|
|
|
}
|
|
|
// 2拼接要使用的卡点信息
|
|
|
- sticker.clipCount = LACount + LBCount
|
|
|
+ sticker.clipCount = pointCount
|
|
|
if stuckPointsTemp.count < 1 {
|
|
|
//todo 和产品沟通提示
|
|
|
BFLog(message: "卡点数据有错误!!!")
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
- // sticker.clipCount + 1 是都先补一位,当不用补时删除最后多的一位
|
|
|
- clipPoint(clipCount: sticker.clipCount, oldPoints: stuckPointsTemp)
|
|
|
BFLog(message: "finallyStuckPoints\(finallyStuckPoints)")
|
|
|
|
|
|
// 3,多补一个卡点 做 C级 速处理,要根据条件不满足 要删除最后一位,
|