AI Podcast Generator 用于创建多人对话式口播播客视频,基于 inference.sh 流水线完成:肖像生成 → TTS 音频 → 头像视频 → 合并。支持真人(通过 Phota)、3D 吉祥物、插画角色以及混合阵容。当用户想要创建播客、口播视频、演示片、宣传对话或任何多说话人视频内容时使用。
流水线概览:角色(图像)→ TTS(每轮音频)→ 头像(每轮视频)→ 合并(最终视频)。
第一步:角色创建。按角色类型选择工具:真人(新)用 pruna/p-image,16:9,prompt_upsampling: true,快速、无需训练,但多次生成身份不一致;真人(一致身份)用 phota/generate 配合 [[profile_id]],所有镜头身份一致,需先训练 Phota 档案;品牌吉祥物/标志角色用 google/gemini-3-pro-image-preview,传入标志和角色设定图作为参考图;插画/风格化用 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 更简单便宜。先做角色设定图,再做播客画面:为每个角色生成角色设定图(纯白背景、多角度),然后以设定图为参考把角色放入播客演播室场景。品牌角色(服装上有标志):先生成穿着无标志服装的角色,再用 phota/edit 以标志作为第二参考图添加标志;生成新角度时始终同时传入标志图和角色参考图。
第二步:交替角度。每个角色至少生成 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 即可,传入已确定的画面作为参考。取景规则:对单个说话人使用紧凑取景。多座位的广角镜头在只有一人出镜时会显示空椅子。
第三步:QA 帧。继续之前目视检查所有帧:背景中是否有额外人物、是否有多支麦克风(每个镜头应只有一支)、标志是否错误或变形、角色身份在各角度间是否一致、是否有奇怪伪影(多余肢体、物体融合)。在生成视频前修复问题——重新渲染视频是流水线中最昂贵的步骤。
第四步:写脚本。自然对话规则:像真实对话一样写,不要像轮流朗读广告文案;包含反应(“wait, hold on”“that is wild”)、打断和追问;变化轮次长度——短反应(1 句)混合较长解释(2-3 句);主持人应问真实问题,而不是铺垫显而易见的论点;记住总时长目标:1.05 倍速下自然语音约 2.5 词/秒。时长参考:15 秒约 38 词,30 秒约 75 词,60 秒约 150 词。
第五步:生成 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 秒)。
第六步:生成视频片段。每轮使用 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 正面。
第七步:合并。使用 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 生成真人替代角度会得到另一个人。身份一致的人类镜头请使用带已训练 profile_id 的 Phota,或一次性批量生成所有角度。绝不要并行运行 p-video-avatar 片段——它们争抢 GPU 内存并因 CUDA OOM 失败,请顺序运行。绝不要把 speaking_rate 设为低于 1.0——听起来不自然且不吸引人,默认 1.05。生成视频前务必 QA 帧——视频生成是流水线中最昂贵的步骤,在图像阶段发现双麦克风或错误标志修复成本低,视频生成后才发现则需重新渲染整个片段。单个说话人镜头务必使用紧凑取景——广角/建立镜头会显示本应有其他说话人的空座位,从腰部或胸部以上取景,避免看到空椅子。生成品牌角色时务必把标志作为参考图传入——用文字描述标志会产生错误结果,把实际标志文件作为第二图像输入。全面制作前务必获得语音确认——用同一句话在 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> 查看任意单个任务的成本。