Selaa lähdekoodia

docs: 移除未采用的 lipsync-fal 对口型路线(仅测试过,未正式采用)

- 删除 references/lipsync-fal.md(fal.ai sync-lipsync 对口型路线)
- README 移除『对口型 Lip-Sync』小节、资源引用与目录结构中的 lipsync-fal.md 条目
- wan3-workflow.md 坑6 移除 C 方案(CosyVoice+ffmpeg+外部对口型)③,保留 ①改字绕过(实际采用)与 ②重截参考音频无效说明
- 保留 wan3 原生对口型相关描述(核心特性,非该外部路线)
zhengqi 1 viikko sitten
vanhempi
sitoutus
05022f7e77
3 muutettua tiedostoa jossa 1 lisäystä ja 79 poistoa
  1. 0 6
      README.md
  2. 0 72
      references/lipsync-fal.md
  3. 1 1
      references/wan3-workflow.md

+ 0 - 6
README.md

@@ -85,17 +85,12 @@ graph TD
 - 人工复核:对照 `references/compliance-check.md`(整合 `content-reviewer` 与 `medical-content-compliance-auditor` 两技能,按美业场景裁剪),输出「风险等级 + 法规依据 + 合规替换 + 结论三选一」报告。
 - 用户二选一:① 按建议改(回到处理口播重出)② 自己改(复检),循环直到通过。
 
-### 4. 对口型 Lip-Sync(lipsync-fal · C 方案)
-
-当 wan3 原生 TTS 出现单字发音缺陷(参考音频只克隆音色、不控发音)时,走 **C 方案**:剥离静音视频 + 外部 TTS(如百炼 CosyVoice)配音 + fal.ai 对口型。`references/lipsync-fal.md` 给出落地路线与模型选型——**首选 `fal-ai/sync-lipsync`**(保原时长、保原分辨率、能跳过无脸帧),规避 Wan3 编辑模式 15s 上限与 LatentSync/MuseTalk 的裁切/改分辨率问题。
-
 ## 资源引用
 
 - `references/elements.md` — 全部可参数化元素与可选项(门店风格 / 插画风格 / 整体色调等)。
 - `references/wan3-workflow.md` — 百炼 wan3 端点 / 鉴权 / 参考映射 / 编导分镜 prompt 范式 / 实战坑位(背景漂移、口播加词、单字发音、插画禁人物、生成超时续轮询等)。
 - `references/asset-collection.md` — 固定 4 项素材包清单 + 自动生成物料确认 + LOGO 合成 + 物料登记 + wan3 映射。
 - `references/compliance-check.md` — 敏感词 / 合规检测方法论与报告模板(Step 6 必跑)。
-- `references/lipsync-fal.md` — 对口型 Lip-Sync 落地路线(C 方案配音后)。
 - `references/store-spatial-index.md` — 门店空间索引与空间锚定硬规则(Z01–Z09 可用 / U01–U03 禁用 / 常用映射 / V4 开放公共区关系 / 6 条硬规则)。
 - `assets/script-template.md` — 单段结构化 Markdown 脚本骨架(含物料清单与 wan3 请求段),填充后即为交付物。
 - `assets/store-spatial-index/` — 门店 zone 实景图(10 张)+ V4 俯瞰图(2 张)+ 空间索引 JSON/HTML/MD + 说明(约 24MB)。
@@ -114,7 +109,6 @@ beauty-talk-science-video-script/
 │   ├── wan3-workflow.md           # 百炼 wan3 端点/鉴权/参考映射/编导分镜/实战坑位
 │   ├── asset-collection.md        # 固定 4 项素材 + 自动生成物料确认 + 物料登记
 │   ├── compliance-check.md        # 敏感词/合规检测方法与报告模板(Step 6 必跑)
-│   ├── lipsync-fal.md             # 对口型 Lip-Sync 落地路线(C 方案配音后)
 │   └── store-spatial-index.md     # 门店空间索引与空间锚定硬规则(Z01–Z09/U01–U03)
 ├── assets/
 │   ├── script-template.md          # 单段结构化脚本骨架(交付物模板)

+ 0 - 72
references/lipsync-fal.md

