Overdub 用你的声音修口误之前,用同意表门禁:本人或书面授权、平台验证、不用于冒充、写明用途。
先看清成品
- 合规样例 APPROVED;冒充/无授权 → BLOCKED。
- 3 项 pytest 通过。
合规提醒:Overdub / 声音克隆仅限本人或已获明确授权并完成平台验证的声音,禁止冒充他人。API token 绑定单一 Drive,可消耗 media minutes 与 AI credits;耗尽可能返回 402。导入勿用未授权媒体;YouTube URL 不作 import 源(官方限制)。本文不编造套餐价格。
运行说明:无正式
DESCRIPT_API_TOKEN。A 用 mock 导出转写;B 本地口头禅扫描;C Overdub 同意门禁。未调用真实 Descript API。2026-10-23(Asia/Shanghai)pytest 通过。
做完之后你会得到什么?
| 成果 | 说明 |
|---|---|
overdub_consent.py |
同意门禁 |
| 样例 JSON | ok/bad |
test_110c.py |
测试 |
需要准备哪些环境?
| 项目 | 说明 |
|---|---|
| Python | 3.10+ |
关键事实
| 事实 | 来源 |
|---|---|
| 平台要求声音所有者验证;不得冒充 | 产品重要说明 |
| 本 JSON 不能代替 Descript 官方验证流程 | 重要 |
| 组织可把 APPROVED 当作启用 Overdub 流水线的前置 | 实践 |
文件结构
110-descript-C-src/
├── overdub_consent.py
├── sample_ok.json
├── sample_bad.json
└── test_110c.py
第 1 步:门禁脚本
#!/usr/bin/env python3
"""Gate Overdub / voice-clone usage: only self or explicitly authorized voices."""
from __future__ import annotations
import argparse, json
from pathlib import Path
def validate(form: dict) -> list[str]:
errs = []
if form.get("is_own_voice") is not True and form.get("written_authorization") is not True:
errs.append("必须是本人声音,或持有声音所有者的书面授权")
if form.get("owner_identity_verified") is not True:
errs.append("须完成平台要求的声音所有者验证(以 Descript 产品流程为准)")
if form.get("impersonation_intent") is True:
errs.append("禁止用于冒充他人")
purpose = (form.get("purpose") or "").strip()
if not purpose:
errs.append("purpose 必填(说明用途)")
if form.get("agree_terms") is not True:
errs.append("须同意 Descript 相关条款")
return errs
def main(argv=None) -> int:
ap = argparse.ArgumentParser(description=__doc__)
ap.add_argument("form_json")
args = ap.parse_args(argv)
form = json.loads(Path(args.form_json).read_text(encoding="utf-8"))
errs = validate(form)
if errs:
print("BLOCKED")
for e in errs: print("-", e)
return 1
print("APPROVED")
return 0
if __name__ == "__main__":
raise SystemExit(main())
第 2 步:测试
from pathlib import Path
import json, subprocess, sys
from overdub_consent import validate
HERE = Path(__file__).resolve().parent
def test_ok():
assert validate(json.loads((HERE/"sample_ok.json").read_text())) == []
def test_bad():
assert len(validate(json.loads((HERE/"sample_bad.json").read_text()))) >= 3
def test_cli():
assert subprocess.run([sys.executable, str(HERE/"overdub_consent.py"), str(HERE/"sample_ok.json")]).returncode == 0
第 3 步:运行
$ overdub_consent
APPROVED
BLOCKED
- 必须是本人声音,或持有声音所有者的书面授权
- 须完成平台要求的声音所有者验证(以 Descript 产品流程为准)
- 禁止用于冒充他人
- purpose 必填(说明用途)
- 须同意 Descript 相关条款
$ pytest -q
... [100%]
3 passed in 0.03s
怎么检查结果?
- ok → APPROVED。
- bad → BLOCKED 多条原因。
调试示例
「同事口头同意录一句」。 不够。需要平台验证与可审计授权;脚本要求显式布尔。
常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
| 多音色 | 每个 Voice 单独表 | 用途写清 |
| 已离职员工 | 立即停用 | 撤授权 |
| 只要修自己的口误 | is_own_voice true | 仍要验证 |
模板规则
- 无授权不克隆。
- 不冒充。
- 保留验证记录。
项目资源
| 用途 | 地址 |
|---|---|
| Descript 官网 | https://www.descript.com/ |
| API Help(官方) | https://help.descript.com/api-and-mcp/api |
| API 文档(官方) | https://dev-docs.descriptapi.com/ |
声音权是人格权——门禁通过再 Overdub。