关于 talking-head
talking-head 是将脚本制作成真人出镜与动态图形结合影片的技能,面向需要生成并渲染讲解视频的创作者。它支持照片加声音或自拍视频作为身份素材,并提供本地合成、图形设计和成片审核流程。
主要功能
- 01从脚本规划出镜与动态图形场景
- 02使用照片和声音或自拍视频作为素材
- 03合成语音并生成出镜片段
- 04通过 Canvas 2D 绘制场景图形
- 05本地渲染并检查成片
适用场景
- 01把讲解脚本制作成真人出镜影片
- 02用自拍视频提取人物画面与声音素材
- 03为步骤说明和比较内容制作动态图形
- 04审核合成语音、画面衔接与口型
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ iart-ai/ talking-head-skills --skill talking-head安装后在 Claude Code 中输入/talking-head确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
package.jsonpnpm-lock.yamlreferences/workflow.mdscripts/core.mjspipeline.mjsprepare-person.mjsproviders.mjsrender.mjstalking-head.mjstemplates/visuals.mjs详细介绍
访谈影片
将用户的脚本制作成一部影片:在适合直接对镜表达的台词中,让人物出镜;其余内容则用图形解释。人物是影片中的实拍素材。用户若要求全程出镜演讲,也可以照此制作;请尊重这一选择。
在用户的输出目录中工作。下方的 <skill> 指的是包含此文件的文件夹。依赖项与技能文件放在一起,因此即使技能单独安装在代码库之外,也能正常工作:
pnpm --dir <skill> install --frozen-lockfile
node <skill>/scripts/talking-head.mjs --help
需要 Node 22+、ffmpeg/ffprobe、FAL_KEY 和 ELEVENLABS_API_KEY。有关计划字段、命令、故障恢复和服务商限制,请参阅工作流参考。凭据应放在本地环境中,切勿写入计划或输出源代码。照片和语音参考素材会上传到 fal;语音样本和文本会发送到 ElevenLabs。
输入和计划
- 提供两种输入方式:照片 + 语音(一张或多张用户照片,以及清晰的语音录音或现有语音 ID),或自拍视频(一个片段同时提供用户的外貌和声音)。用作身份输入的视频与用户希望原样剪辑的录音不同;不要将前者用于 B-roll 剪辑。
- 对于新录制的视频,请让用户保存一段简短的手机或网络摄像头视频,最好是单人自然说话的 30–60 秒片段,画面中人脸清晰、眼睛睁开、光线稳定,且没有背景音乐或其他说话者。也可使用时长较短的现有录音,但语音克隆质量可能较差。此技能接受已保存的视频文件;不包含摄像头录制界面。
- 对于视频输入,请运行
prepare-person --video inputs/me.mov --out inputs/person。此操作在本地执行,无需 API 密钥。检查frames.jpg和完整尺寸的候选人像,优先选择最清晰的画面;如果可以播放音频,请试听voice.wav。脚本按时间戳采样,不会判断面部画质;请剔除眨眼、模糊或被遮挡的画面。如果其他位置有更合适的素材,请使用--frame-times或指定音频区间。具体命令和文件路径请参阅工作流参考。 - 使用用户提供的照片、语音和文本。仅在缺少身份素材或需要获得使用他人语音的授权时提问。已有语音 ID 无需再创建新的克隆。如果用户已经授权使用其语音,就使用该授权,不要再次询问。
- 第一张图片决定服装和场景。其他照片有助于保持人物身份一致。除非用户提出要求,否则不要改变人物面貌或凭空生成影棚人像。
- 如果用户提供的是主题而非脚本,请先撰写脚本。通常将开场钩子、个人观察和结尾安排为出镜台词;步骤、证据和比较则用动态图像解释。通常一到三句简短的出镜台词就足够;全程演出会产生更多生成视频。
- 每个
talking场景放一条简短的出镜台词,语音时长约为 2–11 秒。较长的台词应在句子或分句处拆分。镜头时长应以测得的音频时长为准,而非粗略估算字数。motion场景使用旁白和全屏图形。 - 仅使用用户提供或脚本中已有的事实、姓名、数字和引言。标题应简短。仅在用户要求时添加字幕。
按照参考架构编写 plan.json,然后先执行试运行。使用用户现有的预算;否则,先生成一段短样片,再制作长片。用户提出生成请求时,此操作属于付费操作;对已获授权的运行,无需另行确认。切勿在未告知的情况下自动重试付费请求。
生成
克隆一次,或使用现有的语音 ID。克隆必须先完成 ElevenLabs 验证,才能进行合成。在计划中设置该 ID。生成到一个全新的 runs/<name> 目录中:
node <skill>/scripts/talking-head.mjs generate --plan plan.json --out runs/intro --dry-run
node <skill>/scripts/talking-head.mjs generate --plan plan.json --out runs/intro
脚本会合成所有台词、检查实际时长、生成真人出镜视频,并转录返回的视频。它会保存请求 ID 和结果。重复运行相同的命令会继续处理这些请求;如果脚本或图片有变更,则需要使用新的输出目录。如果请求响应丢失,请按照恢复说明操作,不要删除状态后再购买另一条录音。
H3 会将 ElevenLabs 录音作为声音和表达方式的参考。它会生成自己的音频,并非保证逐帧精确的口型同步渲染器。**人物说话的镜头请保留 H3 音频。**动态场景使用 ElevenLabs 旁白。不要用第二条音轨为整部影片配音,也不要在人物说话的镜头上叠加旁白。检查 verification.json:差异可能来自模型的增补、遗漏或转录错误。先查看实际片段再做决定,不要自动购买替换录音。
设计影片
generate 会将 visuals.mjs 复制到输出文件夹。在该文件夹中编辑它。初始美术素材是可运行的示例,不是最终创作简报。渲染器会针对每一帧,以 Canvas 2D 上下文调用 draw(ctx, scene, time, { width, height, fps })。场景时间以局部秒数计;scene.words 包含测量得到的语音时间信息。
- 只要说话者出现在画面中,就让其与精心设计的元素共享画面:关键词、图表、下三分之一字幕条或有边框的版式。水印或整句字幕都不能代替这种设计。
- 不要让叠加内容遮住脸部。检查实际合成的前段、中段和后段画面。如果脸部与默认的下三分之一字幕条重叠,请移动或缩小美术内容。
- 顺着论述推进,而不是每遇到一个名词就切镜头。动态效果应展现观点:比较、流程、逐渐增长的列表或关联关系。留出足够的阅读时间。
- 图形可以比对应的口播锚点提前约 6 帧出现;延后揭晓的答案则应在对应词语出现时呈现。说话场景应使用返回视频中测得的时间信息,而不是原始 TTS 时间信息。切勿移动音频来匹配图形。
- 除非简报要求其他风格,否则说明性图形应优先采用明亮、易读的背景。不要虚构统计数据,也不要添加通用的装饰性仪表盘。
- 使用基于时间的确定性绘制。在
draw中不要使用网络素材、随机值或挂钟时间动画。环境还提供registerFont(path, family);如果语言需要宿主环境中没有的字形,请在第一帧调用一次以加载本地字体。请按实际输出尺寸检查文字。
渲染和审阅
node <skill>/scripts/talking-head.mjs render --manifest runs/intro/film.json
渲染在本地进行,无需调用服务商。它会保留各源场景的原始声音,添加美术内容,并将场景拼接起来。请检查 review/ 中每个场景的合成图像,并在可以播放时带声音播放 film.mp4,审阅表达效果、场景衔接和口型同步。仅凭静态图像和转录文本无法确认这些质量;如果无法收听或观看,请说明这一限制。
交付 MP4、可编辑的 visuals.mjs 和计划(如有需要),以及 speech.vtt(如有要求)。说明任何尚未审阅的转录差异或可见问题。不要在公开示例或提交内容中包含私人语音样本、服务商 URL、凭据和内部运行状态。