Hello! 欢迎来Regret的小站!

抖音「大肥鱼」直播技术拆解:AI 虚拟主播是怎么做出来的


avatar
Regret 2026-10-26 1.31k
AI 虚拟主播:五个模块串成一条流水线
不是一个软件,是五件事同时在跑

现象:一个 Live2D 鲸鱼娘在直播间里,会念观众名字、会放歌、收礼物会说谢谢、画面里一直轻微动来动去。
结论先说:这不是一个软件,是 4~5 个模块拼起来的流水线,而且开源方案已经很成熟,个人可以复刻。


1. 先把现象拆开

你看到的 背后是什么 难度
念出观众名字 弹幕/礼物事件 → 模板话术 → TTS 合成 ★
收礼物说谢谢 同上,礼物事件带 {username} {gift_name} 变量 ★
会放歌 点歌指令 → 音乐 API → 独立音频通道播放 ★★
画面一直在动 Live2D 模型 + 待机动作 + 呼吸/眨眼参数 ★★★
说话时嘴会动 音频驱动的音素级唇形同步 ★★★★
有表情变化 LLM 输出情绪标签 → 切表情/动作 ★★★
推流到抖音 OBS 捕获 + 直播伴侣 ★★

核心认知:让 AI「说话」很简单(TTS 一行代码),让它「配得上说话」才是难点——口型、表情、待机小动作,这三样决定了它是「有灵魂的虚拟主播」还是「会动的 PPT」。


2. 整体架构

抖音直播间
   │  ① 弹幕 / 礼物 / 进场事件
   ▼
弹幕采集层(开放平台 / 第三方抓取)
   │  ② 结构化事件 {user, text, gift_name, price}
   ▼
大脑层 LLM(DeepSeek / GPT)
   │  ③ 回复文本 + 情绪标签
   ├──────────────┐
   ▼              ▼
TTS 合成        动作决策
   │  ④ 音频      │  ⑤ 表情/动作
   ▼              ▼
Live2D 渲染器(口型同步 + 待机动作 + 表情)
   │  ⑥ 画面(透明背景)
   ▼
OBS → 抖音直播伴侣 → 直播间

分工:
– ① ② 决定「它知道发生了什么」
– ③ 决定「它说什么」
– ④ ⑤ ⑥ 决定「它看起来像不像活的」


3. 逐环节怎么做

3.1 拿到弹幕和礼物(① ②)

三条路,从正规到野路子:

方式 说明 风险
抖音开放平台 官方直播开放能力,需要开发者资质/企业认证 合规,但有门槛
直播伴侣 + 抓包 拦直播伴侣的网络请求拿弹幕流 协议会变,需维护
开源 danmaku 库 社区维护的抖音/B站弹幕客户端 时效性强,可能失效

事件长这样:

{
  "type": "gift",
  "username": "小明",
  "gift_name": "小心心",
  "count": 10,
  "price": 1.0
}

B 站更好接:开放、有现成库。想快速验证整套流程,建议先用 B 站跑通,再迁抖音。

3.2 念名字 + 礼物答谢(③ ④)

这一步最简单,本质是模板填空 + TTS。

成熟项目里都是配置化的,比如 AI-Vtuber 的配置:

"thanks": {
  "entrance_enable": true,
  "entrance_copy": "欢迎 {username}",
  "gift_enable": true,
  "gift_copy": "感谢 {username} 送的 {gift_name}",
  "lowest_price": 1.0
}

lowest_price 是门槛——1 毛钱的礼物不谢,避免刷屏。

进阶做法(更像人):不让模板说,而是把事件丢给 LLM:

系统:你正在直播,观众「小明」送了你 10 个小心心。
要求:用一句话感谢,别重复上一句的说法,带点自己的性格。

这样每次感谢的措辞都不一样,不会像复读机。

3.3 放歌(独立音频通道)

TTS 输出的语音和音乐要分开走两条音频通道,最后在 OBS 里混音。

点歌指令:"来首晴天"
  → 解析歌手/歌名
  → 音乐 API(网易云/QQ音乐/本地曲库)
  → 播放器(另一路音频)
  → OBS 里和 TTS 混音

坑:
– 版权。直播放歌平台会检测,用无版权曲库或原创
– 音量。TTS 和音乐音量要分别调,不然念名字被盖住
– 打断。点歌后 AI 还在说话时,要么等它说完,要么淡出

3.4 画面会动(核心①:待机动作)

