下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-3zj9kart--popto-batch-talking-video.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-3zj9kart/popto-batch-talking-video。使用 Popto 批量生成口播音频和数字人口播视频,为每个数字人分别配置脚本、外观与字幕,查询角色、保存结果并恢复异步任务。适用于已有口播文案配音、多个数字人分别说不同文案、批量制作口播音视频,以及继续已有 tool_id 或本地生成任务;不负责克隆声音、创建数字人或拆解视频后跟创文案。
阅读全文 (展开查看完整说明)
概述
Popto 批量生成口播音视频
通过 API Key 调用 Popto 工作台的批量生成口播音视频功能。脚本仅依赖 Python 3.10+ 标准库,不使用浏览器 Cookie。
以本技能目录为工作目录执行以下命令;技能安装到其他位置后,按实际位置定位 scripts/batch_talking_video.py。
配置与可用性
在 config.json 中填写 POPTO_API_KEY,或设置同名环境变量。缺少密钥时,引导前往获取 API Key。不要在聊天、日志或结果文件中输出密钥。
- 服务地址:
--base-url→POPTO_BASE_URL→BASE_URL环境变量 → config 的BASE_URL/base_url→https://popto.cn。 - 密钥:
POPTO_API_KEY→POPTO_API_TOKEN环境变量 → config 的POPTO_API_KEY/api_key/API_KEY。--config可指定配置文件。 - 恢复任务必须使用原服务地址和同一账号的 API Key。
- 本技能依赖新增的
/api/open/v1/...批量口播接口。若服务返回 404,说明目标环境尚未部署对应接口;报告缺失接口,不改用网页登录接口或重复提交。
选择输入和交付模式
- 获取用户的口播文本和数字人选择。用户只提供内容方向时,可先根据要求拟稿;用户要求使用原文时保留原文。缺少必要的角色或脚本时,先查询角色或整理已有文本,再询问缺失内容。
- 查询真实角色和外观 ID,不编造 ID。
actors默认查询平台角色;--category mine查询当前用户自建角色,--category favourite查询收藏。使用返回的offset/more继续翻页。自建角色须有可用声音;未就绪、失败或已删除角色不能作为已就绪角色提交。需要配置新声音或数字人时,引导用户在工作台先完成配置。 - 每个脚本至少 20 个非空白字符,总长度不超过 5000 个 UTF-16 字符,与网页输入限制一致。
selected_look_ids省略时使用默认外观;多个 ID 会展开为多个视频,音频按相同角色和脚本复用。 - 选择
audio(只生成独立音频)、video(默认,直接渲染视频)或both(先生成独立音频,再生成视频)。用户只要配音时使用audio,同时要音频和视频时使用both。视频请求会携带已生成的音频信息和实际时长,保持网页端请求格式;后端仍按脚本和角色调用合成,不承诺成片逐样本复用试听音频。 - 默认关闭字幕。用户需要字幕时设
with_subtitle: true;自定义样式先用styles、fonts查询真实配置,再把完整样式对象写入subtitle_style,不要只传样式 ID。
展示数字人时,使用接口返回的 preview_url 展示形象,使用 show_off_url 供用户观看视频;需要展示声音试听时,使用 audition_audio_url。字段缺失或为空时如实说明对应素材不可用,不要用其他字段冒充。
python3 scripts/batch_talking_video.py actors --query "关键词" --limit 20
python3 scripts/batch_talking_video.py actors --gender female --industry 'tech_&_saas' --limit 20
python3 scripts/batch_talking_video.py actors --category mine
python3 scripts/batch_talking_video.py styles
python3 scripts/batch_talking_video.py fonts
python3 scripts/batch_talking_video.py billing平台角色可组合使用以下筛选参数;同一参数可重复传入多个值,按返回的 offset / more 继续翻页。属性筛选仅适用于平台角色;自建及收藏列表使用 --query 按名称查询,不要假定服务端会对其应用属性筛选。
| 参数 | 可选值(中文含义) |
|---|---|
--gender | female 女性、male 男性 |
--age | senior 老年、adult 成年、young_adult 青年、kid 儿童 |
--ethnicity | caucasian 欧美、black 黑色人种、east_asian 东亚、south_asian 南亚、hispanic 拉美、middle_eastern 中东 |
--situation | bedroom 卧室、kitchen 厨房、living_room 客厅、office 办公室、studio 工作室、coffee_shop 咖啡馆、balcony 阳台、beach 海滩、snow 雪景、street 街道、car 车内 |
--industry | e-commerce 电商、beauty_&_skincare 美妆护肤、health_&_fitness 健康健身、food_&_beverage 餐饮食品、tech_&_saas 科技/SaaS、finance_&_insurance 金融保险、education 教育、real_estate 房地产、travel_&_hospitality 旅游酒店、fashion_&_apparel 时尚服饰、automotive 汽车、entertainment_&_media 娱乐传媒 |
--pose | standing 站立、sitting 坐姿、lying 躺卧、walking 行走、running 奔跑、leaning 倚靠、kneeling 跪姿 |
--shot-type | close_up 特写、medium_close_up 中近景、medium_shot 中景、medium_full_shot 中全景、full_shot 全景 |
--skin-tone | skin-001 至 skin-006(肤色 1 至 6) |
包含 & 等 shell 特殊字符的值须用引号包裹。按需求选择条件,结果为空时可减少筛选条件;不要编造数字人 ID 或认为所有条件都必须填写。
批量输入 batch.json 示例(将角色及外观 ID 替换为查询到的真实值):
{
"items": [
{
"actor_id": "act_example_one",
"script": "大家好,今天为大家介绍我们的新产品,帮助内容团队高效完成日常视频创作。",
"with_subtitle": true
},
{
"aiactor": {"actor_id": "act_example_two", "name": "数字人二"},
"selected_look_ids": ["look_example"],
"script": "欢迎来到今天的分享,我们会用三个简单步骤演示如何把一段文案制作成口播视频。",
"with_subtitle": false
}
]
}提交和查询
先用 plan 做本地检查,查看展开后的生成数量和预估视频秒数;该命令不联网、不要求密钥。billing 返回当前计费配置和各套餐批量上限;视频预估积分按每条脚本 ceil(字符数/5) 秒 × ceil(render_avatar 单价) 累加,有真实音频时按音频时长向上取整估算。实际费用和当前套餐权益由服务端校验。音频合成不在当前工具箱逻辑中单独扣 actor_say 积分,不把配置中的该单价误报为已经扣费。告知用户本次数量、模式与可估算的费用;用户已经明确要求生成即在该范围内执行,无需重复要求确认。
声音使用沿用工作台的声音克隆与声纹使用许可约定。选择用户有权使用的角色和声音;若用户明确表示不同意许可或没有使用授权,停止相关生成。
python3 scripts/batch_talking_video.py plan --input batch.json --mode both
python3 scripts/batch_talking_video.py run --input batch.json --mode both --out-dir ./output/batch-001每次运行使用独立输出目录。--max-wait 默认 1800 秒,--interval 默认 4 秒。长任务可先传 --submit-only 返回已提交的任务 ID,再用 resume 继续。both --submit-only 只提交音频阶段,resume 等音频完成后自动进入视频阶段。
python3 scripts/batch_talking_video.py resume --out-dir ./output/batch-001
python3 scripts/batch_talking_video.py status --out-dir ./output/batch-001
python3 scripts/batch_talking_video.py status --tool-id tool_xxx
python3 scripts/batch_talking_video.py status --task-ids task_xxx task_yyyresume 可能提交尚未开始的阶段,延续原生成请求;status 只查询。仅有 tool_id 时可查询最近 50 条任务和工作台结果;自动续跑需要原输出目录的 run_state.json,不能仅凭项目 ID 推断哪些新任务应生成。
任务状态和恢复约束
- 多角色不同脚本必须逐个提交“一段脚本 × 一个数字人”音频任务。原始
batch_say接口会做笛卡尔组合,脚本已规避多生成。 - 首次返回
tool_id后,所有后续提交复用该项目。每个任务 ID 在返回后立即写入run_state.json。轮询按最多 50 个 task_id 分组,保留成功结果和失败任务。 - 同一输出目录使用锁防止并发重复提交。进程异常退出留下
.run.lock时,先确认原进程已退出并核对任务状态,再移除该锁恢复。 - 服务端提交接口没有幂等保证,也没有原子批量提交保证。脚本发送前保存
submitting;网络错误、非完整回执或中断后保留unknown/submitting,禁止自动重放或新建输出目录重做同一批次。先查询已知任务、项目中心和保留的receipt。首个请求丢失回执时可能没有 tool_id,也必须核对项目中心。 - 部分成功、部分失败时提供成功下载链接和失败 task_id;不自动重建失败任务。用户明确要求重新生成后,整理仅包含失败项的新输入,用新目录运行,并说明这是新的生成请求。
resume使用原输入快照,不接受修改脚本、切换模式或服务地址。新一轮生成使用新输入和新目录,不把不同任务混入旧状态。
交付结果
输出目录包含 run_state.json(输入、服务地址、阶段回执和任务详情)及 results.json(每条配置的音频 URL、视频 URL、状态、任务 ID 和工作台地址),不自动下载媒体。
向用户交付可点击的音频/视频链接及打开批量口播项目入口。具体项目地址使用 results.json 的真实 workspace_url。只有任务成功且返回媒体 URL 才称生成完成;音频模式只报告音频完成,不把网页中仅有音频的项目描述为视频已完成。超时、失败、缺少 URL 或提交不明确时如实说明,并提供原目录的恢复或查询命令。
需要核对原始请求、结果字段或后端接入位置时读取 [references/api.md](references/api.md)。