Communitygithub.com

与任何人聊天

通过与任何人(真人或虚构角色)聊天,自动在线查找其语音、提取清晰参考样本并生成音频回复。还支持从上传的图片中生成匹配的语音。

与任何人聊天 是什么?

这是一个强大的AI技能,允许用户克隆真实人物或虚构角色的声音,并基于文本生成语音回复。它支持两种主要工作流:基于姓名(工作流A)和基于图片(工作流B)。工作流A通过搜索YouTube或Bilibili等平台上的公开演讲、采访视频,自动下载音频和字幕,并使用脚本提取最佳语音片段作为参考。工作流B则利用视觉分析描述图片中人物的特征,然后通过语音设计脚本生成匹配的语音ID。最终,该技能通过`tts`技能将用户输入的文本合成为目标声音的音频文件。该技能强调道德使用,严禁冒充、欺诈或骚扰,并要求仅使用公共媒体资源。支持平台包括Cursor和命令行环境,依赖yt-dlp、ffmpeg和Noiz API。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/noizai/skills/tree/main/skills/chat-with-anyone

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

与任何人聊天 是做什么的?

从在线视频克隆真实人物的声音,或从照片设计语音,然后以该人物的身份进行角色扮演并生成语音回复。

重要提示:道德使用与版权

此技能合成了模仿真实人声的语音。在继续之前,代理必须:

  1. 绝不冒充他人进行欺骗、欺诈或骚扰。
  2. 仅使用公开可用的媒体(公开演讲、采访、新闻发布会)作为参考音频。
  3. 告知用户生成的音频是合成的,不应作为真实录音呈现。
  4. 拒绝针对未经同意的个人,或明显用于欺骗、骚扰或诽谤的请求。

如果用户的意图看起来有害,礼貌拒绝并解释原因。

先决条件

依赖项类型如何验证
ffmpeg系统二进制ffmpeg -version
yt-dlp系统二进制yt-dlp --version
tts 技能Cursor 技能ls skills/tts/scripts/tts.py
NOIZ_API_KEY环境变量或文件python3 skills/tts/scripts/tts.py config --show

首次运行之前,请验证所有依赖项是否存在:

ffmpeg -version && yt-dlp --version && ls skills/tts/scripts/tts.py

如果缺少 yt-dlp,请安装:

uv pip install yt-dlp

如果未配置 Noiz API 密钥:

python3 skills/tts/scripts/tts.py config --set-api-key YOUR_KEY

模式选择

  • 用户说出一个人名(真实或虚构)--> 工作流 A
  • 用户提供一张图片,人物无法识别 --> 工作流 B
  • 用户提供一张图片,人物是可识别的公众人物 --> 工作流 A(真实语音更逼真)
  • 图片中有多个人 --> 先询问是哪个人

工作流 A:基于名称(从在线视频获取语音)

使用此清单追踪进度:

- [ ] A1. 消除角色歧义
- [ ] A2. 查找参考视频
- [ ] A3. 下载音频和字幕
- [ ] A4. 提取最佳参考片段
- [ ] A5. 生成语音

A1. 消除角色歧义

如果有歧义(例如“美国总统”、“蜘蛛侠演员”),请让用户指定具体人物后再继续。

A2. 查找参考视频

使用网络搜索找到人物清晰说话的 YouTube(或 Bilibili)视频。最佳候选:采访、演讲、新闻发布会。避免背景音乐嘈杂的视频。

尝试的搜索查询:

  • {CHARACTER_NAME} interview / {CHARACTER_NAME} 采访
  • {CHARACTER_NAME} speech / {CHARACTER_NAME} 演讲
  • {CHARACTER_NAME} press conference

A3. 下载音频和字幕

mkdir -p "tmp/chat_with_anyone/{CHARACTER_NAME}"
yt-dlp -x --audio-format mp3 \
  --write-subs --write-auto-subs --sub-langs "en,zh-Hans" \
  --convert-subs srt \
  -o "tmp/chat_with_anyone/{CHARACTER_NAME}/%(title)s.%(ext)s" \
  "{VIDEO_URL}"

下载后,列出输出目录以识别音频文件和 SRT 字幕文件:

ls tmp/chat_with_anyone/{CHARACTER_NAME}/

预期输出:一个 .mp3 音频文件和一个或多个 .srt 字幕文件。

如果没有出现字幕文件:尝试另一个具有自动字幕的视频,或为目标语言调整 --sub-langs。

A4. 提取最佳参考片段

使用自动提取脚本——它解析 SRT,找到最密集的 3-12 秒语音窗口,并提取为 WAV 格式:

python3 skills/chat-with-anyone/scripts/extract_ref_segment.py \
  --srt "tmp/chat_with_anyone/{CHARACTER_NAME}/{SRT_FILE}" \
  --audio "tmp/chat_with_anyone/{CHARACTER_NAME}/{AUDIO_FILE}" \
  -o "tmp/chat_with_anyone/{CHARACTER_NAME}/ref.wav"

脚本会打印选定的时间范围并保存参考 WAV。继续之前请验证输出文件存在且非空。

