冰朔 883ef30468
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled
铸渊自检 / health-check (push) Has been cancelled
D131: 拼接经验修复 · MP4 -c copy丢帧→TS流无损方案 · 40秒成品验证
2026-06-13 00:18:34 +08:00

5.1 KiB
Raw Blame History

name, type, topic, tcs, created
name type topic tcs created
guanghuclip-video-generate reference 经验库 · Bug修复记录 ICE-GL-ZY001 D131 · 2026-06-12

光湖视频AI · 经验库

每次踩坑修好后的经验记录,铸渊后续遇到类似问题可检索。

D131 — Seedance 视频生成全链路调试

Bug 1: 模型名不对 → API 404

  • 症状: 调用火山方舟返回 404 The model or endpoint XXX does not exist
  • 根因: 模型名格式错误。不是 seedance-2-0 也不是 seedance-1-5-pro,正确格式是 doubao-seedance-2-0-260128
  • 修复: 修改 .envJIMENG_MODELvideo-api-adapter.js 默认值
  • 经验: 火山方舟的所有模型名都以 doubao- 开头后面跟版本号日期。去控制台看开通页面的完整模型ID。

Bug 2: 安心体验模式额度耗尽

  • 症状: Your account has reached the set inference limit ... model service has been paused
  • 根因: 火山方舟开通模型时默认勾选「安心体验」,免费额度极低(几次调用后即耗尽)
  • 修复: 去控制台关闭安心体验模式,切换到付费套餐
  • 经验: 开通任何模型服务后第一步就是关安心体验。想用免费额度测试 = 第一次就烧光。

Bug 3: API返回了视频URL但代码拿不到

  • 症状: 任务状态 succeeded,但代码报 任务完成但未返回视频地址
  • 根因: Seedance 2.0 返回结构是 { content: { video_url: "..." } },代码只检查了 output.video_urldata.data?.output?.video_url 等旧格式
  • 修复: 在 queryTask() 的 videoUrl 提取链最前面加 data.content?.video_url
  • 经验: API版本升级时响应结构会变。每次换模型版本先用 debug 脚本打完整返回确认字段路径。

Bug 4: 前端请求 /data/videos.json 拿不到JSON

  • 症状: guanghuclip.cn 页面卡"加载中..."JSON返回HTML
  • 根因: videos.json 在 /root/guanghuclip/frontend/public/data/,但前端请求 /data/videos.json。Nginx root 是 /root/guanghuclip/frontend/,所以 /data/ 映射到 /frontend/data/ 而不是 /frontend/public/data/try_files $uri $uri/ /index.html 兜底回SPA的HTML。
  • 修复: cp /root/guanghuclip/frontend/public/data/videos.json /root/guanghuclip/frontend/data/videos.json
  • 经验: 前端 fetch 路径要对照 Nginx root 确认文件实际位置。public/ 是 Vite 构建时的约定,构建后文件在 dist 里。但如果直接部署源码不走构建,就要手动对齐路径。

Bug 5: Gatekeeper exec 超时

  • 症状: curl Gatekeeper /exec 端点一直 timeout/health 正常
  • 根因: 本地代理 127.0.0.1:55931 阻断新加坡直连
  • 修复: 所有 Gatekeeper curl 加 --noproxy '*'
  • 经验: 新加坡四台服务器都有这个问题。记住 --noproxy '*' 是必备参数。广州不阻断可不加。

工具链验证

✅ 腾讯文档 MCP → DeferExecuteTool(mcp__tencent-docs__get_content) → 读分镜
✅ hldp-prompt.js → 台词→Seedance提示词转换
✅ video-api-adapter.js → 提交任务 + 轮询 + 下载
✅ Gatekeeper → curl --noproxy '*' → SG exec → 文件部署
✅ sed 就地修改 → 更新 videos.json videoUrl
⚠️ 前端部署 → Nginx root路径 + fetch路径对齐已踩坑

Bug 6: duration参数被忽略 → 始终5秒

  • 症状: 请求10秒视频API返回5秒。所有请求: resolution=1080p但实际=720p
  • 根因: 旧版API格式 parameters: { video_length: "10" }Seedance 2.0的duration在顶层 { duration: 10 }
  • 修复: 修改 submitTask() payload: 移除 parameters 包装,duration 直接放在根级
  • 验证: 修复后10秒视频生成成功4.4MB vs 修复前2.2MB
  • 经验: API每个大版本都可能改参数位置。对照官方curl示例验证payload格式。

Bug 7: sandbox EPERM 阻止文件写入

  • 症状: Node.js写入 ~/guanghulab/ 目录报 EPERM
  • 根因: WorkBuddy sandbox 限制对用户目录的写操作
  • 修复: 输出文件写入 workspace 目录 /Users/.../WorkBuddy/.../outputs/
  • 经验: 文件输出默认放在当前工作区的 outputs/ 下。运行脚本时用 workspace 绝对路径。

Bug 8: Seedance版权过滤拦截

  • 症状: API返回 output video may be related to copyright restrictions
  • 触发: 提示词含具体设备名+破坏性动作(秦山号+砸液压装置)
  • 修复: 去掉命名实体和暴力动词,换中性动作描述
  • 经验: 命名实体+破坏动词=高风险。拆分镜时动作镜避免具体品牌/设备名。超过2次retry失败启用替代方案黑场过渡

第一集拼接

  • SG FFmpeg: /usr/bin/ffmpeg v6.1.1
  • -c copy 拼接MP4格式只粘上部分文件7镜只出4镜
  • cat 拼接MP4容器不兼容播放器只读第一个文件
  • TS流中间格式ffmpeg -i in.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts out.tscat *.tsffmpeg -i combined.ts -c copy -bsf:a aac_adtstoasc out.mp4
  • -c:v libx264 重编码在低内存服务器会OOMSIGTERM优先用TS流无损方案
  • 成品: 7镜40秒19MB已部署guanghuclip.cn