5.2 KiB
5.2 KiB
ComfyUI-VideoToText 中文快速入门
视频转文字 ComfyUI 节点包,配合 ComfyUI-MiMoASR(小米 MiMo-V2.5-ASR)使用。
完整英文文档请看 README.md,实战安装记录在 INSTALL_NOTES.md。本文档给的是最短可工作路径。
这个包做什么
提供视频→音频→JSON 转录管线的"包装层"。ASR 本身由 MiMoASR 完成(强中英 code-switching、方言、抗噪),本包负责前后处理:
| 节点 | 作用 |
|---|---|
| 🎙️ Load Video (ASR) | 从 ComfyUI/input 选视频 |
| 🎙️ Extract Audio (ffmpeg) | 抽音轨成 16kHz WAV,带 mtime 缓存 |
| 🎙️ Audio From Path | WAV 路径 → ComfyUI AUDIO dict(喂给 MiMoASR) |
| 🎙️ Build Transcript JSON | 文本 + 元数据 → v2.0 JSON |
| 🎙️ Save Transcript JSON | 保存到 ComfyUI/output/ |
装节点(在 ComfyUI 服务器上)
# 1) 装 ffmpeg(如果还没装)
$ sudo apt install ffmpeg
# 2) clone 本包
$ cd /mnt/modelall/ComfyUI/custom_nodes
$ git clone https://github.com/aadebuger/ComfyUI-VideoToText.git
# 或者从 tarball 装:
$ tar xzf /tmp/ComfyUI-VideoToText-v0.2.0.tar.gz
# 验证目录结构
$ ls ComfyUI-VideoToText/__init__.py # 必须存在,不能多嵌套一层
# 3) 装唯一的依赖
$ cd /mnt/modelall/ComfyUI && source .venv/bin/activate
$ uv pip install torchaudio
# 4) 装 MiMoASR(如果还没装,详见它自己的 README)
$ cd /mnt/modelall/ComfyUI/custom_nodes
$ git clone https://github.com/aadebuger/ComfyUI-MiMoASR.git
$ cd ComfyUI-MiMoASR && ./scripts/install_server.sh
# 5) 装 PreviewAny(CLI 用,从 rgthree-comfy)
$ cd /mnt/modelall/ComfyUI/custom_nodes
$ git clone https://github.com/rgthree/rgthree-comfy.git
装模型(MiMo 权重,~24 GB)
# HF cache 必须重定向到大盘
$ export HF_HOME=/mnt/modelall/hf_cache
$ mkdir -p $HF_HOME
$ uv pip install -U huggingface-hub
# 主模型 ~16 GB
$ hf download XiaomiMiMo/MiMo-V2.5-ASR \
--local-dir /mnt/modelall/models/MiMo-V2.5-ASR
# Audio tokenizer ~1-2 GB
$ hf download XiaomiMiMo/MiMo-Audio-Tokenizer \
--local-dir /mnt/modelall/models/MiMo-Audio-Tokenizer
# 国内下载慢的话加镜像:
# $ export HF_ENDPOINT=https://hf-mirror.com
还要 clone MiMo 上游 repo(loader 注入 sys.path 用):
$ mkdir -p /opt/repos && cd /opt/repos
$ git clone https://github.com/XiaomiMiMo/MiMo-V2.5-ASR.git
启动 ComfyUI(关键三个 env var)
$ pkill -9 -f main.py; sleep 3
$ cd /mnt/modelall/ComfyUI && source .venv/bin/activate
$ export HF_HOME=/mnt/modelall/hf_cache
$ export MIMO_ASR_REPO=/opt/repos/MiMo-V2.5-ASR
# 可选:把 MiMo 绑到 GPU 1
# $ export CUDA_VISIBLE_DEVICES=1
$ nohup python main.py --listen 0.0.0.0 --port 8188 > ~/comfy_start.log 2>&1 &
$ sleep 30
$ grep -iE "IMPORT FAILED|VideoToText" ~/comfy_start.log
验证(在 Mac 上跑)
$ curl -s http://10.8.0.12:8188/object_info | python3 -c "
import json, sys
d = json.load(sys.stdin)
for n in ('VTT_LoadVideo','VTT_ExtractAudio','VTT_AudioFromPath',
'VTT_BuildTranscriptJSON','VTT_SaveTranscript',
'MiMoASRLoader','MiMoASRTranscribe','PreviewAny','LoadAudio'):
print(f' {n}: {\"OK\" if n in d else \"MISSING\"}')"
9 个全 OK 就 ready。
跑一个视频(在 Mac 上跑 CLI)
$ cd ~/ComfyUI-VideoToText/cli
$ uv pip install --system websocket-client requests
$ uv run python video_to_text_cli.py /path/to/test.mp4 \
--ip 10.8.0.12 \
--model-path /mnt/modelall/models/MiMo-V2.5-ASR \
--tokenizer-path /mnt/modelall/models/MiMo-Audio-Tokenizer \
--language Auto
第一次跑会卡 30–60 秒(MiMo 8B 模型进 VRAM),之后秒级。
可设个 alias 省事:
# ~/.zshrc
alias v2t='uv run python ~/ComfyUI-VideoToText/cli/video_to_text_cli.py \
--ip 10.8.0.12 \
--model-path /mnt/modelall/models/MiMo-V2.5-ASR \
--tokenizer-path /mnt/modelall/models/MiMo-Audio-Tokenizer'
# 用:
$ v2t my_video.mp4 --language Chinese
输出长这样
{
"schema_version": "2.0",
"source": {
"audio_path": "/tmp/comfyui_vtt/foo.wav",
"duration_sec": 123.45,
"video_path": "/path/to/foo.mp4"
},
"model": {
"name": "MiMo-V2.5-ASR",
"tokenizer": "MiMo-Audio-Tokenizer",
"language": "Auto"
},
"text": "你好,今天我们聊一下 ESP32 嵌入式开发……"
}
常见问题速查
| 现象 | 原因 | 解决 |
|---|---|---|
VTT_* 节点 MISSING |
包没装 / 嵌套了 / 没重启 | 重新装 + 重启 ComfyUI |
MiMoASRLoader: MISSING |
MiMoASR 没装好 | 看 MiMoASR README |
transformers 太新报错 |
MiMo 要求 ==4.49.0 |
$ uv pip install transformers==4.49.0 --force-reinstall |
flash-attn NoneType 错误 |
编译静默失败 | 重编,看 ~/flash_attn_build.log |
MIMO_ASR_REPO is empty |
没设环境变量 | 启动前 $ export MIMO_ASR_REPO=/opt/repos/MiMo-V2.5-ASR |
ffmpeg not found |
服务器没装 ffmpeg | $ sudo apt install ffmpeg |
torchaudio is required |
漏装依赖 | $ uv pip install torchaudio |
| CUDA OOM | GPU 0 被占 | $ export CUDA_VISIBLE_DEVICES=1 |
详细排错见 INSTALL_NOTES.md。