用途
AI 播客生成器用于通过 inference.sh 流水线创建多人出镜的对谈类播客视频。整条流水线为:角色图像生成 → 逐句 TTS 音频 → 逐句头像视频 → 合并成片。支持真人(通过 Phota)、3D 吉祥物、插画角色以及混合阵容。
适用场景:用户想要制作播客、口播视频、演示片、宣传对话,或任何多说话人视频内容。
流水线概览
角色(图像)→ TTS(每轮音频)→ 头像(每轮视频)→ 合并(最终视频)
步骤 1:角色创建
按角色类型选择工具:
- 真人(新建):pruna/p-image,16:9,prompt_upsampling: true。快速、无需训练,但多次生成的身份不会一致。
- 真人(一致身份):phota/generate 配合 [[profile_id]],所有镜头身份一致。需先训练 Phota 档案。
- 品牌吉祥物 / logo 角色:google/gemini-3-pro-image-preview,传入 logo + 角色设定图作为参考图像。
- 插画 / 风格化:google/gemini-3-pro-image-preview,传入风格参考作为输入图像。
训练 Phota 身份(真人时可选但推荐):若需要真人角色在多个角度和镜头间保持身份一致,先训练 Phota 档案:
infsh app run phota/train --input '{ "images": ["url1.jpg", "url2.jpg", ...], "wait": true }' --save profile.json
- 需要该主体 30-50 张人脸图像
- wait: true 时训练需几分钟
- 返回 profile_id,随后在 phota/generate 中于提示词里使用 [[profile_id]]
- 档案可永久复用——训练一次,无限次生成镜头
若不需要跨镜头一致性(如单说话人视频、仅一个角度),pruna/p-image 更简单、更便宜。
先做角色设定图,再做播客画面:
- 为每个角色生成角色设定图(纯白背景、多角度)
- 然后以设定图为参考,将角色放入播客演播室场景
品牌角色(服装上有 logo):
- 先用无 logo 版本的服装生成角色
- 用 phota/edit 以 logo 作为第二参考图像添加 logo
- 生成新角度时,始终将 logo 图像与角色参考一起传入
步骤 2:交替角度
每个角色至少生成 2 个角度以增加视觉变化:
- 正面/中景:建立镜头、开场、收尾
- 特写:反应、情绪时刻、有力台词
特写时提示“tight framing, chest up, shallow depth of field”,不要用 “turned to the side”(那只会让他们看向别处)。
身份一致性规则:
- 有 Phota 档案的真人:用 phota/generate 或 phota/edit 生成新角度——Gemini 不保留人脸身份,会产生另一个人
- 无 Phota 档案的真人:尝试用 pruna/p-image 一次性生成所有所需角度,或若需要大量镜头则考虑训练 Phota 档案
- 吉祥物/插画:Gemini 3 Pro 即可,传入已生成的画面作为参考
取景规则:对单个说话人使用紧凑取景。多人座位的大全景在只有一人出镜时会露出空椅子。
步骤 3:QA 帧检查
继续之前,目视检查所有帧是否存在:
- 背景中多余的人
- 多个麦克风(每个镜头应只有一个麦克风)
- 错误或扭曲的 logo
- 跨角度角色身份不一致
- 奇怪的伪影(多余肢体、物体融合)
在生成视频前修复问题——重新渲染视频是整条流水线中最昂贵的步骤。
步骤 4:撰写脚本
自然对话规则:
- 写得像真实对话,而不是轮流念广告词
- 包含反应(“wait, hold on”“that is wild”)、打断和追问
- 轮次长度有变化——短反应(1 句)混合较长解释(2-3 句)
- 主持人应提真实问题,而非铺垫显而易见的话题
时长参考:自然语速约 2.5 词/秒(1.05x 速率)
| 目标 | 词数 |
|---|---|
| 15s | 约 38 词 |
| 30s | 约 75 词 |
| 60s | 约 150 词 |
步骤 5:生成 TTS 音频
每轮使用 inworld/text-to-speech-2:
infsh app run inworld/text-to-speech-2 --input '{ "text": "...", "voice_id": "...", "speaking_rate": 1.05, "audio_encoding": "MP3" }' --save output.json
音色选择:
- 在确定前,用同一句台词对候选音色生成样本
- 让用户试听后确认音色
- 适合播客的音色:Tyler, Nate, Lauren, Kelsey, Naomi, Anjali(EN_US)
- 用 inworld/text-to-speech-2:voices 列出所有可用音色
语速:
- 默认 1.05,贴近自然播客节奏
- 短促反应可用 1.1
- 绝不低于 1.0——听起来慢且出戏
- 同一角色的所有轮次保持语速一致
所有 TTS 轮次可并行(便宜、快,每段约 2-8 秒)。
步骤 6:生成视频片段
每轮使用 pruna/p-video-avatar:
infsh app run pruna/p-video-avatar --input '{ "image": "<character_frame_url>", "audio": "<tts_audio_url>", "resolution": "720p", "video_prompt": "..." }' --save output.json
关键:片段必须串行运行,不能并行。并行会争抢同一 GPU,导致 CUDA OOM 失败。每段时长依音频而定,约 15-90 秒。
角度分配示例(6 轮):
- T1:说话人 A — 正面
- T2:说话人 B — 正面
- T3:说话人 C — 正面(或特写)
- T4:说话人 A — 特写
- T5:说话人 B — 特写
- T6:说话人 A — 正面
步骤 7:合并
使用 infsh/media-merger 将所有片段拼接为最终视频:
{ "media_files": [ {"file": "<clip1_url>"}, {"file": "<clip2_url>"}, ... ], "fps": 24, "output_format": "mp4" }
infsh app run infsh/media-merger --input merger_input.json --save final.json
合并免费,依总时长约需 2-6 分钟。
规则要点
- Gemini 不保留人脸身份——用 Gemini 为真人生成其他角度会变成另一个人。身份一致的人类镜头请用带已训练 profile_id 的 Phota,或单批一次性生成所有角度。
- 绝不并行运行 p-video-avatar 片段——会争抢 GPU 显存并以 CUDA OOM 失败,须串行。
- 绝不将 speaking_rate 设为低于 1.0,默认 1.05。
- 生成视频前始终先做 QA 帧检查——视频生成是流水线中最昂贵的步骤。
- 单个说话人镜头始终使用紧凑取景——大全景会露出其他说话人的空座位;取景至腰部或胸部以上,避免空椅入镜。
- 生成品牌角色时始终把 logo 作为参考图像传入——用文字描述 logo 会出错,需传入实际 logo 文件作为第二图像输入。
- 全面制作前始终先获得音色批准——用同一句台词在 5-8 个候选音色上生成样本,让用户选定后再投入整篇脚本。
- 脚本应像对话而非广告——轮流念广告词显得虚假,应包含反应、打断、变化的轮次长度和真实问题。
应用参考
| 应用 | 用途 |
|---|---|
| pruna/p-image | 从文本生成人像 |
| phota/train | 用 30-50 张人脸图像训练身份档案 |
| phota/generate | 通过 [[profile_id]] 用已训练身份生成图像 |
| phota/edit | 在保留已知主体身份的前提下编辑图像 |
| google/gemini-3-pro-image-preview | 图像生成/编辑、吉祥物、风格迁移 |
| inworld/text-to-speech-2 | 文本转语音,100+ 语言,音色调节 |
| pruna/p-video-avatar | 人像 + 音频 → 口播视频 |
| infsh/media-merger | 将多个视频片段拼接为一个视频 |
用 belt task cost <task-id> 可查看任何单个任务的费用。