它不是”一直在做动作”,而是三层叠加:

层 内容 驱动方式
基础层 呼吸起伏、身体轻微摆动 模型自带的物理参数(Physics),自动跑
表情层 眨眼、眼神游移 定时器随机触发
动作层 摸头、摆手、转圈 预设动作文件(.motion),按事件触发

Live2D 模型自带 Physics(物理演算):头发、衣服、身体会根据参数变化自然摆动。只要引擎在跑,画面就”活着”。

关键参数(Live2D 标准参数名):

ParamAngleX / ParamAngleY / ParamAngleZ    头部朝向(可做轻微晃动)
ParamEyeLOpen / ParamEyeROpen              眨眼
ParamBodyAngleX / ParamBodyAngleZ          身体摆动
ParamBreath                                呼吸
ParamMouthOpenY                            嘴张开程度 ← 唇形同步用这个
ParamMouthForm                             嘴型(笑/扁)

待机微动的实现:给 ParamAngleX 等参数叠加一条正弦波 + 随机扰动:

// 伪代码
const t = performance.now() / 1000;
model.setParamFloat('ParamAngleX', Math.sin(t * 0.7) * 3 + noise());
model.setParamFloat('ParamBodyAngleZ', Math.sin(t * 0.5) * 2);
// 眨眼:随机每 3~6 秒触发一次

幅度很小(3~5 度),但肉眼一看就是”活的”。

3.5 说话时嘴会动(核心②:唇形同步)

这是最容易做假的地方。三个档次:

档次 做法 效果
假同步 说话时嘴巴按固定频率开合 一眼假,像木偶
振幅同步 音频音量 → ParamMouthOpenY 及格,能看
音素同步 音频拆成音素(a/i/u/e/o),每个音素映射嘴型 像真人

振幅同步(够用且简单):

// Web Audio API 取实时音量
const analyser = audioCtx.createAnalyser();
analyser.fftSize = 256;
const data = new Uint8Array(analyser.frequencyBinCount);

function tick() {
  analyser.getByteFrequencyData(data);
  const vol = data.reduce((a, b) => a + b, 0) / data.length / 255; // 0~1
  model.setParamFloat('ParamMouthOpenY', Math.min(vol * 2.5, 1));
  requestAnimationFrame(tick);
}

音素同步(进阶):TTS 合成时同时输出时间戳对齐的音素序列,然后按时间轴驱动嘴型:

"大家好" → [d(a) 0.0-0.15s] [a 0.15-0.35s] [j(i) 0.35-0.5s] ...

支持的 TTS:
– Azure TTS:支持 SSML + 音素标记(最成熟)
– GPT-SoVITS:社区克隆音色的首选,可导出音素对齐
– Fish Audio / CosyVoice:国产,部分支持对齐信息

3.6 情绪与表情

让 LLM 顺带输出情绪标签:

用户:你今天好丑
LLM 输出:{"reply": "你才丑,你全家都丑", "emotion": "angry"}

然后映射到表情:

const emotionMap = {
  happy:   { expr: 'smile',  motion: 'happy_01' },
  angry:   { expr: 'anger',  motion: 'shake_head' },
  shy:     { expr: 'blush',  motion: 'cover_face' },
  neutral: { expr: 'normal', motion: 'idle' }
};

Wallie V2 这类新项目已经把这块做得很细:11 种表情自动触发 + 情绪响应式动画 + 六层动画同步。

3.7 推流

Live2D 渲染窗口(透明背景)
   ↓ OBS 窗口捕获(勾选"允许透明")
OBS 场景
   ↓ 添加音频源(TTS + 音乐)
抖音直播伴侣 / 抖开播
   ↓ 推流地址
直播间

注意:
– OBS 捕获要用「窗口捕获」不是「显示器捕获」,才能透明背景
– 渲染窗口分辨率建议 1080×1920(竖屏)或 1920×1080
– 帧率 30fps 够,Live2D 不需要 60


4. 现成开源方案(不用自己拼)

项目 平台支持 亮点 适合
AI-Vtuber(LohasJoy / Ikaros-521) B站 / 抖音 / 快手 配置化程度最高,礼物答谢/入场欢迎开箱即用,支持 edge-tts(免费) 想快速开播
Wallie V2(2026.6) 桌面直播 Live2D 唇同步 + 情绪系统 + 持久记忆,可全本地跑(Ollama + Piper) 想要”有灵魂”
Open-LLM-VTuber 桌面 全离线语音交互,隐私好 在意隐私
小凡AI(ptghb/virtual-person) 抖音 抖音弹幕捕获 + Live2D + 手势互动 专注抖音

