自动字幕能省下逐字敲时间码的工作,但识别结果只是第一稿。人名、数字、否定词和同音词容易错;句子切分也可能太碎。稳妥的流程是先把视频里的声音提取出来,在本地识别,再对着原始台词或录音逐句改字、校时间,最后导出 SRT 并在剪辑软件里检查。

本文用本机 FunASR 处理一段合成的中文旁白。音频来自 macOS 自带语音合成,文字稿完整保留在练习包里,所以能对照已知文本检查错字;它不是会议实录,也不代表真人录音的识别效果。全程使用已经存在的本地模型目录,不下载权重。

先准备可用的音频和本地模型

只处理你有权使用的录音。客户、员工或未公开会议的声音可能含有个人信息;把文件放进云端识别网站前,先确认公司和当事人的要求。本地运行也要确认音频与模型都来自你信任的来源。

FunASR 的 Python 包和模型权重是分开的。安装工具包不等于已经有模型;模型卡也各自有许可说明。本文练习包只含脚本和合成样本,不含任何模型权重。运行前,确认 ASR、VAD、标点和说话人模型都已经在 MODELSCOPE_CACHE/models/ 下完整缓存。缺少任一模型时,练习脚本会停止;不要把本地路径改回模型名称,避免程序尝试联网解析并下载。

从视频提取识别用 WAV

FunASR 练习脚本要求 16 kHz、单声道 WAV。用 FFmpeg 从视频里抽出音轨并统一采样率:

ffmpeg -i input.mp4 -map 0:a:0 -vn -ac 1 -ar 16000 -c:a pcm_s16le narration.wav

先检查抽出的文件确实有声音、采样率和声道正确:

ffprobe -v error -show_entries stream=codec_name,sample_rate,channels -show_entries format=duration narration.wav

如果输入文件没有音轨,或有多个音轨,先选对音轨再运行识别。不要把静音片段当成模型识别失败。

用本地 FunASR 生成机器字幕

在已经安装 FunASR 的 Python 环境里运行练习包中的脚本:

python scripts/transcribe_local.py narration.wav output

脚本会检查 WAV 格式和四个模型目录,然后使用本地路径初始化 FunASR。成功后,output/ 中有 captions-auto.srt、asr-raw.json 和 run.json。后两份用于追查模型原始文字和运行时间;要分享成片时,先检查 JSON 和字幕里有没有不该公开的录音内容。

如果脚本提示缺模型,就先停下来核对缓存目录、磁盘空间、模型卡和权重许可。此练习不替你下载模型,也不包含断网时自动安装 Python 依赖的步骤。通过模型名称、在线 API 或第三方转写网站运行,网络和数据处理路径会不同。

逐句校对,不要只看总文本

打开 captions-auto.srt,一条一条对照原录音或经确认的稿件。先查容易改变意思的内容,再调整断句和标点:

  • 人名、品牌名、地名和专业词,按已确认的资料改,不要根据上下文猜。
  • 数字、日期、金额、单位和否定词,回到音频或原稿复核。
  • 一条字幕尽量表达一个完整意思;模型把一句切得很碎时,可合并相邻时间段,但不能把字幕拖到下一句话。
  • 检查首尾时间码、长停顿、多人交谈和静音处;时间重叠、提前出现或延后消失都要处理。

本次 39 秒合成旁白的机器稿有 16 条字幕。对照原始台词后,把“林兰”改成“林岚”、“他”改成“她”,把 waf 纠正为 WAV,并修复“对照原因”“出现的”等识别和断句问题;又把末尾过碎的片段合并,校订稿为 13 条。原稿里提到的“十五号写成十号、漏了不字”是故事举的另一个错误例子,FunASR 本次实际识别了这些词,不能算成这次模型的错字。

完成校对后保存为 UTF-8 的 SRT 文件。练习包同时保留机器稿和校订稿,你可以并排比较;时间码来自 FunASR 的句子区间,校订时对相邻条目做了合并,没有人耳逐字听写复核。

导入剪辑软件并检查成片

在剪辑软件里导入视频和校订后的 SRT,播放开头、中间、结尾以及每处剪切点。重点检查字幕是否和说话同步、两行文字有没有被画面边缘或按钮遮挡、换行是否自然。不同软件的菜单名字可能不同;先确认它接受 SRT,再按软件自身预览核对。

本次只验证了本地识别、SRT 校订和时间码结构,没有在剪映或其他剪辑软件里实际导入字幕,也没有对合成语音做人耳试听。因此文章不声称完成了真实视频的字幕同步验收。

本次运行记录

  • 环境:M1 Max 64GB、macOS 27.0.1、Python 3.11、FunASR 1.4.16、FFmpeg 9.0.2;CPU 推理。
  • 输入:macOS say 根据练习包中的稿件生成的 39.352 秒合成旁白;转成 16 kHz 单声道 WAV。
  • FunASR 模型加载约 15.026 秒,识别约 5.099 秒,输出 16 条机器字幕。
  • 识别进程在 macOS 本机沙箱中禁止网络访问,并传入已有缓存的本地模型目录;没有下载模型权重。

练习包:下载本地字幕识别与 SRT 校订练习包。包内含合成音频、原稿、机器字幕、校订字幕、运行脚本与复核记录,不含模型文件。

封面背景由本机 ComfyUI 0.38.0 / Z-Image-Turbo 使用已有权重生成,没有下载模型;标题和“AI生成封面”标识由 Pillow 排版。