From ecde6c9fdc5ff6f5f718366603115e1768984dc6 Mon Sep 17 00:00:00 2001 From: lmk <1095689763@qq.com> Date: Tue, 23 Jun 2026 17:52:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B8=B2=E6=9F=93=E7=9A=84bu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/scene_detect.py | 4 ++-- service/video/caption_service.go | 3 +-- service/video/concat_service.go | 9 ++++++++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/scripts/scene_detect.py b/scripts/scene_detect.py index 2e2c256..e01a40a 100644 --- a/scripts/scene_detect.py +++ b/scripts/scene_detect.py @@ -20,8 +20,8 @@ def detect_scenes(video_path: str, threshold: float) -> list[dict]: scenes = [] for start, end in scene_list: scenes.append({ - "start_time": start.seconds, - "end_time": end.seconds, + "start_time": start.get_seconds(), + "end_time": end.get_seconds(), }) return scenes diff --git a/service/video/caption_service.go b/service/video/caption_service.go index 424cfc8..72187c1 100644 --- a/service/video/caption_service.go +++ b/service/video/caption_service.go @@ -309,7 +309,7 @@ func (s *captionService) buildHTML(taskID, videoPath, audioPath string, elements sb.WriteString("* { margin: 0; padding: 0; box-sizing: border-box; }\n") sb.WriteString(fmt.Sprintf("body { width: %dpx; height: %dpx; overflow: hidden; background: #000; }\n", width, height)) sb.WriteString(".clip { position: absolute; }\n") - sb.WriteString(".text-element { font-family: \"Noto Sans SC\", \"Noto Sans CJK SC\", \"PingFang SC\", \"Microsoft YaHei\", Arial, sans-serif; text-align: center; display: flex; align-items: center; justify-content: center; white-space: pre-wrap; word-break: break-word; }\n") + sb.WriteString(".text-element { font-family: Arial, Helvetica, sans-serif; text-align: center; display: flex; align-items: center; justify-content: center; white-space: pre-wrap; word-break: break-word; }\n") sb.WriteString("@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }\n") sb.WriteString("@keyframes slideUp { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: translateY(0); } }\n") sb.WriteString("@keyframes slideLeft { from { opacity: 0; transform: translateX(40px); } to { opacity: 1; transform: translateX(0); } }\n") @@ -321,7 +321,6 @@ func (s *captionService) buildHTML(taskID, videoPath, audioPath string, elements sb.WriteString(".anim-scaleIn { animation: scaleIn 0.5s ease-out; }\n") sb.WriteString(".anim-pulse { animation: pulse 1.5s ease-in-out infinite; }\n") sb.WriteString("\n") - sb.WriteString("\n") sb.WriteString("\n") sb.WriteString("\n\n") diff --git a/service/video/concat_service.go b/service/video/concat_service.go index c0badb7..a8745bd 100644 --- a/service/video/concat_service.go +++ b/service/video/concat_service.go @@ -765,16 +765,23 @@ func downloadFile(ctx context.Context, rawURL, tempDir string) (string, error) { return "", fmt.Errorf("HTTP %d body=%s", resp.StatusCode, string(bodyBytes)) } + expectedSize := resp.ContentLength out, err := os.Create(savePath) if err != nil { return "", err } defer out.Close() - _, err = io.Copy(out, resp.Body) + written, err := io.Copy(out, resp.Body) if err != nil { os.Remove(savePath) return "", err } + + // 验证下载完整性:检查文件大小是否匹配 Content-Length + if expectedSize > 0 && written != expectedSize { + os.Remove(savePath) + return "", fmt.Errorf("下载不完整: 期望 %d 字节, 实际 %d 字节", expectedSize, written) + } return savePath, nil }