MOSS-Transcribe-Diarize 命令行批量处理:mtd-subtitle 导出 SRT/ASS/JSON 完整指南
【免费下载链接】MOSS-Transcribe-DiarizeA 0.9B model for long-form transcription in 50+ languages with speaker diarization, timestamps, and acoustic event awareness项目地址: https://gitcode.com/gh_mirrors/mo/MOSS-Transcribe-Diarize
会议录音、播客、访谈视频……面对几小时的多说话人音频,手动整理字幕几乎是噩梦。MOSS-Transcribe-Diarize是开源的 0.9B 端到端音频理解模型,支持 50+ 语言,能一次性完成长音频转写、说话人分离(S01、S02…)、时间戳标注和声学事件感知;其配套命令行工具mtd-subtitle则把这一能力封装成一条命令:输入一个音视频文件,自动产出SRT / ASS / JSON字幕文件,还能用 FFmpeg 把字幕直接烧录进 MP4。本文就是它的批量处理完整指南,看完即可上手。
3 步装好 mtd-subtitle 命令
整个项目通过 pip 安装,安装后即可使用mtd-subtitle和mtd-subtitle-web两个命令(入口定义见 pyproject.toml):
git clone https://gitcode.com/gh_mirrors/mo/MOSS-Transcribe-Diarize.git cd MOSS-Transcribe-Diarize uv venv --python 3.12 .venv source .venv/bin/activate uv pip install -e ".[torch-runtime]" --torch-backend=auto💡 有 NVIDIA GPU 的同学建议再装uv pip install flash-attn,长音频推理速度明显更快。命令行入口位于 moss_transcribe_diarize/app/cli.py。
mtd-subtitle 工作流程:一条命令完成转写
模型的输入是原始音频,输出是带时间戳和说话人标签的紧凑转写流(如[0.48][S01]大家好[1.66]),架构图如下:
mtd-subtitle 的完整工作流只有 4 步(逻辑见 cli.py):
- 转写:加载模型,把音频转成带
[Sxx]说话人标签和时间戳的文本流 - 解析:解析转写流为结构化字幕片段(时间、说话人、文本)
- 导出:同时写出
raw_transcript.txt、segments.json、subtitle.srt、subtitle.ass四个文件 - 烧录(可选):加
--render时调用 FFmpeg 生成带硬字幕的output.mp4
命令结束后,终端会打印一份 JSON 摘要:输出目录、片段数量、各文件路径、token 数和耗时,方便直接接入脚本。
一键批量处理命令与参数详解
最小可用命令:
mtd-subtitle /path/to/input.mp4 \ --model OpenMOSS-Team/MOSS-Transcribe-Diarize \ --out-dir runs/example \ --render常用参数一览:
| 参数 | 作用 | 默认值 |
|---|---|---|
| 第一个位置参数 | 输入音频或视频路径(mp4 / wav / m4a 等) | 必填 |
--out-dir | 输出目录,不存在会自动创建 | 自动按时间戳生成runs/cli_… |
--model | 模型路径或 Hub 模型 ID | 本地pretrained/目录 |
--backend | 推理后端:hf(本地)或vllm(远程服务) | hf |
--device/--dtype | 计算设备与精度,auto自动选择 GPU | auto/bf16 |
--max-new-tokens | 最大生成 token 数,长音频务必调大 | 2048 |
--decoding | greedy(稳定)或sample(配合--temperature) | greedy |
--prompt | 自定义提示词,可在默认转写提示后追加"热词提示:xxx"提升专名准确率 | 默认转写+分离提示 |
--render | 追加:用 FFmpeg 烧录 ASS 字幕生成output.mp4 | 关闭 |
批量处理很简单——CLI 一次处理一个文件,用 shell 循环即可跑完整个目录:
for f in audio/*.wav; do mtd-subtitle "$f" --model OpenMOSS-Team/MOSS-Transcribe-Diarize \ --out-dir "runs/$(basename "${f%.*}")" --max-new-tokens 16384 done经验值:1 小时长音频建议
--max-new-tokens设为 16384~65536,否则解码器可能在转写完之前就停止。
SRT / ASS / JSON 三种字幕格式详解
📄 segments.json —— 结构化数据源
JSON 导出由 subtitle/export.py 生成,每个片段包含id、start、end、speaker、text五个字段,适合后续程序化处理、翻译或按说话人切分音频。
🎞 subtitle.srt —— 通用外挂字幕
SRT 是兼容性最好的字幕格式,几乎所有播放器都支持。mtd-subtitle 默认在每行前加上说话人前缀(如S01: 大家好),片段模型定义见 subtitle/models.py。
🎨 subtitle.ass —— 带说话人配色的高级字幕
ASS 导出的亮点:
- 按说话人自动配色:为 S01、S02… 各生成独立样式,颜色从调色板循环取用
- 自动探测视频分辨率:用 ffprobe 读取输入视频宽高写入
PlayResX/PlayResY,字号按高度自适应,纯音频输入则回退 1920×1080 - 重叠台词自动分行道:时间轴重叠的台词会上下错开显示,不会互相覆盖(逻辑见 subtitle/layout.py)
烧录到视频时,FFmpeg 命令由 app/ffmpeg.py 中的burn_ass_subtitles构造。
进阶:接入 vLLM 后端处理更大批量
如果本地显存有限,或想用推理服务集中跑大批量文件,可以把模型部署为 vLLM 服务后,让 CLI 走远程后端:
mtd-subtitle input.mp4 \ --backend vllm \ --vllm-base-url http://127.0.0.1:8000/v1 \ --max-new-tokens 65536远程实现位于 app/vllm_runner.py,它会自动把任意格式的输入转成 WAV 字节流,通过 OpenAI 兼容的/v1/audio/transcriptions接口上传,本地无需加载模型。配合 vLLM 的高并发能力,这是吞吐最大的批量方案。
常见问题与性能技巧(避坑清单)
--render报错提示需要 FFmpeg:系统 PATH 中必须同时存在ffmpeg和ffprobe,先安装 FFmpeg 再重试- 转写在视频一半处戛然而止:
--max-new-tokens太小,调大后重跑 - 专有名词总写错:用
--prompt在默认提示后追加"热词提示:产品名, 人名" - GPU 长音频显存不够:安装
flash-attn;CLI 会自动按 FlashAttention-2 → SDPA 的优先级选择注意力后端(见 app/model_runner.py) - 想要可视化界面:改用
mtd-subtitle-web --model OpenMOSS-Team/MOSS-Transcribe-Diarize --port 7860,打开浏览器即可上传、审阅并下载 JSON/SRT/ASS(入口见 app/web_cli.py)
总结
| 需求 | 推荐做法 |
|---|---|
| 单个文件快速出字幕 | mtd-subtitle 文件 --out-dir runs/x |
| 一个目录批量跑 | shell for 循环 + 独立--out-dir |
| 大批量、省显存 | --backend vllm接入 vLLM 服务 |
| 直接出成品视频 | 追加--render |
MOSS-Transcribe-Diarize 用"转写+分离+时间戳"一次成型的设计,省掉了传统 ASR+VAD+说话人分离多模型拼接的烦恼;而 mtd-subtitle 把整条流水线压缩成一行命令,配合 JSON 摘要输出,天然适合写进自动化脚本。想要微调适配自己的音频域,可继续参考 FINETUNING.md。
【免费下载链接】MOSS-Transcribe-DiarizeA 0.9B model for long-form transcription in 50+ languages with speaker diarization, timestamps, and acoustic event awareness项目地址: https://gitcode.com/gh_mirrors/mo/MOSS-Transcribe-Diarize
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考