Files

104 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SKG TK 二创验证 — 初版 Plan
> ⚠️ 2026-05-13 已过时:实际进展见 `.memory/status.md`、关键决策见 `.memory/decisions.md`、SKG 网关能力见 `.memory/skg-gateway.md`
---
> intake 阶段 2026-05-12 输出,开发会话起点物。第一件事仍是跑 `/plan` 二次细化。
## 目标
跑通"TK 链接 → 带改写文案的成品视频"完整链路,验证 SKG AI 素材生产管线第二条思路的可行性。**不是产品化,是原型**——能跑、能看、能改一遍参数就够。
## 非目标(先不做)
- 不做用户系统 / 多人协作 / 权限
- 不做工单对接(验证完再谈合并主管线)
- 不做云端部署(本地 4290 端口跑)
- 不做批量 / 队列(单条手动触发)
- 不做产品信息库(产品信息每次手填或贴文本)
## 七步管线 — 原子任务拆解
### 步骤 1 — TK 视频下载
- [ ] 输入 TK 链接TikTok 国际版,英文素材为主)
- [ ] `yt-dlp` 下载到本地临时目录,返回 mp4 路径 + 元数据
- [ ] 失败处理:限流 / 链接失效 / 私密视频,给明确报错
- 风险TK 反爬可能要 cookie / 代理,本地验证阶段可先手动准备
### 步骤 2 — 视频/音频拆轨
- [ ] `ffmpeg` 拆音轨为 wav16kHz 单声道,便于 ASR
- [ ] 视频保留原 mp4记录时长 / 帧率 / 分辨率
- [ ] 拆轨产物存 `temp/<jobId>/` 下,便于复用
### 步骤 3 — 关键帧抽取
- [ ] **自动**:均匀采样 + 场景切换检测ffmpeg `select='gt(scene,0.4)'`),返回候选帧 ≥ 10
- [ ] **手动**UI 时间轴拖动滑轨,预览缩略图,点击加入候选
- [ ] **去重 / 选满**:用户最多保留 10 张,已选满给提示
- [ ] 输出10 张 jpg + 时间戳清单
### 步骤 4 — ASR + 实时翻译
- [ ] 音轨 → **Gemini** ASR带时间戳分段
- [ ] 英文原文逐段输出,旁边实时跑中文翻译流式输出
- [ ] UI左右双栏英 / 中),段落级时间戳可点击跳到对应视频时间
### 步骤 5 — 文案改写
- [ ] 输入区:**产品信息**SKG 自家产品关键卖点,自由文本框)+ **改写指令**(保留原结构 / 重写 / 加 CTA 等几个 preset
- [ ] **Gemini** 拿原英文转录 + 产品信息 → 输出改写后中文文案(或中英双版)
- [ ] 段落级 diff 视图:原文 vs 改写,可手动微调
### 步骤 6 — 关键帧 → 生图
- [ ] 关键帧勾选 1 张作为参考
- [ ] 生图入口二选一:**nano-banana-pro**Gemini 3 Pro Image默认/ **GPT Image**
- [ ] prompt 自动从该帧的改写文案片段 + 产品信息合成,可手改
- [ ] 输出图片入画廊网格,可多次重生
### 步骤 7 — 生图 → 生视频 + 文案合成
- [ ] 单张图作为视频生成首帧 / 参考图
- [ ] **视频模型三选一**Seedance / Kling / Veo3API 抽象层,统一 prompt schemakey 配置文件切换)
- [ ] 生视频 prompt = 改写文案对应段落 + 镜头描述preset缓推 / 摇 / 静态)
- [ ] **文案合成**:生成的视频片段 + 改写文案做字幕 / 配音TTS 用 Gemini或先只做字幕→ ffmpeg 合成最终 mp4
## 数据流 / 状态
每次跑一个 **Job**,状态机:
```
created → downloading → splitting → frames_extracted
→ transcribed → rewritten → image_generated
→ video_generated → composed → done | failed
```
状态 / 中间产物存 `jobs/<jobId>/state.json` + 文件落盘,刷新页面能恢复。
## 技术栈拍板
| 层 | 技术 | 备注 |
|---|---|---|
| 前端 | Next.js 16 + Tailwind 4 + shadcn/ui + Framer Motion | 风格库 04 同栈 |
| API | Next.js API routes轻任务 + Python FastAPI重任务yt-dlp / ffmpeg / ASR | 同机部署 |
| 任务编排 | 先同步阻塞 → 跑通后再上 BullMQ / Celery | 不预扩 |
| 模型接入 | Poe API 优先OpenRouter 备用(按 `feedback_poe-api-priority.md` | 单独 `lib/ai/` 抽象层 |
| 存储 | 本地文件系统 `jobs/<jobId>/` + SQLite 存元数据 | 验证阶段够用 |
## 关键风险 / 待澄清
1. **TK 下载合规** — 本地验证 OK量产前需要法务点头
2. **Veo3 / Seedance / Kling 的 API 可用性** — Poe 上 Veo3 已知可调,另外两家要查
3. **生视频成本** — 单次 5-10 秒视频生成 $0.5-$2验证阶段控量
4. **字幕烧录 vs 旁白配音** — 步骤 7 默认只做字幕,配音作为 P2
## 第一冲刺范围MVP 最小可演)
只做 **步骤 1+2+3+4** 端到端:
- 输入 TK 链接 → 拿到视频 → 拆出 10 张关键帧 + 双语转录
- UI 用 04 风格起骨架hero + 关键帧画廊 slider + 左右双语栏)
- **不做** 步骤 5/6/7等 1-4 跑通再扩
## 开发会话第一句
```
按 CLAUDE.md + .memory/plan.md先 /plan 二次细化第一冲刺范围(步骤 1-4
然后 /ui-ux-pro-max --design-system 出 token用 04 风格起 Next.js 骨架,端口 4290。
```