@@ -1,72 +0,0 @@
-# 对口型(Lip-Sync)落地路线 — fal.ai
-
-> 适用:C 方案(剥离静音视频 + 外部 TTS 配音)之后的「让口播音频对上人物嘴型」这一步。
-> 结论一句话:**优先用 fal.ai 的 `fal-ai/sync-lipsync`**,它保原时长、保原分辨率、能跳过无脸帧(插画穿插段)。
-
-## 1. 为什么不用 Wan3.0「视频编辑模式」做对口型
-
-- Wan3.0 编辑模式 `reference_audio` 上限 **15s**,30s 视频必须拆片 → 段间场景断裂、某段失败丢音频。
-- 它是「重绘画面」而非「只动嘴」,不适合"上传已有成片 + 外部音频"。
-
-## 2. fal.ai 上可用的「视频+音频 → 对口型」模型对比
-
-| 模型 ID | 输入 | 时长/分辨率表现 | 适用性 |
-|---|---|---|---|
-| **`fal-ai/sync-lipsync`** | `video_url` + `audio_url` + `model`(lipsync-1.9.0-beta) + `sync_mode` | ✅ **原时长保留、原分辨率保留** | ⭐ 首选,最稳 |
-| `fal-ai/latentsync` | `video_url` + `audio_url` (+loop_mode/seed/guidance_scale) | ≤40s($0.20/条) | ⚠️ 有人脸检测门槛,含无脸帧的视频会报 `face_detection_error` |
-| `fal-ai/musetalk` | `source_video_url` + `audio_url` | ❌ 会把 30.6s 裁成 27.4s、分辨率改 606x1080 | ✗ 裁尾句、质量差,弃用 |
-| `fal-ai/wav2lip` | (`video_url` + `audio_url`) | 未实跑 | 备用 |
-| `fal-ai/omnihuman/v1.5`、`fal-ai/veed/fabric/avatar` | 图片 + 音频 | — | ✗ 是"照片生成说话视频",重绘场景,不适用 |
-
-**选型经验(重要)**:视频里若混有**无脸帧**(卡通风插画穿插、产品特写、空镜),
-- LatentSync 采样到无脸帧 → 整体报 `No face detected` 拒绝;
-- MuseTalk 会裁切/改分辨率;
-- **sync-lipsync 逐帧处理、跳过无脸段,且保住原时长与原分辨率** → 这类混剪视频用它。
-
-> 另注:本项目的脸是 **AI 生成数字人**,检测器容易漏(LatentSync 就漏了),sync-lipsync 能识别。
-
-## 3. 调用方式(Python)
-
-```python
-import fal_client, requests, json
-
-# 新版包名是 fal_client(不是旧版 fal):pip install fal-client
-# 凭据走环境变量 FAL_KEY="KEY_ID:SECRET"
-
-video_url = fal_client.upload_file("input.mp4")   # ⚠️ 路径/文件名必须纯 ASCII
-audio_url = fal_client.upload_file("v4_16k.wav")
-
-result = fal_client.subscribe(
-    "fal-ai/sync-lipsync",
-    {"video_url": video_url, "audio_url": audio_url,
-     "model": "lipsync-1.9.0-beta", "sync_mode": "cut_off"},
-    with_logs=True,
-)
-url = result["video"]["url"]
-open("out.mp4", "wb").write(requests.get(url, timeout=600).content)
-```
-
-通用脚本:`去角质频率/fal_lipsync.py <model_id> <out.mp4> [video] [audio]`
-
-## 4. 输入预处理(推荐)
-
-```bash
-# 视频:统一到 25fps(MuseTalk/LatentSync 训练帧率),如需可冻结末帧补齐时长
-ffmpeg -y -i 静音成片.mp4 -vf "fps=25" -c:v libx264 -pix_fmt yuv420p -an input.mp4
-# 音频:转 16kHz 单声道(编码器标准输入)
-ffmpeg -y -i 配音.wav -ar 16000 -ac 1 v4_16k.wav
-```
-
-## 5. 踩坑清单
-
-1. **文件名必须纯 ASCII**:中文名 → `'ascii' codec can't encode ...` → SDK 回退 gcs → `Invalid storage type`。改 `v4_16k.wav` 即可。
-2. **新版 fal-client 导入名是 `fal_client`**,不是 `fal`。
-3. **账号锁定**:`403 {"detail":"User is locked. Reason: TOP_UP."}` = fal 账号需充值/绑卡,非 key 格式问题。
-4. **上传/推理鉴权自检**:`curl -s -o /dev/null -w "%{http_code}" https://fal.run/<model> -H "Authorization: Key $KEY" -H "Content-Type: application/json" -X POST -d '{}'` → 422=端点正常(参数校验失败),403=账号/key 问题。
-5. **查模型参数**:`https://fal.ai/api/openapi/queue/openapi.json?endpoint_id=<url-encoded model id>`(带 `Authorization: Key`)。
-
-## 6. 成本参考
-
-- sync-lipsync:按次(Sync.so 商业口播),单条 30s 量级仍远低于可灵 API 的 ¥25–36。
-- latentsync:≤40s = **$0.20/条**。
-- musetalk:约 **$0.04/次**(但本场景不可用)。