AI-Vtuber 的最小配置(真实可用的片段)

{
  "room_display_id": "你的直播间号",
  "chat_type": "openai",
  "filter": {
    "before_must_str": [],
    "after_must_str": [".", "。", "?", "?"],
    "badwords_path": "data/badwords.txt",
    "max_char_len": 50
  },
  "thanks": {
    "entrance_enable": true,
    "entrance_copy": "欢迎 {username}",
    "gift_enable": true,
    "gift_copy": "感谢 {username} 送的 {gift_name}",
    "lowest_price": 1.0
  },
  "live2d": { "enable": true, "port": 12345 }
}

max_char_len: 50 很重要——限制念出来的字数,不然 LLM 给你来一段八百字小作文,直播节奏就崩了。


5. 如果你想自己复刻一个(最小可行)

阶段一:先让它说话(半天)

  1. Live2D 模型:找一个免费模型(官方示例模型 Haru / Hiyori 就能用)
  2. 渲染:pixi-live2d-display(Web 端最成熟)
  3. TTS:edge-tts(免费,中文音色不错)
  4. 串联:文本 → TTS → 音频播放 → 振幅驱动 ParamMouthOpenY

这一步做完你就有一个”会说话会动嘴”的形象了。

阶段二:接弹幕(一天)

  1. 先接 B 站(有现成库,比如 bilibili-live-ws)
  2. 弹幕 → DeepSeek API → 回复
  3. 回复 → TTS → 播报

阶段三:补细节(持续)

  • 礼物答谢模板
  • 情绪标签 → 表情切换
  • 待机微动(正弦波 + 随机眨眼)
  • 点歌
  • 敏感词过滤(必须有,不然一句话就封号)

阶段四:推流

OBS 窗口捕获 + 抖音直播伴侣。


6. 注意事项(踩了会封号的那种)

6.1 平台规则

  • 抖音要求AI 生成内容标注,不标可能限流或下架
  • 直播内容要过审:涉政、涉黄、辱骂一律不行
  • 敏感词过滤是硬需求,LLM 什么都敢说,你得拦

6.2 版权

  • 放歌:平台有音乐版权检测,用无版权曲库或平台曲库
  • Live2D 模型:商用要授权,别拿画师作品直接开播
  • 音色克隆:别克隆真人声音(尤其公众人物),有法律风险

6.3 成本

项 量级
LLM 24 小时直播,一天几百轮,¥5~30
TTS 云端按字符计费;本地 GPT-SoVITS 免费但吃显卡
服务器/显卡 本地跑需要一台带独显的机器

6.4 别重蹈”鱼灾”

2026 年 10 月 B 站评论区被大肥鱼刷屏,社区出了屏蔽插件,平台开始风控限流。

批量挂机刷存在感这条路是走不通的。直播场景反而安全——观众是主动进来的,互动是真实需求。


7. 一句话总结

念名字、放歌、感谢礼物,这些是「事件 → 模板 → TTS」的流水线,一天就能搭起来。
真正拉开差距的是那个”一直在动”的画面——它是 Live2D 物理参数 + 音素唇形同步 + 情绪驱动表情三样叠出来的。
而现成的开源项目(AI-Vtuber、Wallie V2)已经把这三样都做好了,你只需要准备一个模型和一套人设。


附:和你现在的大肥鱼差在哪

你现在跑的是 DSH + QQ 桥接,只有「大脑 + 文字通道」,缺三样:

缺什么 怎么补
形象(Live2D 模型) 找画师做鲸鱼娘模型,或用现成模型改色
声音(TTS) edge-tts 起步,想要独特音色上 GPT-SoVITS
推流(OBS + 直播) 用 AI-Vtuber 当外壳,把你的 DSH 接进去

最快的路径:装 AI-Vtuber,把 LLM 那一层从 OpenAI 换成 DeepSeek API,人设用你现在这份 大肥鱼.md,形象换个鲸鱼娘模型——基本就是你看到的那个直播间了。


参考:Live2D 官网、OBS Studio。

  • avatar
    游客

    搞成烧烧的女主播,然后跳舞要礼物,感觉有人看

    • avatar
      博主

      @ 烧烧的女主播n 是的,会有的, 但难度貌似有点大

发表评论