This commit is contained in:
2026-03-04 04:01:48 +08:00
parent 16043dd52e
commit af0b0c5070
2 changed files with 31 additions and 14 deletions

View File

@@ -283,8 +283,9 @@ public class BatchProduceAlignment {
Integer fileDuration = material.getFileDuration(); Integer fileDuration = material.getFileDuration();
int startOffset = 0; int startOffset = 0;
int endOffset = duration; int endOffset = duration;
int actualDuration = duration; // 实际截取时长
if (fileDuration != null && fileDuration > duration) { if (fileDuration != null && fileDuration >= duration) {
// 有实际时长且足够:随机起点范围 0 到 (实际时长 - 截取时长) // 有实际时长且足够:随机起点范围 0 到 (实际时长 - 截取时长)
long randomSeed = ((material.getFileId() != null ? material.getFileId() : i) * 1000000L) + long randomSeed = ((material.getFileId() != null ? material.getFileId() : i) * 1000000L) +
(videoIndex * 10000L) + (material.getFileUrl().hashCode() % 1000); (videoIndex * 10000L) + (material.getFileUrl().hashCode() % 1000);
@@ -294,14 +295,20 @@ public class BatchProduceAlignment {
endOffset = startOffset + duration; endOffset = startOffset + duration;
log.debug("[ICE][随机截取] fileId={}, fileDuration={}s, In={}, Out={}", log.debug("[ICE][随机截取] fileId={}, fileDuration={}s, In={}, Out={}",
material.getFileId(), fileDuration, startOffset, endOffset); material.getFileId(), fileDuration, startOffset, endOffset);
} else if (fileDuration != null && fileDuration < duration) {
// 素材时长不足:使用素材全部时长,避免超出范围
actualDuration = fileDuration;
endOffset = fileDuration;
log.warn("[ICE][素材时长不足] fileId={}, 请求{}s, 实际{}s, 将使用全部时长",
material.getFileId(), duration, fileDuration);
} else { } else {
// 无时长或时长不足从0开始截取兜底 // 无时长信息从0开始截取兜底ICE可能会失败
log.debug("[ICE][兜底截取] fileId={}, fileDuration={}, In=0, Out={}", log.warn("[ICE][无时长信息] fileId={}, In=0, Out={}, ICE可能会失败",
material.getFileId(), fileDuration, duration); material.getFileId(), duration);
} }
log.debug("[ICE][添加视频片段][视频{}: {}, In={}, Out={}, TimelineIn={}, TimelineOut={}]", log.debug("[ICE][添加视频片段][视频{}: {}, In={}, Out={}, TimelineIn={}, TimelineOut={}]",
videoIndex + 1, videoUrl, startOffset, endOffset, timelinePos, timelinePos + duration); videoIndex + 1, videoUrl, startOffset, endOffset, timelinePos, timelinePos + actualDuration);
// 构建视频片段(带 In/Out 参数) // 构建视频片段(带 In/Out 参数)
JSONObject videoClip = new JSONObject(); JSONObject videoClip = new JSONObject();
@@ -309,7 +316,7 @@ public class BatchProduceAlignment {
videoClip.put("In", startOffset); videoClip.put("In", startOffset);
videoClip.put("Out", endOffset); videoClip.put("Out", endOffset);
videoClip.put("TimelineIn", timelinePos); videoClip.put("TimelineIn", timelinePos);
videoClip.put("TimelineOut", timelinePos + duration); videoClip.put("TimelineOut", timelinePos + actualDuration);
// 添加裁剪效果9:16竖屏输出 // 添加裁剪效果9:16竖屏输出
// 假设源素材为1920x108016:9可根据实际情况调整 // 假设源素材为1920x108016:9可根据实际情况调整
@@ -341,7 +348,7 @@ public class BatchProduceAlignment {
audioClip.put("In", startOffset); audioClip.put("In", startOffset);
audioClip.put("Out", endOffset); audioClip.put("Out", endOffset);
audioClip.put("TimelineIn", timelinePos); audioClip.put("TimelineIn", timelinePos);
audioClip.put("TimelineOut", timelinePos + duration); audioClip.put("TimelineOut", timelinePos + actualDuration);
audioClip.put("Effects", new JSONArray() {{ audioClip.put("Effects", new JSONArray() {{
add(new JSONObject() {{ add(new JSONObject() {{
put("Type", "Volume"); put("Type", "Volume");
@@ -350,7 +357,7 @@ public class BatchProduceAlignment {
}}); }});
audioClipArray.add(audioClip); audioClipArray.add(audioClip);
timelinePos += duration; timelinePos += actualDuration;
} }
// 构建时间线 // 构建时间线

View File

@@ -318,20 +318,30 @@ public class MixTaskServiceImpl implements MixTaskService {
for (String jobId : jobIds) { for (String jobId : jobIds) {
try { try {
String status = iceClient.getMediaProducingJobStatus(jobId); String status = iceClient.getMediaProducingJobStatus(jobId);
log.debug("[MixTask][jobId状态] taskId={}, jobId={}, status={}", taskId, jobId, status);
if ("Success".equalsIgnoreCase(status)) { if ("Success".equalsIgnoreCase(status)) {
successJobIds.add(jobId); successJobIds.add(jobId);
} else if ("Failed".equalsIgnoreCase(status) || "Failure".equalsIgnoreCase(status)) { } else if ("Failed".equalsIgnoreCase(status) || "Failure".equalsIgnoreCase(status)) {
failedJobIds.add(jobId); failedJobIds.add(jobId);
} else if ("Running".equalsIgnoreCase(status) || "Processing".equalsIgnoreCase(status)) { } else if ("Running".equalsIgnoreCase(status) || "Processing".equalsIgnoreCase(status)
|| "Producing".equalsIgnoreCase(status) || "Analyzing".equalsIgnoreCase(status)) {
// 阿里云ICE状态Running, Processing, Producing, Analyzing 都算运行中
runningJobIds.add(jobId); runningJobIds.add(jobId);
} else if ("Pending".equalsIgnoreCase(status)) { } else if ("Pending".equalsIgnoreCase(status) || "Init".equalsIgnoreCase(status)) {
// Init 是初始化状态,也属于待处理
pendingJobIds.add(jobId); pendingJobIds.add(jobId);
} else if ("Canceled".equalsIgnoreCase(status)) {
// 取消的任务算失败
failedJobIds.add(jobId);
} else { } else {
// 未知状态,继续等待,不直接算失败
log.warn("[MixTask][未知状态] taskId={}, jobId={}, status={}", taskId, jobId, status);
unknownJobIds.add(jobId); unknownJobIds.add(jobId);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("[MixTask][查询jobId状态失败] taskId={}, jobId={}", taskId, jobId, e); log.error("[MixTask][查询jobId状态异常] taskId={}, jobId={}", taskId, jobId, e);
failedJobIds.add(jobId); // 查询异常不应该直接当作失败可能是临时网络问题放入unknown等待下次检查
unknownJobIds.add(jobId);
} }
} }
@@ -340,8 +350,8 @@ public class MixTaskServiceImpl implements MixTaskService {
taskId, total, successJobIds.size(), failedJobIds.size(), runningJobIds.size(), pendingJobIds.size(), unknownJobIds.size()); taskId, total, successJobIds.size(), failedJobIds.size(), runningJobIds.size(), pendingJobIds.size(), unknownJobIds.size());
// 综合判断任务状态 // 综合判断任务状态
if (!runningJobIds.isEmpty() || !pendingJobIds.isEmpty()) { if (!runningJobIds.isEmpty() || !pendingJobIds.isEmpty() || !unknownJobIds.isEmpty()) {
// 任一运行中待处理 → 更新进度,继续等待 // 任一运行中待处理或未知状态 → 更新进度,继续等待
int currentProgress = task.getProgress() != null ? task.getProgress() : 0; int currentProgress = task.getProgress() != null ? task.getProgress() : 0;
int newProgress; int newProgress;
if (currentProgress < 50) { if (currentProgress < 50) {