+ 1 - 1
references/wan3-workflow.md

@@ -145,7 +145,7 @@ python scripts/generate_video.py \
 
 - **坑4 · 场景背景漂移(长镜头/走位段背景被换房间)**:wan3 在 25–30s 长镜头或人物走位段,会把已锚定的门店背景自行换成陌生房间(品牌墙、吊灯、门全部消失,沙发变样)。**解法**:在「总体描述」+ 每个 Shot 里**逐段锚定该 zone 的参考图元素清单**(例如门厅 Z01:品牌墙「YIHEMEI 你的水光肌肤管理师」+ 丝带吊灯 + 白门 + 圆几绿植 + 白沙发;产品区 Z02:怡呵美发光字展柜 + 灯带层板 + 绿植),并在硬规则里写"人物未走位时背景禁止漂移成其他房间"。**关键**:人物真实经过的过渡空间(如走廊 Z05)**必须传实景图**,只靠俯瞰图 + 文字描述不够,否则模型会脑补出"幽灵硬件/第二个前台"。**zone 实景图与 Z01–Z09 可用区 / U01–U03 禁用区 / V4 开放公共区关系 / 6 条空间锚定硬规则见 `references/store-spatial-index.md`,图片在 `assets/store-spatial-index/`,按 zone 文件名选取对应图传入。**
 - **坑5 · 口播幻觉加词(句间/句末自行补词)**:TTS 会在口播文本外自行补词/补句(如"做好防晒"后凭空补"干皮",或把 prompt 表格里的"插画持续""窗口拉满"等元文本当台词念出)。**解法**:① prompt 内联**完整「口播定本」**作唯一台词依据(不止是引用文件名);② 显式负面示例"尤其禁止在『X』之后追加『Y』类词;禁止根据画面/主题自行补词";③ 明确写"prompt 其他文字(章节标题 / 表格表头 / 规格标注 / 结构说明)一律不出声"。
-- **坑6 · 单字发音缺陷(非多音字也读错)**:参考音频只克隆音色、**不控制单字发音**,个别字会稳定读错(例:"晒"shài→shi)。与坑3(多音字)不同,这连拼音标注都救不了。**解法**:① **改字绕过(最快,推荐救急)**——把易错字换成近义/同音字且字数不变(例:末句"不是只有大太阳才需要**防晒的**"→"…需要**防护的**"),不动节奏/时长;② 重截参考音频基本无效(wan3 本就不控发音,且无原 30s 素材时不可行);③ **C 方案根治**:本账号百炼 **CosyVoice API 已验证可用**(返回参数错而非权限拒绝,克隆路径可走)——走"不传 reference_audio 提交 wan3 出静音成片 + 克隆用户音色合成正确发音配音 + ffmpeg 二次合成 + 对口型(lipsync)"。
+- **坑6 · 单字发音缺陷(非多音字也读错)**:参考音频只克隆音色、**不控制单字发音**,个别字会稳定读错(例:"晒"shài→shi)。与坑3(多音字)不同,这连拼音标注都救不了。**解法**:① **改字绕过(最快,推荐救急)**——把易错字换成近义/同音字且字数不变(例:末句"不是只有大太阳才需要**防晒的**"→"…需要**防护的**"),不动节奏/时长;② 重截参考音频基本无效(wan3 本就不控发音,且无原 30s 素材时不可行)。
 - **坑7 · 插画内出现人物(两个主角并置)**:PIP 插画里若出现任何人物/人形轮廓,会与口播真人并置成"两个女主角"。**解法**:红线——插画只画机理示意 / 物品 / 皮肤特写 / 光线氛围,**不得出现任何人物、人形轮廓、手势、人影**(生成插画的 prompt 必须显式写"画面中严禁出现任何完整人物或人物形象")。
 - **坑8 · 生成超时续轮询**:`scripts/generate_video.py` 默认 `poll timeout=1200s`,30s 视频偶发耗时 >20 分钟仍 `RUNNING` → 脚本因超时而 `RuntimeError` 退出,但**阿里云 task 并未失败**。**解法**:保留 stdout 回显的 `[轮询] task_id=...`,用脚本周期性 `GET {api_base}/api/v1/tasks/{task_id}` 续轮询;`status=SUCCEEDED` 后 `extract_video_url` + `download`,**不必重提任务**。
 - **补 · 本账号百炼云端 ASR 不可用**:`qwen3-asr-flash`(SDK / 兼容模式 / 原生端点,均 400)与 `paraformer-v2` 文件转写(403 "current user api does not support synchronous calls",账号未开通)全部拒绝。**音频核对只能走本地 ASR**(funasr / faster-whisper,不外传素材),见上方"推荐流程·生成后 ASR 自查"。