AI播客生成器
使用推理管道(inference.sh pipeline)创建多人对话式口播视频:肖像生成 → TTS音频 → 虚拟人视频 → 合并。支持真实人物(通过Phota)、3D吉祥物、插画角色和混合阵容。
适用于用户想创建播客、口播视频、演示预告、推广对话或任何多人发言视频内容的场景。
管道概览
角色(图像)→ TTS(每轮音频)→ 虚拟人(每轮视频)→ 合并(最终视频)
流程
步骤1:角色创建
根据角色类型选择合适的工具:
| 角色类型 | 工具 | 备注 |
|---|---|---|
| 真实人物(新) | pruna/p-image | 16:9比例,prompt_upsampling: true。快速、无需训练,但多次生成的身份不一致。 |
| 真实人物(一致身份) | 搭配 [[profile_id]] 使用 phota/generate | 所有镜头身份一致。需要先训练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):
- 先生成角色穿着素面服装的版本
- 使用
phota/edit,将Logo作为第二张参考图像添加Logo - 在生成新角度时,始终同时传入Logo图像和角色参考
步骤2:交替角度
为每个角色至少生成2个角度以增加视觉变化:
| 角度 | 使用时机 |
|---|---|
| 正面/中景 | 开场、收场、建立场景 |
| 特写 | 反应、情感时刻、有力台词 |
对于特写,提示语应使用“紧框架、胸部以上、浅景深”——而不是“侧身”(那只会让人物看向一边)。
身份一致性规则:
- 对于已有Phota模型的真实人物:使用
phota/generate或phota/edit生成新角度——Gemini无法保持面部身份,会产生不同的人物 - 对于没有Phota模型的真实人物:尝试一次性使用
pruna/p-image生成所有需要的角度,或者如果需要大量镜头则考虑训练Phota模型 - 对于吉祥物/插画:Gemini 3 Pro可以胜任,将已生成的画面作为参考传入即可
框架规则: 对单个发言者使用紧框架。宽景镜头如果有多把椅子,当只有一人说话时会显示空椅子。
步骤3:画面质量检查
在进入下一步之前,视觉检查所有画面:
- 背景中是否有多余人物
- 多个麦克风(每个镜头应只有一个麦克风)
- Logo是否错误或变形
- 不同角度间角色身份是否一致
- 奇怪的伪影(多余肢体、物体融合)
在生成视频前解决问题——重新渲染视频是整个管道中最昂贵的步骤。
步骤4:撰写脚本
自然对话的规则:
- 要像真实对话一样写,而不是像轮流朗读广告文案
- 包含反应(“等等”、“这太疯狂了”)、打断和追问
- 发言长度要有变化——简短反应(1句话)与较长解释(2-3句)交替
- 主持人应提出真正的问题,而不是设置明显的讨论点
- 牢记总时长目标:自然语速约2.5个词/秒(按1.05倍速计算)
时长参考:
| 目标时长 | 词数 |
|---|---|
| 15秒 | ~38词 |
| 30秒 | ~75词 |
| 60秒 | ~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(美式英语)
- 使用
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将所有片段拼接成最终视频。
# 构建输入JSON
{
"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生成真实人物的不同角度会产生不同的人。对于需要身份一致的真实人物镜头,请使用Phota配合已训练的profile_id,或者一次性生成所有角度。这是在Gemini为一个应该与正面匹配的特写镜头生成了完全不同的面孔后学到的教训。
-
绝不能并行运行p-video-avatar片段——它们会竞争GPU内存并因CUDA OOM而失败。必须按顺序运行。这是在3个并行运行中有2个失败后学到的教训。
-
绝不能将speaking_rate设置为低于1.0——听起来做作且缺乏吸引力。默认使用1.05。根据用户反馈,0.9的语速“感觉奇怪且缺乏吸引力”。
-
在生成视频前始终进行画面质量检查——视频生成是管道中最昂贵的步骤。在图像阶段发现双重麦克风或错误Logo很容易修复;如果在视频生成后发现,就需要重新渲染整个片段。
-
对单个发言者始终使用紧框架——宽景/建立镜头会显示其他发言者本应坐在但没人坐的空椅子。从腰部或胸部以上取景,使空椅子不可见。
-
生成品牌角色时始终将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>查看任何单个任务的开销。