AI字幕生成器:WhisperX开源自动字幕方案

📘 教程 2026-08-07 · 更新于 2026-11-05 约 8 分钟阅读

自动生成字幕的难点不是识别文字,而是时间轴对得上、断句能读。这篇给一条完整命令链路:ffmpeg 抽音轨、WhisperX 出词级时间戳、按 42 字符断句、封装或烧录,附质量清单与常见漂移问题。

📜 目录

AI字幕生成器:WhisperX开源自动字幕方案

静音刷视频的人比你想的多,字幕直接决定完播率。但自动字幕做得好不好,差别不在识别文字——现在的模型识别准确率已经很高——而在两件事:时间轴准不准,断句读不读得顺。

WhisperX 解决第一件事:它在 Whisper 的基础上加了词级对齐,每个词都有起止时间。断句靠规则和后处理解决第二件事。

一、整条链路长什么样

步骤 工具 输出
抽音轨 ffmpeg 16kHz 单声道 wav
转写 + 对齐 WhisperX 词级时间戳 JSON
说话人区分(可选) WhisperX + pyannote 带 speaker 标签
断句成字幕 Python 脚本 SRT
合成 ffmpeg 软字幕轨或烧录版

每一步都能单独跑,出问题好定位。整条链路全本地,不上传任何素材。

二、装环境

python -m venv venv
source venv/bin/activate        # Windows: venv\Scripts\activate
pip install whisperx

还要装 ffmpeg,Windows 用 winget install Gyan.FFmpeg,macOS 用 brew install ffmpeg,Linux 用系统包管理器。

有 NVIDIA 显卡的话确认 PyTorch 装的是 CUDA 版,否则会静默退回 CPU,一段十分钟视频要跑很久。第一次运行会自动下载模型,large-v3 有几个 GB,留在磁盘上。

三、命令行一次跑完

# 1. 抽音轨,16kHz 单声道是 Whisper 系列的标准输入
ffmpeg -i input.mp4 -vn -ac 1 -ar 16000 -c:a pcm_s16le audio.wav

# 2. 转写并对齐(指定语言能省时间也更准)
whisperx audio.wav --model large-v3 --language zh --output_format srt --output_dir out

# 3. 需要区分说话人时加 --diarize,需先在 Hugging Face 同意模型条款并配置 token
whisperx audio.wav --model large-v3 --language zh --diarize --output_format srt

生成的 out/audio.srt 就是字幕文件。

四、参数怎么选

参数 建议 说明
--model large-v3 精度最高;赶时间用 medium
--language 明确指定 不指定会先做语种检测,多花时间还可能误判
--batch_size 8~16 显存小就调低,OOM 时先降这个
--compute_type float16 有显卡用 fp16,CPU 用 int8
--vad_filter 开启 过滤静音段,减少幻听出来的句子
--diarize 按需 访谈、会议类必须开

--vad_filter 值得单独说:视频里的静音、背景音乐段落,模型容易"听"出不存在的文字,开了 VAD 能挡掉很大一部分。

五、断句:决定字幕能不能读

模型给的是一整段话。直接按句号切,一行可能五六十个字,手机上三行塞不下。行业通行的规范:

一个可用的后处理思路:

MAX_LEN = 20   # 中文按字数

def split_line(words, max_len=MAX_LEN):
    lines, buf = [], []
    for w in words:
        if sum(len(x["word"]) for x in buf) + len(w["word"]) > max_len and buf:
            lines.append(buf)
            buf = []
        buf.append(w)
    if buf:
        lines.append(buf)
    return lines

按词级时间戳累加到上限就断开,这样每行的时间轴天然准确,不需要事后重新对齐。

六、封装还是烧录

# 软字幕:原片不动,播放器可开关,体积只增加字幕文件
ffmpeg -i input.mp4 -i out/audio.srt -c copy -c:s mov_text output.mp4

# 烧录:直接把字幕压进画面,任何平台都能看到,但不可关闭
ffmpeg -i input.mp4 -vf "subtitles=out/audio.srt:force_style='FontName=Source Han Sans,FontSize=20'" -c:a copy output.mp4

发到短视频平台建议烧录,因为很多平台不读软字幕;存档和长视频建议软字幕,观众能关。烧录时中文字体要指定,否则会显示成方块。

七、质量清单:发布前逐条过

  1. 人名、品牌名、专业术语逐条核对——这是错误率最高的部分
  2. 数字和单位确认,尤其是"十"和"是"、"一"和"以"这类同音错
  3. 时间轴抽查三处:开头、中间、结尾。中段漂移说明有长静音没被正确切分
  4. 每条字幕停留时间是否够读
  5. 全片看一遍有没有整段缺失(通常是 VAD 把说话声当噪音过滤了)

常见问题

Q:中文识别该用 WhisperX 还是 FunASR? A:纯中文内容 FunASR 往往更准,尤其带口音和专有名词;中英混杂、多语种场景 Whisper 系列更稳。可以两个都跑,比对取好的。

Q:能翻译成双语字幕吗? A:能。把转写出来的文本交给 LLM 翻译,保留原有时间戳,再按原时间轴生成第二条字幕轨。别让模型重新断句,否则时间轴全废。

Q:时间轴整体偏移几秒怎么办? A:多半是音视频起始时间不一致。用 ffmpeg -itsoffset 校正,或者对字幕统一做时间平移。

Q:一小时视频要跑多久? A:取决于显卡。large-v3 在有 CUDA 的机器上通常比实时快数倍,CPU 上可能比实时还慢。先拿一分钟片段试跑,估出倍率再决定。

Q:能商用吗? A:Whisper 系列模型是开源许可,具体条款看仓库;说话人区分用的模型另有条款,商用前逐个确认。

相关文章

延伸阅读 · 含推广链接

跑通原型和长期挂着跑是两件事。按量计费起一台,用完释放,不用为闲置的机器付整月。

看按量计费价格 →

相关文章
2026-08-06
PDF转Markdown的AI方案:3步把文档喂给大模型
2026-07-23
LLM评估指标与方法:2026年完整指南
2026-07-19
AI应用安全:7种Prompt注入攻击手法与实战防御策略
2026-07-26
2026年AI开发者PC配置要求
2026-08-01
llms.txt生成器:让AI引用你内容的站点地图
2026-08-14
Ollama 模型体积 2026:每个模型到底需要多少内存

本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。

💬 评论 (0)

暂无评论,来说两句吧~

登录后评论