|
@@ -69,6 +69,11 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
var finallyStuckPoints: Array = Array<Float>.init()
|
|
|
// 最终使用的音频时长
|
|
|
var finallyUserAudioTime: Float = 0.0
|
|
|
+
|
|
|
+ // 注意推荐时间位置和后面最近的卡点时间与0.3的关系
|
|
|
+ // 保存丢卡点处理后的卡点信息推荐开始到最后倒数第二个
|
|
|
+ // 经过档位处理后的卡点信息
|
|
|
+ var stuckPointsTemp: Array = Array<Float>.init()
|
|
|
// 下一步
|
|
|
lazy var nextBtn: UIButton = {
|
|
|
let nextBtn = UIButton(type: .custom)
|
|
@@ -1150,12 +1155,6 @@ extension PQStuckPointEditerController {
|
|
|
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 realUsedMusicDuration = 0.0
|
|
|
-
|
|
|
-// if(model == .createStickersModelOnlyMusic){
|
|
|
-// sticker.clipCount = 1
|
|
|
-// }
|
|
|
BFLog(message: "单个视频\(sticker.locationPath)时长::\(CMTimeGetSeconds(asset.duration)) ,clipNum is:\(sticker.clipCount)")
|
|
|
var lastOutTime: Float64 = 0.0
|
|
|
for clipindex in 0 ... sticker.clipCount {
|
|
@@ -1230,13 +1229,13 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
totalClipNum = totalClipNum + sticker.clipCount
|
|
|
} else if sticker.type == StickerType.IMAGE.rawValue {
|
|
|
- if totalClipNum + 1 >= finallyStuckPoints.count {
|
|
|
- BFLog(message: "数据出现错误!!!查正")
|
|
|
+ if totalClipNum + 2 >= finallyStuckPoints.count {
|
|
|
+ BFLog(message: "数据出现错误!!!查正")//155.318253
|
|
|
break
|
|
|
}
|
|
|
sticker.generateDefaultValues()
|
|
|
- sticker.timelineIn = Float64(finallyStuckPoints[totalClipNum])
|
|
|
- sticker.timelineOut = Float64(finallyStuckPoints[totalClipNum + 1])
|
|
|
+ sticker.timelineIn = Float64(finallyStuckPoints[totalClipNum + 1])
|
|
|
+ sticker.timelineOut = Float64(finallyStuckPoints[totalClipNum + 2])
|
|
|
totalClipNum = totalClipNum + 1
|
|
|
stickers.append(sticker)
|
|
|
BFLog(message: "测试人员创建 sticker crilp is in 图片 \(String(format: "%.6f", sticker.model_in)) out \(String(format: "%.6f", sticker.out)) ,分段素材时长:\(String(format: "%.6f", (sticker.out) - (sticker.model_in))) ,分段显示时长:\(String(format: "%.6f", (sticker.timelineOut) - (sticker.timelineIn))), timelineIN: \(String(format: "%.6f", sticker.timelineIn)) timelineOUT:\(String(format: "%.6f", sticker.timelineOut)) speedRate:\(sticker.speedRate)")
|
|
@@ -1258,7 +1257,7 @@ extension PQStuckPointEditerController {
|
|
|
// 推荐卡点数
|
|
|
var stuckPoints: Array = Array<Float>.init()
|
|
|
|
|
|
- var stuckPointsTemp = Array<Float>.init()
|
|
|
+ var pointsTemp = Array<Float>.init()
|
|
|
//
|
|
|
// 最后一个卡点时间(原推荐卡点的倒数第二位时间)
|
|
|
let lastPoint = Float((stuckPointMusicData!.rhythmSdata[0].pointTimes[stuckPointMusicData!.rhythmSdata[0].pointTimes.count - 1])) / Float(BASE_FILTER_TIMESCALE)
|
|
@@ -1266,7 +1265,7 @@ extension PQStuckPointEditerController {
|
|
|
for (index, dunshu) in stuckPointMusicData!.rhythmSdata[0].pointTimes.enumerated() {
|
|
|
if Float64(dunshu) / Float64(BASE_FILTER_TIMESCALE) > (stuckPointMusicData?.startTime ?? 0) && Float64(dunshu) / Float64(BASE_FILTER_TIMESCALE) < Float64(lastPoint) {
|
|
|
BFLog(message: "原所有卡点数:\(index) \(Float(dunshu) / Float(BASE_FILTER_TIMESCALE))")
|
|
|
- stuckPointsTemp.append(Float(dunshu) / Float(BASE_FILTER_TIMESCALE))
|
|
|
+ pointsTemp.append(Float(dunshu) / Float(BASE_FILTER_TIMESCALE))
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1279,10 +1278,10 @@ extension PQStuckPointEditerController {
|
|
|
*/
|
|
|
// 不丢
|
|
|
if seed == 1 {
|
|
|
- stuckPoints = stuckPointsTemp
|
|
|
+ stuckPoints = pointsTemp
|
|
|
} else {
|
|
|
// 根据档位要丢
|
|
|
- for (index, point) in stuckPointsTemp.enumerated() {
|
|
|
+ for (index, point) in pointsTemp.enumerated() {
|
|
|
if index % seed == 0 {
|
|
|
stuckPoints.append(point)
|
|
|
}
|
|
@@ -1311,6 +1310,12 @@ extension PQStuckPointEditerController {
|
|
|
|
|
|
func clipPoint(clipCount:Int,oldPoints: Array<Float>) {
|
|
|
BFLog(message: "拼接卡点数:\(clipCount)")
|
|
|
+
|
|
|
+ //如果是第一次拼接先补第0位
|
|
|
+ if(finallyStuckPoints.count == 0){
|
|
|
+ finallyStuckPoints.append(stuckPointsTemp.first ?? 0.0)
|
|
|
+
|
|
|
+ }
|
|
|
for i in finallyStuckPoints.count...clipCount + finallyStuckPoints.count {
|
|
|
|
|
|
if ((i % (oldPoints.count - 1)) != 0){
|
|
@@ -1327,10 +1332,7 @@ extension PQStuckPointEditerController {
|
|
|
func dealParameter(model: createStickersModel) {
|
|
|
// 清空上一次使用的卡点数据
|
|
|
finallyStuckPoints.removeAll()
|
|
|
- // 注意推荐时间位置和后面最近的卡点时间与0.3的关系
|
|
|
- // 保存丢卡点处理后的卡点信息推荐开始到最后倒数第二个
|
|
|
- let stuckPointsTemp: Array<Float>
|
|
|
-
|
|
|
+
|
|
|
// 已经取到的视频素材总长度,用于和原视频素材时长做对比,不够多加一个点
|
|
|
var useAssestDuration: Float = 0.0
|
|
|
switch model {
|
|
@@ -1360,7 +1362,7 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
|
|
|
// 拼接要使用的卡点信息
|
|
|
- finallyStuckPoints.append(stuckPointsTemp.first ?? 0.0)
|
|
|
+
|
|
|
clipPoint(clipCount:clipNum , oldPoints: stuckPointsTemp)
|
|
|
}
|
|
|
|
|
@@ -1450,12 +1452,7 @@ extension PQStuckPointEditerController {
|
|
|
BFLog(message: "卡点数据有错误!!!")
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
- if(finallyStuckPoints.count == 0){
|
|
|
- finallyStuckPoints.append(stuckPointsTemp.first ?? 0.0)
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+
|
|
|
//sticker.clipCount + 1 是都先补一位,当不用补时删除最后多的一位
|
|
|
clipPoint(clipCount: sticker.clipCount , oldPoints: stuckPointsTemp)
|
|
|
BFLog(message: "finallyStuckPoints\(finallyStuckPoints)")
|
|
@@ -1509,27 +1506,16 @@ extension PQStuckPointEditerController {
|
|
|
break
|
|
|
}
|
|
|
// 拼接图片所使用的时长.选择一组图片 按图片数量计算卡点的总时长
|
|
|
- var oneSelectImageDuration:Float = 0.0
|
|
|
if selectedImageDataCount > 0 {
|
|
|
- //二,最一个卡点在原数组中的位置,从这个位置开始拼接图片所要使用的卡点
|
|
|
- var pointIndex = stuckPointsTemp.firstIndex(where: { (point) -> Bool in
|
|
|
- (point == (finallyStuckPoints.last ?? 0).truncatingRemainder(dividingBy: (stuckPointsTemp.last ?? 0)))
|
|
|
- })
|
|
|
- pointIndex = (pointIndex ?? 0)
|
|
|
-
|
|
|
- var tempStartTime:Float = -1
|
|
|
- var tempEndTime:Float = -1
|
|
|
- for i in 0 ... selectedImageDataCount {
|
|
|
- let a = stuckPointsTemp[(i + Int(pointIndex ?? 0)) % stuckPointsTemp.count]
|
|
|
- let b = Float((i + Int(pointIndex ?? 0)) / stuckPointsTemp.count) * (stuckPointsTemp.first ?? 0)
|
|
|
- finallyStuckPoints.append(a + b)
|
|
|
- if(tempStartTime == -1){
|
|
|
- tempStartTime = a + b
|
|
|
- }
|
|
|
- tempEndTime = a + b
|
|
|
-
|
|
|
- }
|
|
|
- oneSelectImageDuration = tempEndTime - tempStartTime
|
|
|
+ clipPoint(clipCount:selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //全是图片时数组里放着的一定都是图片的使用的卡点
|
|
|
+ //定义一次循环的总时长
|
|
|
+ var oneSelectImageDuration:Float = 0.0
|
|
|
+ if(selectedDataCount == selectedImageDataCount){
|
|
|
+ oneSelectImageDuration = (finallyStuckPoints.last ?? 0) - (finallyStuckPoints.first ?? 0)
|
|
|
}
|
|
|
|
|
|
// 3)素材全是图片时如果时长 < 10s要做轮播处理
|