太长不看:先检查 MP4 里到底有没有字幕轨道——大多数都没有。 一条免费的 ffprobe 命令几秒就能告诉你。如果有轨道,一条 ffmpeg 命令就能把它转成 SRT 文件。但绝大多数 MP4——社交媒体视频、CapCut 和 Premiere 导出的成片、下载的片段——字幕都是烧录进画面里的,唯一能提取的办法就是 OCR,从帧里把文字读出来。本文覆盖这两条路径,外加视频根本没有字幕的情况。
怎么检查 MP4 有没有字幕轨道?
装好 ffmpeg 后(Mac 上运行 brew install ffmpeg),执行:
ffprobe -v error -select_streams s \
-show_entries stream=index,codec_name:stream_tags=language \
-of default=noprint_wrappers=1 input.mp4
两种可能的结果:
| 输出 | 它意味着什么 | 如何提取 |
|---|---|---|
codec_name=mov_text | MP4 带有内嵌文本字幕轨道(在播放器里可开关) | 一条 ffmpeg 命令 |
| 完全没有任何输出 | 没有字幕轨道——你看到的字幕都是烧录进画面里的 | OCR |
如果 ffprobe 什么都没打印,但视频播放时你能看到字幕,那字幕就是视频画面的一部分——任何提取器或转换器都无法把它们抽出来,OCR 是唯一有效的方法。
怎么把 MP4 的字幕轨道提取为 SRT?
MP4 用 mov_text 格式存储文本字幕。ffmpeg 用一条命令就能把它转成标准 SRT 文件:
# 把第一条字幕轨道导出为 SRT
ffmpeg -i input.mp4 -map 0:s:0 subtitles.srt
# 如果有多条轨道,0:s:1 是第二条,以此类推
ffmpeg -i input.mp4 -map 0:s:1 subtitles.srt
输出是一个纯 SRT 文件,能在任何字幕编辑器里打开,也能上传到任何平台。这就是全部的顺利路径——如果成功了,你就完事了。如果 ffmpeg 报告 Stream map '0:s:0' matches no streams,说明这个 MP4 没有字幕轨道,而这才是常见得多的情况。
为什么大多数 MP4 视频没有字幕轨道?
MP4 对字幕的支持一直是个附带功能。社交平台要么在上传时剥掉字幕轨道,要么在播放时忽略它们,很多播放器对 MP4 文件从来不显示字幕菜单——所以创作者不再依赖它们。
正因为各平台和播放器对 MP4 字幕轨道的处理如此不一致,大多数创作者干脆把字幕直接烧录进画面——这就是为什么一个典型 MP4 里的字幕用 ffmpeg 或任何转换器都提取不出来。 你在 CapCut 导出成片、下载的 Reels 或重新上传的片段里看到的每一条字幕,几乎都是像素,而不是轨道。两种字幕类型的完整解析见这里:内嵌字幕与烧录字幕的区别。
怎么从 MP4 提取烧录字幕?
用 OCR——一种从视频帧中读出字幕文字、并把它重建为带时间轴字幕文件的软件:
- 在你的 Mac 上把 MP4 导入 GeekLink。
- 运行 OCR 提取。它会检测字幕区域,读取每一帧的文字,并把重复帧合并成干净、时间轴准确的字幕行。
- 导出为 SRT——或者先翻译,再导出双语文件。
OCR 在你的 Mac 本地运行——视频永远不会上传——而且一整个文件夹的视频可以一批处理完。分步操作步骤见这里:如何用 OCR 提取烧录字幕(硬字幕);如果视频上还有你想排除的水印或频道台标,参见 提取字幕时排除水印。
如果 MP4 根本没有字幕怎么办?
如果既没有轨道、也没有烧录进去的字幕,那就没有东西可提取了——这时你改为生成字幕。把视频导入 GeekLink,在你的 Mac 本地运行 Whisper 语音识别:你会得到带时间轴的字幕,可以编辑、翻译并导出为 SRT。参见 Whisper 视频转录完整指南。
怎么翻译你提取出来的字幕?
从 MP4 提取出来的 SRT 文件可以直接导入 GeekLink,用 AI 翻译成 40 多种语言,并保留原有时间轴。 把它导出为翻译后的 SRT、双语 SRT,或者对那些忽略字幕轨道的平台,把译文重新烧录回视频里。完整流程:如何翻译烧录字幕。
常见问题
怎么从 MP4 文件提取字幕?
先检查有没有字幕轨道:ffprobe -v error -select_streams s -show_entries stream=codec_name input.mp4。如果打印出 mov_text,运行 ffmpeg -i input.mp4 -map 0:s:0 subtitles.srt,你就得到 SRT 了。如果什么都没打印,说明字幕是烧录进画面里的,需要 OCR。
我提取字幕时 ffmpeg 为什么说「matches no streams」?
因为这个 MP4 没有字幕轨道。你在播放时看到的字幕是烧录进视频画面里的——它们是像素,不是数据——所以没有可供 ffmpeg 映射的流。像 GeekLink 这样的 OCR 软件会改从帧里把它们读出来。
在线工具能从我的 MP4 提取字幕吗?
只有当 MP4 带内嵌轨道时才行,而大多数都没有——而且把一个大视频上传到网站很慢。对于烧录字幕,在你 Mac 本地运行的 OCR 更快,还能保证视频不外泄。
我能从 CapCut 或 Premiere 导出的成片里提取字幕吗?
编辑器导出的成片几乎总是烧录字幕:字幕在导出时被渲染进画面,所以文件里没有轨道。OCR 是正解——GeekLink 会检测字幕区域,逐帧读取文字,并导出带时间轴的 SRT。
从 MP4 提取字幕和从 MKV 提取有什么区别?
MKV 通常带有内嵌字幕轨道(SRT、ASS 或蓝光 PGS),所以用 ffmpeg 或 mkvextract 提取通常能成功。MP4 则很少带轨道,所以提取通常意味着对烧录字幕做 OCR。参见配套指南:如何从 MKV 文件提取字幕。