如果脚本报告找不到合适的片段:尝试 --min-duration 2 获取更短的片段,或下载另一个视频。

A5. 生成语音并角色扮演

用角色身份写回复,然后合成语音:

python3 skills/tts/scripts/tts.py \
  -t "{RESPONSE_TEXT}" \
  --ref-audio "tmp/chat_with_anyone/{CHARACTER_NAME}/ref.wav" \
  -o "tmp/chat_with_anyone/{CHARACTER_NAME}/reply.wav"

将生成的音频文件与文本一起呈现给用户。对于后续消息,重复使用相同的 --ref-audio 路径。


工作流 B:基于图片(从照片生成语音)

使用此清单追踪进度:

- [ ] B1. 分析图片
- [ ] B2. 设计语音
- [ ] B3. 预览(可选)
- [ ] B4. 生成语音

B1. 分析图片

使用您的视觉能力检查图片:

  1. 如果人物是可识别的公众人物 --> 切换到工作流 A 以获得真实语音。
  2. 如果无法识别,生成语音描述,包括:
    • 性别(男/女)
    • 大致年龄(例如“大约 30 岁”)
    • 明显的神态(例如开朗、权威、温柔)
    • 上下文线索(例如西装 --> 专业语气;运动服 --> 精力充沛)

B2. 设计语音

将图片和描述传给语音设计脚本:

python3 skills/chat-with-anyone/scripts/voice_design.py \
  --picture "{IMAGE_PATH}" \
  --voice-description "{VOICE_DESCRIPTION}" \
  -o "tmp/chat_with_anyone/voice_design"

脚本输出:

  • 检测到的语音特征(打印到标准输出)
  • 输出目录中的预览音频文件
  • 包含最佳语音 ID 的 voice_id.txt

读取语音 ID:

cat tmp/chat_with_anyone/voice_design/voice_id.txt

B3. 预览(可选)

呈现输出目录中的预览音频文件,让用户试听语音。如果不满意,使用调整后的 --voice-description 或 --guidance-scale 重新运行 B2。

B4. 生成语音并角色扮演

python3 skills/tts/scripts/tts.py \
  -t "{RESPONSE_TEXT}" \
  --voice-id "{VOICE_ID}" \
  -o "tmp/chat_with_anyone/voice_design/reply.wav"

对于后续消息,为保持一致性,继续使用相同的 --voice-id。


示例:基于名称

用户:我想跟特朗普聊天,让他给我讲个睡前故事。

代理步骤:

  1. 角色:唐纳德·特朗普。无需歧义消除。
  2. 搜索 Donald Trump speech youtube,找到清晰的演讲视频。
  3. 下载: yt-dlp -x --audio-format mp3 --write-subs --write-auto-subs --sub-langs "en" --convert-subs srt -o "tmp/chat_with_anyone/trump/%(title)s.%(ext)s" "https://youtube.com/watch?v=..."
  4. 提取参考: python3 skills/chat-with-anyone/scripts/extract_ref_segment.py --srt "tmp/chat_with_anyone/trump/....srt" --audio "tmp/chat_with_anyone/trump/....mp3" -o "tmp/chat_with_anyone/trump/ref.wav"
  5. 以特朗普风格生成语音: python3 skills/tts/scripts/tts.py -t "Let me tell you a tremendous bedtime story..." --ref-audio "tmp/chat_with_anyone/trump/ref.wav" -o "tmp/chat_with_anyone/trump/reply.wav"
  6. 将 reply.wav 和故事文本呈现给用户。

示例:基于图片

用户:[上传 photo.jpg] 我想跟这张图片里的人聊天

代理步骤:

  1. 视觉分析:无法识别的年轻女性,约25岁,休闲毛衣,温暖微笑。
  2. 设计语音: python3 skills/chat-with-anyone/scripts/voice_design.py --picture "photo.jpg" --voice-description "一位25岁左右的中国年轻女性,声音温柔温暖,语气友善" -o "tmp/chat_with_anyone/voice_design"
  3. 从 tmp/chat_with_anyone/voice_design/voice_id.txt 读取语音 ID。
  4. 生成语音: python3 skills/tts/scripts/tts.py -t "你好呀!很高兴认识你!" --voice-id "{VOICE_ID}" -o "tmp/chat_with_anyone/voice_design/reply.wav"
  5. 呈现音频并使用相同的 --voice-id 继续角色扮演。

故障排除

问题解决方案
yt-dlp 下载失败或视频不可用尝试不同的视频 URL;某些地区/视频受限。运行 yt-dlp -U 更新
没有 SRT 字幕文件使用 --sub-lang en,zh-Hans 重新下载;如果仍然没有,尝试其他有自动字幕的视频
extract_ref_segment.py 找不到合适的窗口使用 --min-duration 2 获取更短的片段,或尝试其他视频
语音设计返回错误检查 Noiz API 密钥;确保图片是清晰的人物照片
TTS 输出声音不对对于工作流 A,尝试不同的参考视频;对于工作流 B,调整 --voice-description

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

相关技能