|
@@ -1113,9 +1113,10 @@ extension PQStuckPointEditerController {
|
|
|
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])
|
|
|
|
|
@@ -1251,22 +1252,19 @@ extension PQStuckPointEditerController {
|
|
|
//注意推荐时间位置和后面最近的卡点时间与0.3的关系
|
|
|
//保存丢卡点处理后的卡点信息推荐开始到最后倒数第二个
|
|
|
let stuckPointsTemp:Array<Float>
|
|
|
-
|
|
|
-
|
|
|
- //最后真正要使用推荐结束时长
|
|
|
- var realUsedMusicDuration:Float = 0.0
|
|
|
+
|
|
|
+ //已经取到的视频素材总长度,用于和原视频素材时长做对比,不够多加一个点
|
|
|
+ var useAssestDuration:Float = 0.0
|
|
|
switch model {
|
|
|
case .createStickersModelPoint://跳跃卡点
|
|
|
stuckPointsTemp = getUsedStuckPoint(seed: stuckPointMusicData?.speed ?? 0)
|
|
|
- // L/(n+1) L -原视觉素材总时长 n-抛留倍数
|
|
|
- realUsedMusicDuration = Float(selectedTotalDuration) / (Float(maxSpeed) + 1)
|
|
|
-
|
|
|
+
|
|
|
//要拼接的段数
|
|
|
var clipNum:Int = 0
|
|
|
- //所有段的时长总和
|
|
|
- var tempTime:Float = 0.0
|
|
|
+
|
|
|
var i:Int = 0
|
|
|
- while tempTime < Float(selectedTotalDuration) {
|
|
|
+ // L/(n+1) L -原视觉素材总时长 n-抛留倍数
|
|
|
+ while useAssestDuration < Float(Float(selectedTotalDuration) / (Float(maxSpeed) + 1)) {
|
|
|
|
|
|
//回环从头取
|
|
|
if(i+2 >= stuckPointsTemp.count){
|
|
@@ -1274,11 +1272,11 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
//快速段
|
|
|
let LA = (stuckPointsTemp[i+1] - stuckPointsTemp[i])
|
|
|
- tempTime = tempTime + Float(LA)
|
|
|
- if(tempTime > Float(selectedTotalDuration)){ break}
|
|
|
+ useAssestDuration = useAssestDuration + Float(LA)
|
|
|
+ if(useAssestDuration > Float(selectedTotalDuration)){ break}
|
|
|
//慢速段
|
|
|
let LB = (stuckPointsTemp[i+2] - stuckPointsTemp[i+1])
|
|
|
- tempTime = tempTime + Float(LB)
|
|
|
+ useAssestDuration = useAssestDuration + Float(LB)
|
|
|
i = i + 1
|
|
|
clipNum = clipNum + 1
|
|
|
}
|
|
@@ -1309,7 +1307,7 @@ extension PQStuckPointEditerController {
|
|
|
var i:Int = 0
|
|
|
var LACount:Int = 0
|
|
|
var LBCount:Int = 0
|
|
|
- while realUsedMusicDuration < Float(selectedTotalDuration) && selectedTotalDuration != 0 {
|
|
|
+ while useAssestDuration < Float(selectedTotalDuration) && selectedTotalDuration != 0 {
|
|
|
|
|
|
//回环从头取
|
|
|
if(i+2 > stuckPointsTemp.count){
|
|
@@ -1317,15 +1315,15 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
//快速段
|
|
|
let LA = maxSpeed * (stuckPointsTemp[i+1] - stuckPointsTemp[i])
|
|
|
- realUsedMusicDuration = realUsedMusicDuration + Float(LA)
|
|
|
- if(realUsedMusicDuration > Float(selectedTotalDuration)){ break}
|
|
|
+ useAssestDuration = useAssestDuration + Float(LA)
|
|
|
+ if(useAssestDuration > Float(selectedTotalDuration)){ break}
|
|
|
LACount = LACount + 1
|
|
|
- BFLog(message: "快速段段段段段段后LACount:\(LACount) realUsedMusicDuration:\(realUsedMusicDuration)")
|
|
|
+ BFLog(message: "快速段段段段段段后LACount:\(LACount) realUsedMusicDuration:\(useAssestDuration)")
|
|
|
//慢速段
|
|
|
let LB = minSpeed * (stuckPointsTemp[i+2] - stuckPointsTemp[i+1])
|
|
|
- realUsedMusicDuration = realUsedMusicDuration + Float(LB)
|
|
|
+ useAssestDuration = useAssestDuration + Float(LB)
|
|
|
LBCount = LBCount + 1
|
|
|
- BFLog(message: "慢速段段段段段段后LACount:\(LACount) realUsedMusicDuration:\(realUsedMusicDuration)")
|
|
|
+ BFLog(message: "慢速段段段段段段后LACount:\(LACount) realUsedMusicDuration:\(useAssestDuration)")
|
|
|
|
|
|
i = i + 1
|
|
|
}
|
|
@@ -1337,7 +1335,7 @@ extension PQStuckPointEditerController {
|
|
|
finallyStuckPoints.append(a + b)
|
|
|
}
|
|
|
|
|
|
- BFLog(message: "计算后的\(realUsedMusicDuration) LACount:\(LACount) LBCount \(LBCount) 估算时长为:\(selectedTotalDuration * 2 / Float64(maxSpeed + minSpeed))")
|
|
|
+ BFLog(message: "计算后的\(useAssestDuration) LACount:\(LACount) LBCount \(LBCount) 估算时长为:\(selectedTotalDuration * 2 / Float64(maxSpeed + minSpeed))")
|
|
|
|
|
|
break
|
|
|
case .createStickersModelOnlyMusic://仅音乐
|
|
@@ -1345,10 +1343,8 @@ extension PQStuckPointEditerController {
|
|
|
stuckPointsTemp = getUsedStuckPoint(seed: 1)
|
|
|
//要拼接的段数
|
|
|
var clipNum:Int = 0
|
|
|
- //所有段的时长总和
|
|
|
- var tempTime:Float = 0.0
|
|
|
var i:Int = 0
|
|
|
- while tempTime < Float(selectedTotalDuration) {
|
|
|
+ while useAssestDuration < Float(selectedTotalDuration) {
|
|
|
|
|
|
//回环从头取
|
|
|
if(i+2 >= stuckPointsTemp.count){
|
|
@@ -1356,12 +1352,12 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
//快速段
|
|
|
let LA = (stuckPointsTemp[i+1] - stuckPointsTemp[i])
|
|
|
- tempTime = tempTime + Float(LA)
|
|
|
+ useAssestDuration = useAssestDuration + Float(LA)
|
|
|
clipNum = clipNum + 1
|
|
|
- if(tempTime > Float(selectedTotalDuration)){ break}
|
|
|
+ if(useAssestDuration > Float(selectedTotalDuration)){ break}
|
|
|
//慢速段
|
|
|
let LB = (stuckPointsTemp[i+2] - stuckPointsTemp[i+1])
|
|
|
- tempTime = tempTime + Float(LB)
|
|
|
+ useAssestDuration = useAssestDuration + Float(LB)
|
|
|
i = i + 1
|
|
|
clipNum = clipNum + 1
|
|
|
}
|
|
@@ -1437,7 +1433,12 @@ extension PQStuckPointEditerController {
|
|
|
|
|
|
}
|
|
|
|
|
|
- //三,计算最后使用的音频时长, 如果不用拼接音频时长度是卡点的倒数第二位时间
|
|
|
+
|
|
|
+ //三,按原倍速取视频素材长度超过原素材长度处理,要多添加一位卡点做 A B C 处理
|
|
|
+// if(useAssestDuration < selectedTotalDuration){
|
|
|
+//
|
|
|
+// }
|
|
|
+ //四,背景音乐时长处理)计算最后使用的音频时长, 如果不用拼接音频时长度是卡点的倒数第二位时间
|
|
|
let asset = AVURLAsset(url: URL(fileURLWithPath: documensDirectory + (stuckPointMusicData?.localPath ?? "")), options: nil)
|
|
|
|
|
|
//原推荐卡点的倒数第二位时间
|