Skip to content
🎞️ 成片第 3 / 6 节

字幕制作与校对:SRT 从生成到烧录 ​

上一课你拿到了配音。这一课约 7 分钟,把 AI 视频字幕从生成、校对到烧录完整走一遍——时间轴不用手打,edge-tts 在合成语音时会同时生成一份 SRT。

学完你能做什么 ​

  • 用 edge-tts 在生成配音的同时拿到时间轴对齐的 SRT 字幕文件
  • 看懂 SRT 的结构,能手改文本和时间轴
  • 按三查清单(错别字、断句时机、行长度)完成字幕校对
  • 用 FFmpeg 一条命令把字幕烧录进画面

你现在的困境 ​

  • 「配音做好了,可一想到要逐句手打字幕时间轴,就不想动了。」
  • 「网上的字幕工具一大堆,装了三个没一个用得顺。」
  • 「好不容易烧上去,一看中文全变方块。」

什么时候用这一招 ​

当你需要:给练习片的配音配上同步字幕,而且配音正是用 edge-tts 生成的。

而且不想:逐句手打时间轴,也不想为此购买付费字幕软件。

🎒 开始前的准备 ​

核心思路 ​

edge-tts 合成语音时,服务端会返回每段文字的时间边界。--write-subtitles 把这些边界直接写成 SRT,所以字幕和语音天然对齐——你只需要校对,不用自己打轴。

环节工具产出
生成edge-tts --write-subtitles与音频对齐的 SRT
校对任意文本编辑器修正后的 SRT(UTF-8)
烧录FFmpeg subtitles 滤镜带硬字幕的 mp4

SRT 是纯文本格式,每个字幕块四部分(本课程通用格式说明):

text
1
00:00:00,000 --> 00:00:02,500
欢迎来到 AI 短剧课堂。

2
00:00:02,500 --> 00:00:05,000
今天我们来做字幕。

时间轴格式固定为 时:分:秒,毫秒 --> 时:分:秒,毫秒,毫秒用逗号分隔,块之间空一行。

跟我做 ​

第 1 步:生成配音时同步导出 AI 视频字幕文件 ​

为什么:单独打轴是字幕制作里最耗时的一步,而 edge-tts 能在产出音频的同时产出对齐字幕,一步省掉。

在上一课的配音命令基础上加 --write-subtitles:

bash
edge-tts --text "欢迎来到 AI 短剧课堂。" --write-media voice.mp3 --write-subtitles voice.srt

你应该看到:命令跑完后,目录下同时出现 voice.mp3 和 voice.srt 两个文件。

  • 小检查:用文本编辑器打开 voice.srt,能看到序号、时间轴、文本三要素

💡 上一课已经生成过配音?

在原命令上补 --write-subtitles voice.srt 再跑一次即可拿到字幕文件。

第 2 步:校对字幕——三查清单 ​

为什么:机器按服务端返回的边界断句,不一定符合中文的阅读节奏;同音字错字也最容易被观众一眼看出来。

用任意文本编辑器打开 voice.srt,逐条过三查:

  1. 错别字:同音字(如「在/再」「以/已」)逐条朗读检查
  2. 断句时机:一行别在词中间断开;字幕太早出现或太晚消失都会让观众出戏
  3. 行长度:一行太长观众读不完,拆成两行或精简文本

改完保存为 UTF-8 编码。如果发现台词本身太长、怎么断都不顺,回看《对白精简:配音前先做减法》。

你应该看到:每条字幕读起来顺口、没有错字,行长度一眼能读完。

  • 小检查:三查各过一遍,文件以 UTF-8 保存

第 3 步:用 FFmpeg 把字幕烧录进画面 ​

为什么:烧录(硬字幕)把字幕渲染进画面本身,任何平台、任何播放器都显示,不依赖观众加载外挂字幕。

bash
ffmpeg -i shot.mp4 -vf "subtitles=voice.srt" -c:a copy subtitled.mp4

你应该看到:FFmpeg 处理完成后输出 subtitled.mp4,播放时画面下方显示字幕,且与语音对齐。

  • 小检查:播放 subtitled.mp4,字幕与配音同步、无乱码

检查点 ✅ ​

  • voice.srt 与 voice.mp3 由同一条命令生成,时间轴对齐
  • SRT 已按三查清单校对,并以 UTF-8 保存
  • 烧录后的视频字幕正常显示、无乱码
  • 字幕时间轴与画面内容对得上

