一个人的口播视频生产线:从转录到成片,全程不开云 API
一个人的口播视频生产线:从转录到成片,全程不开云 API
一、先看清对手是谁
这个项目服务一类非常具体的人:已经在抖音、视频号或小红书发布过至少 5 条真人口播,明确知道自己卖什么,但过去一个月因为写稿和拍摄成本而断更的本地服务型老板。
注意这个画像里的每一个限定词。「至少 5 条」意味着他验证过口播对自己的生意有用;「明确知道卖什么」意味着内容方向不是问题;「断更」才是要解决的病。开餐饮的、做家政的、经营健身房的老板——他们不缺表达欲,缺的是每天把表达变成成片的力气。
在设计文档里我写过一句后来反复提醒自己的判断:
真正的竞争对手不是另一个数字人产品,而是"今天先不发"。
要减少的不是"一次拍摄的难度",而是"每天重新开始一次"的阻力。这条判断决定了后面所有的产品决策:既然对手是惰性,那么产品要交付的就不是"一个能生成视频的软件",而是一个结果——今天不用出镜,仍然有一条内容准确、像自己说话、可以放心发布的视频。
所以首版干脆不是软件。它是一项人工协助服务,叫「7 天口播验证包」:
- 帮老板完成本人数字人、声音和业务事实包的建档;
- 连续 7 天,老板每天提供参考视频或主题;
- 每天交付一版待审核文案和一条最终成片;
- 记录老板修改了什么、是否发布、为什么不发布。
定价三千到五千。成功判据写得很硬:3 位真实老板付费验证、每人至少批准并实际发布 5 条、至少 2 位愿意为下一周期续费。对老板的承诺浓缩成一句话——让他从"今天要不要拍"变成"今天批准哪一稿"。
如果老板没有连续使用和发布,继续开发完整软件没有意义。这是整个项目的第一性检验。
二、边界即人品
做 AI 生成人物的 产品,最容易翻车的不是技术,是没想清楚不做什么。设计阶段我给自己列了八条 Non-Goals,每条都有明确的原因:
- 不自动抓取任意平台视频——平台规则风险;
- 不做原样洗稿——保留与参考文案的相似度拦截,相似度大于 0.7 直接打回,n-gram 和 embedding 双通道检测,最多打回三次;
- 不自动发布到抖音/视频号/小红书——账号安全的风险不该由产品替用户承担,而且发布这个动作本身是老板和观众之间的契约;
- 不做无审核批量生成并发布;
- 不克隆非本人或未经单独授权的肖像和声音——这一条没有例外;
- 首版不碰医疗、金融、法律效果承诺——AI 幻觉加上行业监管,是双重雷区;
- 首版不做多人协作、矩阵账号、复杂数据分析;
- 不训练自有基础模型。
其中"防洗稿"这一条值得展开。参考视频进来后,系统会做转写和结构提取,但生成文案时必须结合老板自己的业务事实包重写,并且过相似度拦截。产品帮老板"像自己说话",不帮老板抄别人说话。这条边界后来直接写进了代码,不是一句口号。
还有一个容易被忽略的诚实条款:**不接受单张照片做商用品质承诺。**一张照片适合做演示,但更容易出现表情僵硬、姿态单一、嘴型和身份一致性问题。所以照片数字人在这个产品里的定位永远是"演示级",商用品质需要本人真实视频素材。把丑话说在前面,比售后救火便宜一百倍。
三、第一条架构决策:适配器
2026 年 6 月 17 日,项目立项第五天,我写下了第一份架构决策记录(ADR 0001):数字人、声音、文案模型全部通过适配器模式接入。
规则很硬:业务代码只依赖 VoiceAdapter / AvatarAdapter / ScriptAdapter 三类接口,不依赖任何具体引擎;新增引擎等于新增一个适配器实现,而不是修改核心链路;每个适配器独立做许可证审计。
当时并不知道这个决策后来会救我一命。三个月后复盘,正是这个模式让我能同时保留两条技术路线、随时用实测数据投票、把淘汰的引擎降级为设置页里的一个可切换选项——上层业务代码一行不动。
围绕适配器,我把系统切成九个模块,每个模块有独立的 README、spec 和合规三件套:
| 模块 | 职责 |
|---|---|
| Identity & Consent | 实名、单独同意、授权范围、撤销删除——必须先做,不能后补 |
| Business Truth Pack | 可公开业务事实 + 禁用承诺,文案生成的事实来源 |
| Reference Analyzer | 转写、结构提取、相似度检查 |
| Script Agent | 结合参考结构和业务事实重写文案 |
| Voice Adapter | 声音克隆引擎封装 |
| Avatar Adapter | 数字人引擎封装 |
| Composer | 字幕、封面、BGM、显式 + 隐式 AI 标识 |
| Job Orchestrator | 状态、排队、重试、失败恢复 |
| Audit & Deletion | 记录授权/批准/生成/下载/删除全链路 |
九个最小数据对象里,ConsentRecord 和 AuditEvent 被标注为"合规底线,不是可选"。业务事实包分七类:公司产品介绍、目标客户、可公开案例、价格优惠、禁止承诺、固定 CTA、品牌语气与老板常用表达。AI 改写文案时只准引用这里的事实——这是防止幻觉进商业承诺的机制化做法,而不是提示词里的一句"请不要编造"。
四、写在状态机里的良心
整个系统的核心是一个十状态的任务状态机:
CREATED → TRANSCRIBED → SCRIPT_DRAFTED → USER_APPROVED
→ VOICE_RENDERED → AVATAR_RENDERED → COMPOSED → READY
(外加 FAILED / CANCELLED 两个逃逸态)
**USER_APPROVED 是合规硬关口:用户未批准文案前,禁止任何渲染。**这句原话写在状态机模块的第一行 docstring 里。渲染前置校验会直接抛错:“用户未批准文案(USER_APPROVED),禁止渲染。”
为什么把一个产品流程写成状态机,而不是几个函数调用?因为状态机有三个函数调用给不了的性质:
**第一,断点续跑。**每个状态落库在 SQLite。渲染到一半崩了,任务标记 FAILED,可以从失败点之前的最后一个成功状态恢复,不让用户从头再来。FAILED 允许回退到任一前序成功状态,按记录里的阶段产物决定回退目标。
**第二,合法路径穷举。**什么转换是允许的,全部显式声明。没有写在转换表里的操作,代码层面就做不了。后来发现 READY 状态没有合法的重合成路径(只有取消),修这个问题的方法不是绕过状态机手工改数据库,而是给 READY → COMPOSED 增加一条合法转换,Web 详情页加「重新合成」按钮,CLI 加 recompose 命令,并且每次走这条路径都写审计事件。修 bug 的正确姿势是修状态机,不是绕过它。
**第三,审计友好。**每次状态流转都是一条审计记录。谁在什么时间批准了什么文案、生成了什么内容、下载了几次——将来商业上线时,这些记录就是合规的证据链。
AI 可以干活,但替老板对公众说话的授权,必须留给人。这句话不是价值观装饰,它是状态机里的一行代码。
五、两条路线的三次反转
技术路线的选择上,这个项目经历了教科书级别的反复。完整讲出来,因为它展示了"决策要跟着前提走,而不是跟着面子走"。
第一版决策:纯 API(ADR 0002)
6 月 18 日,我核对了 2025-2026 的数字人 API 行情:硅基智能 1999 元起建档(1:1 克隆),单条 20-30 元;腾讯智影 7999 元/首年;百度智能云 20 元/次;阿里云 CosyVoice 声音克隆建档免费,每条 6 分钱。对比本地方案:一张 RTX 4070 云 GPU 月租就要 1500-2500 元。
当时的判断:服务 3-50 个老板的早期阶段,API 月费远低于 GPU 月租,上线快、合规风险低(厂商已备案)、固定成本低。毛利测算也站得住:首单毛利 800-2800 元(27%-56%),续费月订阅 1500-2500 元、月成本 600-900 元,毛利 60% 以上。我给自己留了切换条件:10-15 个活跃老板、日均一条时,本地路线开始反超。
当时写下的一句话后来被证明非常有先见之明:“我们的核心竞争力还是把所有的东西串联在一起,然后卖给客户。至于其他的环节,能轻则轻。”
代价也写清楚了:厂商锁定(硅基模型不可导出,停服或涨价意味着重新付 1999、重新录制、重签授权)、单条 20-30 元 vs 本地 1-2 元、需签 DPA。
静默期与前提崩塌
从 6 月 20 日到 9 月 5 日,项目安静了两个半月。demo 素材躺在根目录,代码没动。这是独立开发者最熟悉的节奏——生活里有别的事,项目进了冷冻仓。
9 月初重新拾起来时,我把 ADR 0002 的四个前提逐条检查,发现三个已经变了:
- **客户没落地。**零收入之前,每个老板 1999 元的建档费是纯现金风险——这个成本要我先垫。
- **最关心的环节在 API 路线上结构上不可实现。**我想做的"口型/眼神与本人素材对齐",本质是对本人视频做唇形替换;而 API 数字人是重建一个形象,不是对齐本人素材。花钱也买不到。
- **本机验证通过了。**在 MacBook Air M4 上,VoxCPM2 声音克隆实测可用(只复用方法,不复制任何密钥)。
第二版决策:开源本地先行(ADR 0003)
9 月 6 日,ADR 0003 落地,方向反转:**混合路线——开源本地引擎先行,API 作为兜底。**五维对比表(2026-09-06 原表):
| 维度 | 纯 API | 开源本地 |
|---|---|---|
| 单条成本 | 20-30 元 + 语音 6 分 | 本机≈电费;云 GPU 0.2-0.5 元;含摊销 1-2 元 |
| 建档 | 1999 元/老板,不可导出 | 素材 1-2GB;本机 0 元 |
| 画质上限 | 厂商定档,无法保留本人口型 | “原视频换口型"唯一可实现于此路线 |
| 合规 | 厂商已备案,需 DPA | 数据全程本地、删除链路最短;义务全自担 |
| 周期 | 注册 1-3 天 + 集成 1-2 周 | 最小闭环 1-2 周;含口型再加 2-4 周 |
关键在于:**两条路线通过适配器并存,不互斥,可以按老板逐人选择。**ADR 0002 的切换条件框架保留,只是方向反了过来。API 兜底的触发条件也写死:开源画质或工期不满足、客户指定厂商级形象、开源引擎许可证阻塞——按单启用硅基智能,1999 建档费摊进 3000-5000 的服务包定价。
三次反转不是摇摆,是同一套决策框架在不同前提下的三次求值。前提变了还死守旧结论,那才叫摇摆。
六、一场全灭的引擎选型
开源路线的核心风险是:照片数字人引擎,Mac M4 本机到底能不能跑出能看的东西?9 月 7-8 日,我搭了 bake-off 实测流程。测试素材:一张 AI 生成的正脸照(无真人授权问题)+ 一段 VoxCPM2 克隆音色的 20 秒中文口播音频——用自家声音适配器的产物测数字人适配器,顺便 dogfood。
四道判据,层层淘汰:
- 许可证淘汰制(Sonic 因 CC BY-NC-SA 直接出局);
- MPS 可跑性(不 OOM 跑完 30 秒片段);
- 性能红线(30 秒片段 ≤15 分钟墙钟);
- 质量四维盲评(口型/伪影/头动/清晰各 5 分制,总分 ≥12/20 且无单项 ≤1,三帧采样交视觉模型盲评)。
结果是一场罕见的全灭。
SadTalker(Apache-2.0):为了在 MPS 上跑通打了 5 处补丁,包括上游一个拿宽度限制高度的 bug。5 秒 smoke 跑通用了 2 分 34 秒;26 秒全长跑了 14 分 06 秒,30 秒外推约 16 分钟,性能临界超标。更致命的是质量:三帧采样全部报"嘴部大片深色乱码纹理”,smoke 对照发现规律——一旦张嘴露齿,渲染即崩坏。256 模型的口内渲染是系统性硬伤。得分:口型 1 / 伪影 1 / 头动 3 / 清晰 2 = 7/20,质量淘汰。
EchoMimicV3(代码 + 权重双 Apache-2.0,三候选中许可证最干净):权重约 25GB,MPS 补丁 8 处。3.08 秒音频、77 帧、720×1216,去噪 8 步耗时 1 小时 57 分 42 秒——平均每步 812 秒。30 秒片段外推约 19 小时,超 15 分钟判据两个数量级。质量盲评三帧 13/9/9,均值 10.3/20,低于 12 分门。还有一个诡异现象:三帧嘴周均报告"字幕状/叠字"伪影——而引擎原始输出根本不含字幕。**耗时 + 质量双淘汰。**换算下来约 38 分钟才能渲染 1 秒视频。
Ditto(Apache-2.0,879 星):预检通过,但推理默认走 TensorRT,Apple Silicon 需要一个未合并的 PR。暂缓。
全灭之后怎么办
三个候选,两个淘汰一个暂缓。这时候最容易犯的错误是"再找一个凑合的凑合"。
我做的决定是:接受全灭,产品默认引擎切到 passthrough——照片定格 + 音频播放的兜底方案,EchoMimicV3 适配器保留,降级为设置页里可切换的"演示级"引擎。云 GPU 降级路径和分段渲染另立 ADR 再议。
这个决定的背后是 ADR 0004 里的一句话:照片数字人定格在"演示级",守住"不做单张照片商用承诺"的红线;真正要攻克的口型对齐(SadTalker-Video-Lip-Sync 那种"保留原视频只重绘口型"的路线,最对症)走原视频素材,不走照片。
选型不做感觉派。跑分、门线、淘汰、兜底——这套流程后来成为项目里所有引擎决策的标准动作。20 个开源参考项目按流水线环节分好组(提取/改写/声音/要素/口型),每个标注星数、许可证风险和对应模块,GPT-SoVITS 61.6k 星但预训练权重要单独核验、fish-speech 是 CC-BY-NC 商用需联系、Duix-Avatar 超过 1000 MAU 要商业授权——星数说明流行度,许可证才说明能不能用。
七、被 25GB 权重教做人
开源路线听起来轻巧,直到你开始拉权重。EchoMimicV3 一家的依赖就是约 25GB:Wan2.1-Fun 基座 19.8GB(其中 T5-xxl 11.4GB、CLIP 4.8GB、VAE 0.5GB、DiT 3.1GB),外加 flash transformer 3.7GB 和 chinese-wav2vec2 1.5GB。
直接下载是灾难级的慢。换成 aria2c 多线程拉取后提速约 17 倍。权重到位之后还有 MPS 的内存问题:Apple 统一内存要同时伺候基座和推理,只能分阶段释放——T5 编码完释放、CLIP 用完释放、DiT 逐块搬——8 处补丁最终固化成 scripts/echomimic-mps.patch,上游哪天合并了再简化。配套的还有权重清单文件(em3_weights_manifest.txt)和 setup_engines.sh,让"换一台机器复现环境"从口述史变成可执行脚本。
这些脏活的回报在九个月后才会显现:任何人拿到仓库,跑两个脚本就能站在同样的起点。可复现性不是文档里的一句承诺,是一份 manifest 和一个 patch 文件。
八、合成与标识:最后五分钟的老实
Composer 是流水线的最后一环,也是最不起眼的一环:字幕、封面、BGM、合成。但它扛着两条不能省的义务。
第一是字幕。本机 ffmpeg 没有 libass(前文 #13),字幕走 Pillow 逐句渲染 PNG 再 overlay。这个被迫的方案反而长出了三个细节:按像素宽度换行防裁边、长数字串不拆行、每句独立定位。用户看到的"字幕刚刚好",背后是一堆像素级的 if。
第二是 AI 内容标识,显式和隐式双轨:显式标识是成片画面上观众可见的标注;隐式标识是 ffmpeg metadata 加旁路的 .ai-meta.json 双写。按法规要求,AI 生成内容需要可标识、可追溯——完整的 C2PA 签名被登记为 DEFERRED(#18),推迟到正式对外发布前,但 metadata 双轨从第一天就在。部署文档里这一节的标题写得斩钉截铁:“部署即生效,不可关闭”。
第三是封面与 BGM 的克制。首版不做智能选曲、不做花字特效——成片的每个像素都要经得起"这是替老板发的"这个检验,花活越少,检验越容易通过。
九、坑位清单:一万个没想到里的七个
开源本地路线的日常,就是和一万个没想到搏斗。项目有一份持续维护的 open-questions 登记簿,编号到 19,每条都有状态(OPEN/RESOLVED/DEFERRED)。挑最有代表性的七个:
**#13:本机 ffmpeg 没有 libass。**字幕渲染走不了 drawtext/subtitles 滤镜。解法:Pillow 逐句渲染 PNG,再用 ffmpeg overlay 贴上去(app/textrender.py + app/subtitles.py)。顺带的收获:字幕按像素宽换行防裁边、数字串不拆行,都是纯客户端渲染才方便做的细节。
**#15:VoxCPM2 的时长方差。**同一段 154 字的文本,两次合成分别是 100.3 秒和 61.9 秒——停顿复刻不稳定,直接威胁 60-90 秒成片区间。解法:编排器加 DURATION_TOLERANCE = 0.3,偏差超 30% 自动重合成一次,仍超则接受并在审计里记录实际时长。M4 验收实测生效:首合成 104.4 秒(目标 77.8 秒),重试后 79.7 秒通过。
#16:语速是写死的常数。CHARS_PER_SEC = 1.8,注释里写着依据:“实测:克隆音色停顿压缩后 58 字 / 30.9 秒”。换一个音色就要重新标定——这是一个诚实的临时解,登记着等待被正式方案取代。
**#17:转写 artifacts 污染下游。**SenseVoice 转写会混入表情符号和异常断句,直接进 VoxCPM 的 prompt_text 会导致合成异常。本次人工校对解决,待 CLI 化。
**#19:READY 之后没有回头路。**前面讲过——修状态机,不绕状态机。
**#14:首跑编译开销。**VoxCPM2 在 M4 上首跑含编译 101 秒(39.4 秒音频,约 2.6 倍实时),稳态耗时待复测。
**#12:算法备案。**自建引擎失去了 API 厂商的备案红利,是否需要自行算法备案,OPEN。
每个坑都从"现场发现"变成"登记、编号、给状态、留解法或留计划"。这份登记簿本身就是产品——它让下一个遇到同样问题的人(包括两个月后的我自己)不用重新踩一遍。
十、三天,五个里程碑
回头看时间线,最陡峭的是最后三天:
- 6 月 12 日:立项。产品定位对话归档为设计文档。
- 6 月 17 日:ADR 0001 适配器模式 + 第一批文档体系。
- 6 月 18 日:单日文档冲刺——ADR 0002、九模块三件套、合规四件、运维三件,一天之内 25 份文档全部定稿。
- 6 月 20 日 - 9 月 5 日:静默期。
- 9 月 6 日(P3A 之日):8 个功能 commit。开源参考清单、ADR 0003、P3A 代码骨架(FunASR + DeepSeek + VoxCPM2 + FFmpeg)、四个修复(合成校验、-38dB 停顿阈值、占位符计数、字幕像素换行)、demo 脚本。当天跑通全本地 63.9 秒竖屏成片,打 tag
p3a-mvp。 - 9 月 7 日:M1 链接输入(yt-dlp 独立 venv 隔离 + 审计 + 错误映射)→ M2 SadTalker 定稿 → M3 引擎无关核心(registry 工厂 + #15 时长重试 + #19 recompose)→ M4 Web 骨架。
- 9 月 8 日(M5 收官):EchoMimicV3 依赖锁定与内存补丁、M2 定稿、ADR 0004、SBOM 首次实测填充、photo-talking-head 适配器、可移植基建(bootstrap / setup_engines 脚本 + 部署文档)、关闭三个 open questions。
最终的产品形态是一个本地单机 Web 应用:FastAPI + Jinja2 + htmx,七个页面(首页、新建任务、任务详情、状态、数字人管理、设置、基座),渲染队列用 ThreadPoolExecutor 单 worker,状态落 SQLite,断点续跑。CLI 通道与 Web 共用同一个状态机,可以混用——白天在浏览器里点,深夜用 CLI 批量重跑,状态不会打架。
刻意的简陋:没有 Redis、没有 PostgreSQL、没有 Docker、没有 Nginx。uvicorn 只绑 127.0.0.1——这是单用户本机产品,全家桶是给并发一百人准备的,不是给验证一个产品假设准备的。yt-dlp 的接入也做了隔离:独立 venv + subprocess 调用,出问题不污染主环境;上传通道永远保留兜底。
Web 验收不是"页面能打开"就完事。M4 的验收清单里有一条专门测合规硬关口:在未批准文案的状态下尝试触发渲染,确认被拒绝。把"拒绝自己"写进验收用例,是这类产品独有的测试哲学——你得证明门锁真的锁门,而不是证明门能开。
用户的日常被压缩到五步:上传对标视频(或贴链接)、选主题、审核改写稿、点生成下载、手动发布。第一次建档也只有四项输入:身份与肖像声音授权、约一分钟干净出镜视频、一段干净人声、业务事实包。还有一个容易忽略的细节:15 秒校验视频——正式建档前先出一条极短的样片,让老板确认"这个声音像我、这个形象能用",把大成本渲染的浪费扼杀在最小单位。老板每天要做的决定只剩一个:今天批准哪一稿。
十一、文档是第一公民
这个项目有个不太常见的习惯:先写文档,再写代码,而且文档不归档、文档活着。
6 月 18 日那一天没有写一行代码,产出是 25 份文档:产品愿景、用户流程、成功指标、九个模块各三件套(README + spec + compliance)、合规四件、运维三件。每一份都有状态标记,由 docs/README.md 的状态总表统一索引——后来任何一个新会话接手,入口都是这张表,而不是靠口口相传的项目记忆。
三个具体收益:
**对抗静默期失忆。**两个半月的冷冻仓之后,我能在一小时内恢复全部上下文——不是靠回忆,靠的是 ADR 里写的前提条件和方法论登记簿里的编号条目。没有这些,重启成本大概是重新做一遍项目调研。
**对抗 AI 协作的上下文漂移。**这个项目大量使用 AI 结对开发,而 AI 的短板恰恰是长程一致性。文档体系把"为什么"固定下来,AI 每次进场先读状态总表和 PROMPTS.md,就不会兴冲冲地把已经淘汰的引擎重新搭一遍。项目根目录的 CLAUDE.md 里写着一句给未来的自己(和 AI)的话:“不要预先搭建完整平台。”
**对抗自己的聪明。**人在兴奋的时候特别擅长说服自己"这次不一样"。写下来的 Non-Goals、门线、切换条件,都是提前埋好的刹车。9 月重启时我没 有推翻 6 月的自己,只是更新了他引用的前提——文档让"自我修正"和"自我背叛"有了可区分的痕迹。
十二、一条视频的完整旅程
把前面所有环节串起来,走一遍真实的生命周期。
老板晚上十点刷到同行一条口播,觉得结构不错,把链接贴进页面。M1 的下载通道在独立 venv 里醒来,yt-dlp 拉回视频和音频,写一条审计事件,任务落库,状态 CREATED。老板转身去洗碗。
FunASR 接手音频,转写稿带着时间戳出来,SenseVoice 的表情符号被清洗掉,参考结构提取完成——这条视频哪里是钩子、哪里是论据、哪里是 CTA,变成结构化字段。状态 TRANSCRIBED。DeepSeek 登场,一边读参考结构,一边读这位老板的事实包(七类业务事实和禁用承诺),重写出一版"像他自己说话"的文案;相似度检查同时运行,和参考原文比对,超过 0.7 打回重来。状态 SCRIPT_DRAFTED。
**然后,全流水线停下来。**页面停在待审页,稿子摆在老板面前,他改了两处口头禅、删了一个案例、批准。状态 USER_APPROVED——四个环节里 AI 最强大,但这一步永远轮不到它。
夜里渲染排队开始。VoxCPM2 用老板建档时的音色合成配音,154 字,首合成 104 秒,和目标时长偏差超 30%,编排器自动重试一次,79.7 秒,过关——状态 VOICE_RENDERED,一次方差坑位的自动补救就这样无声发生。数字人环节看设置:passthrough 就照片定格配音频,演示级;EchoMimicV3 只在明确知道要等 38 分钟换 1 秒视频时才被选中。状态 AVATAR_RENDERED。Composer 把字幕 PNG 逐句 overlay、贴上封面、写入 AI 标识的显隐双轨,成片落盘。状态 COMPOSED,校验通过后 READY。
第二天早上老板打开详情页,下载成片,自己发到抖音。系统记录一次下载,不碰任何平台的发布接口——发布是老板和观众之间的事,产品送到门口就止步。
十几个状态、四五分钟渲染、一次自动重试、一道人工关口——这就是"63.9 秒成片"背后真实的完整旅程。demo 一句话就能讲完,旅程里的每个停止点都是设计。
十三、这个项目教我的三件事
九、这个项目教我的三件事
**第一,把人工关口写进状态机。**合规和信任不是功能列表里的一行,是架构里的不可绕过路径。USER_APPROVED 之前禁止渲染——这句话活在代码里,比活在宣传页上可靠一万倍。
**第二,引擎选型交给实测,实测要有门线。**没有打分维度和及格线的对比是感觉派。SadTalker 7/20、EchoMimicV3 10.3/20、全灭就全灭,passthrough 兜底——承认现状不丢人,拿演示级品质冒充商用级才丢人。
**第三,决策要跟着前提走。**ADR 0002 到 0003 的反转,不是因为新技术炫,是因为三个前提(客户落地状态、口型对齐的结构性需求、本机验证结果)变了。写下来的决策记录不是仪式感,是三个月后自己能看懂"当时为什么这么定、现在为什么改"的唯一凭证。
下一步是深水区:原视频口型对齐、算法备案、C2PA 完整签名、以及最重要的——找到第一位真实的老板。63.9 秒的成片只是流水线转起来的声音,生意的起点是那 7 天的验证包。
本项目全部设计文档、ADR、bake-off 实测记录与坑位登记簿随代码维护在同一仓库。文中所有数字(耗时、得分、成本、字数)均出自实测记录与决策文档。