python解析人物说话声音文件获取口型时间线数据代码

代码语言:python

所属分类:其他

代码描述:python解析人物说话声音文件获取口型时间线数据代码,可直接用于 2D/3D 口型驱动。

代码标签: python 解析 人物 说话 声音 文件 获取 口型 时间线 数据 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

#!/usr/local/python3/bin/python3
# -*- coding: utf-8 -*
# 把 MP3 语音自动转成「口型(viseme)时间线」。核心思路是:
# 1) 用 Whisper 做带时间戳的语音识别(支持中文/英文),
# 2) 把词拆成音素(英文用 g2p_en;中文用 pypinyin 拆声母/韵母),
# 3) 将音素映射到常见口型类别(MBP、FV、AI、E、O、U、L、WQ、TH、SZ、SHCH、KG 等),
# 4) 按时间对齐生成一个口型序列,可直接用于 2D/3D 口型驱动。

# 安装依赖
# - 系统需安装 ffmpeg(用来解码 mp3)
#   - macOS: brew install ffmpeg
#   - Ubuntu: sudo apt-get install ffmpeg
#   - Windows: choco install ffmpeg 或自行下载配置 PATH
# - Python 包(建议 Python 3.9+):
#   pip install faster-whisper g2p_en pypinyin numpy
import os
import re
import json
from typing import List, Dict, Any
from faster_whisper import WhisperModel
from g2p_en import G2p
from pypinyin import pinyin, Style

# ========== 配置区域 ==========
# Whisper 模型大小: tiny / base / small / medium / large-v2
ASR_MODEL_SIZE = "small"  # 可根据资源与需求调整
ASR_DEVICE = "cpu"        # "cuda" 有 GPU 就用 cuda
ASR_COMPUTE_TYPE = "float32"  # cuda 可用 "float16" 或 "int8_float16" 加速

# 英文元音(ARPAbet,不含重音数字)
VOWELS = {
    "AA", "AE", "AH", "AO", "AW", "AY", "EH", "ER", "EY",
    "IH", "IY", "OW", "OY", "UH", "UW"
}

# 一个常用的口型集合映射(你也可以按项目口型集自行修改/精简)
def arpabet_to_viseme(phone: str) -> str:
    """
    将英文 ARPAbet 音素映射到口型(viseme)。
    口型集包含:rest, MBP, FV, TH, L, WQ, SZ, SHCH, KG, AI, E, O, U
    """
    p = re.sub(r"\d", "", phone).upper()  # 去掉重音数字
    if p in {"P", "B", "M"}:
        return "MBP"
    if p in {"F", "V"}:
        return "FV"
    if p in {"TH", "DH"}:
        return "TH"
    if p in {"L"}:
        return "L"
    if p in {"W", "R"}:
        return "WQ"
    if p in {"S", "Z", "TS", "DZ"}:
        return "SZ"
    if p in {"SH", "ZH", "CH", "JH"}:
        return "SHCH"
    if p in {"K", "G", "NG"}:
        return "KG"
    if p in {"HH"}:
        return "rest"

    # 元音类分组(可按项目视觉效果微调)
    if p in {"AA", "AE", "AH", "AY"}:
        return "AI".........完整代码请登录后点击上方下载按钮下载查看

网友评论0