踩坑提醒 ​

❌ 烧录后中文变方块或乱码 ​

原因:SRT 文件编码不是 UTF-8,或系统缺少可用的中文字体。

正确做法:把 SRT 重新保存为 UTF-8 再烧录。若 SRT 来自其他工具、确实是别的编码,用 subtitles 滤镜的 charenc 选项声明编码(该选项仅在非 UTF-8 时有用)。缺中文字体时,把字体文件集中放进一个目录,用 fontsdir 选项指给滤镜,目录里的字体会在系统字体之外额外可用。

❌ 字幕时间轴和画面对不上 ​

原因:SRT 的时间基于配音音频的起点,而剪辑拼接会移动画面起点。

正确做法:烧录放在剪辑定稿之后做,以最终成片的时间轴为准——下一课剪完片子再回来执行第 3 步。

❌ 手改时弄坏时间轴格式 ​

原因:-->、逗号或时间位数被误改,SRT 整块失效。

正确做法:只动文本行;调时间时严格保持 00:00:02,500 --> 00:00:05,000 的格式。

❌ FFmpeg 提示找不到 subtitles 滤镜 ​

原因:所用 FFmpeg 编译时没有启用 libass——subtitles 滤镜需要 --enable-libass 构建。

正确做法:改用编译时启用了 libass 的 FFmpeg 版本,再重跑烧录命令。

进阶技巧(可选) ​

自定义字幕样式:force_style ​

subtitles 滤镜会先把 SRT 转成 ASS 再渲染,默认样式不一定合你的意。force_style 接受 ASS 样式格式的 KEY=VALUE,多个用逗号分隔。FFmpeg 官方手册的示例——让字幕变成 80% 透明的蓝色 DejaVu Serif:

bash
ffmpeg -i shot.mp4 -vf "subtitles=voice.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'" -c:a copy subtitled.mp4

把 Fontname 换成你系统里已安装的中文字体名;其他样式参数同样以 KEY=VALUE 形式用逗号追加。

本课小结 ​

  • ✅ edge-tts --write-subtitles:配音与 AI 视频字幕一次生成,免打轴
  • ✅ SRT 四部分结构:序号、时间轴、文本、空行
  • ✅ 三查清单:错别字、断句时机、行长度
  • ✅ FFmpeg subtitles 滤镜:一条命令烧录硬字幕
字段 / 选项推荐值说明
--write-mediavoice.mp3配音音频
--write-subtitlesvoice.srt同步生成的 SRT 字幕
subtitles 滤镜subtitles=voice.srt把字幕烧录进画面
charenc仅非 UTF-8 时设置声明字幕编码
force_styleASS 样式 KEY=VALUE,逗号分隔覆盖默认字幕样式
fontsdir字体目录路径目录字体在系统字体之外额外可用

下一课预告 ​

字幕就位后,下一课《剪辑与音量检查:FFmpeg 拼出第一部成片》把镜头和配音拼成完整成片。你会学到:

  • 用 trim 裁掉镜头多余的头尾
  • 用 concat 把多段镜头拼成一条
  • 用 loudnorm 统一全片响度

剪完记得回来对成片执行第 3 步烧录,再进入《导出与发布前检查:对照 YouTube 官方规范》。

附录:源码参考 ​

点击展开查看源码位置

更新时间:2026-11-07

事实文件位置
edge-tts 安装、基本用法与 --write-subtitlesdocs/raw-edge-tts-readme.md:9-13, :21
服务端 boundary 元数据与进度条行为docs/raw-edge-tts-readme.md:71
subtitles 滤镜(libass)及选项 filename / charenc / force_style / fontsdirdocs/ffmpeg-filters.md:17299-17343
subtitles=sub.srt 等价于 filename=sub.srt;force_style 官方示例docs/ffmpeg-filters.md:17344-17367

SRT 时间轴格式为本课程通用格式说明;三查校对清单(错别字 / 断句时机 / 行长度)为课程教学模板。

搞懂AI关于我们怎么写隐私说明

独立的第三方教程,与文中提到的任何产品及其公司没有隶属或合作关系;产品名称和商标归各自所有者。价格和政策以官方页面为准。