如何从 MKV 文件提取字幕

作者 Flora Wang,视频本地化专家 · 发布于 2026 年 7 月 17 日 · 阅读约 8 分钟

太长不看:MKV 文件里的字幕分为两种本质不同的形式,用哪种提取方法取决于你手上是哪一种。 如果 MKV 里含有文本字幕轨道(SRT 或 ASS),一条免费命令——ffmpeg 或 MKVToolNix 的 mkvextract——几秒钟就能把字幕文件存出来。但有两种常见情况里根本没有文本:图像字幕轨道(PGS 和 VobSub,是蓝光和 DVD 抓取的标准格式),以及直接烧录进画面里的字幕。这两种都需要 OCR。本文覆盖全部四种情况,附上准确的命令,先从一个 10 秒的检查开始,帮你判断自己属于哪一种。

怎么查看一个 MKV 文件里有哪些字幕轨道?

在提取任何东西之前,先把字幕流列出来。装好 ffmpeg 后(Mac 上运行 brew install ffmpeg),执行:

ffprobe -v error -select_streams s \
  -show_entries stream=index,codec_name:stream_tags=language,title \
  -of default=noprint_wrappers=1 input.mkv

或者,如果你已经在用 MKVToolNix,mkvmerge -i input.mkv 会用更直白的方式打印同样的信息。输出里的 codec_name 就说明了一切:

codec_name它是什么如何得到 SRT
subrip纯文本字幕(SRT)一条 ffmpeg 命令——几秒搞定
ass带样式的文本字幕(动漫里常见)一条 ffmpeg 命令;转成 SRT 会丢掉样式
hdmv_pgs_subtitle蓝光图像字幕(文字的图片)需要 OCR
dvd_subtitleDVD 图像字幕(VobSub)需要 OCR
完全没有任何输出没有字幕轨道——如果能看到字幕,那是烧录进画面里的对视频本身做 OCR

如果 ffprobe 列出的是 subripass,提取免费且只要几秒;如果列出的是 hdmv_pgs_subtitledvd_subtitle,那这条轨道装的是文字的图片,不用 OCR 任何工具都无法把它变成 SRT。 这个区别是关于 MKV 字幕最常见的困惑点,也决定了后面的一切。

怎么用 ffmpeg 从 MKV 提取 SRT 字幕?

对于文本轨道,ffmpeg 是最快的方式,在 Mac、Windows 和 Linux 上用法都一样:

# 把第一条字幕轨道导出为 SRT
ffmpeg -i input.mkv -map 0:s:0 subtitles.srt

# 导出第二条字幕轨道(0:s:1 = 第二条,以此类推)
ffmpeg -i input.mkv -map 0:s:1 subtitles.srt

# 按语言而非位置选择轨道
ffmpeg -i input.mkv -map 0:s:m:language:eng english.srt

# 保持 ASS 轨道的原始格式(保留样式)
ffmpeg -i input.mkv -map 0:s:0 -c copy subtitles.ass

有两点值得了解。第一,把 ASS 轨道转成 SRT 会悄悄丢掉所有样式——字体、颜色、定位、卡拉 OK 效果——因为 SRT 格式无法表达这些;如果你需要样式,就改成导出为 .ass。第二,-map 0:s:0 只对字幕流计数,所以这个编号跟 ffprobe 打印的流索引不是同一个数字。

ffmpeg 在提取时会在字幕格式之间做转换,这就是为什么 ffmpeg -i input.mkv -map 0:s:0 subtitles.srt 对 SRT 和 ASS 轨道都有效——但它无法把图像字幕轨道(PGS/VobSub)转成文本,如果你硬要试,会以编码器报错告终。

怎么用 MKVToolNix(mkvextract)提取字幕?

MKVToolNix(免费,mkvtoolnix.download,或 brew install mkvtoolnix)会以原始格式逐比特精确地提取轨道。先列出轨道 ID,再按 ID 提取:

# 列出轨道及其 ID
mkvmerge -i input.mkv
# 轨道 ID 0: 视频 (HEVC) / 轨道 ID 1: 音频 (AAC) / 轨道 ID 2: 字幕 (SubRip/SRT)

# 把轨道 2 导出为 SRT
mkvextract input.mkv tracks 2:subtitles.srt

# 一次导出多条轨道
mkvextract input.mkv tracks 2:english.srt 3:spanish.srt

有一个几乎绊倒所有搜索这个问题的人的坑:MKVToolNix 图形界面没有提取功能——提取只以命令行工具 mkvextract 的形式提供。图形界面负责的是混流(把轨道装进去)、编辑头信息和拆分文件,所以在里面找「extract」按钮,按设计就是找不到的。

你写的文件扩展名必须与轨道的编解码器匹配:SubRip 用 .srt,ASS/SSA 用 .ass,PGS 用 .sup,而对于 VobSub,mkvextract 会写出一对 .idx + .sub 文件。这就引出了提取出来的文件根本不是文本的那种情况。

如果字幕轨道是 PGS 或 VobSub(图像格式)怎么办?

蓝光抓取几乎总是带 hdmv_pgs_subtitle 轨道,DVD 抓取则带 dvd_subtitle(VobSub)。这些轨道把每一条字幕存成一张渲染好的图片,由播放器叠加在视频上——里面没有任何文本。提取出来会得到一个 .sup.idx/.sub 文件,字幕编辑器和视频平台都无法把它当作文本读取。

把 PGS 或 VobSub 字幕转成 SRT 一定需要 OCR,因为这些「字幕」是文字的位图图像,而不是文本。 在 Mac 上,务实的做法是先用 ffmpeg 把轨道渲染到视频上一次,然后对结果做字幕 OCR:

# 把图像字幕轨道烧录到视频上(一次性重新编码)
ffmpeg -i input.mkv -filter_complex "[0:v][0:s:0]overlay[v]" \
  -map "[v]" -map 0:a? -c:a copy burned.mp4

然后把 burned.mp4 导入 GeekLink 并运行 OCR 提取。它会检测字幕区域,读取每一帧的文字,把重复帧合并成单条字幕,导出干净、时间轴准确的 SRT——全部在你的 Mac 本地完成,不上传任何东西。重新编码只要清晰到 OCR 能读就够了,所以默认设置即可。

如果 MKV 根本没有字幕轨道(烧录字幕)怎么办?

这在下载的动漫、剧集和重新编码的视频里最常见:ffprobe 没列出任何字幕流,可视频播放时你明明看得到字幕。如果 ffprobe 显示没有字幕流,但播放时能看到字幕,那它们就是烧录进画面本身的——任何提取器、解封装器或转换器都无法把它们抽出来,对视频做 OCR 是唯一的办法。

  1. 在你的 Mac 上把 MKV 导入 GeekLink——无需转换,MKV 直接支持。
  2. 运行 OCR 提取。它会从帧中读出字幕文字,并合并成带时间轴的字幕行。
  3. 导出为 SRT——或者先翻译,再导出双语文件。

OCR 在本地运行,一次处理一整批,所以一整季剧集可以一次排队处理完。完整操作步骤见这里:如何用 OCR 提取烧录字幕(硬字幕);如果你在挑工具,参见 2026 年最佳烧录字幕提取工具。不确定你的字幕是内嵌的还是烧录的?两者的区别在 内嵌字幕与烧录字幕的区别 一文中有解释。

怎么翻译你提取出来的字幕?

提取往往只是本地化工作的第一步。从 MKV 提取出来的 SRT 文件可以直接导入 GeekLink,用 AI 翻译成 40 多种语言,并保留原有时间轴——无需重新转录。 把结果导出为翻译后的 SRT、双语 SRT,或把译文烧录进视频。完整流程:如何翻译烧录字幕

常见问题

怎么从 MKV 文件提取字幕?

如果 MKV 有文本字幕轨道,运行 ffmpeg -i input.mkv -map 0:s:0 subtitles.srt——几秒完成而且免费。如果轨道是图像格式(PGS/VobSub),或者字幕是烧录进画面里的,就没有文本可提取;你需要 OCR 软件从帧里把它们读出来。

MKVToolNix 图形界面能提取字幕吗?

不能。MKVToolNix 图形界面把轨道混流进 MKV 文件,但没有提取功能。提取要用 mkvextract,也就是随它一起安装的命令行工具:先用 mkvmerge -i input.mkv 找出轨道 ID,再运行 mkvextract input.mkv tracks 2:subtitles.srt

VLC 能从 MKV 提取字幕吗?

不能。VLC 可以显示和切换内嵌字幕轨道,但没有把轨道导出为字幕文件的功能。文本轨道用 ffmpeg 或 mkvextract,图像字幕和烧录字幕则用 OCR。

为什么我提取出来的是 .sup 或 .idx/.sub 文件,而不是 SRT?

因为这条轨道是图像格式的:.sup 是蓝光 PGS,.idx/.sub 是 DVD VobSub。两者都把字幕存成图片,所以提取出来保留的还是图片。把它们转成 SRT 需要 OCR——任何格式转换器都做不到,因为文件里根本没有可转换的文本。

在 Mac 上怎么把 PGS 字幕转成 SRT?

用一条 ffmpeg 命令把 PGS 轨道渲染到视频上(见上文指南),然后对结果运行 GeekLink 的字幕 OCR。它会从帧中读出字幕文字并导出带时间轴的 SRT,全部在你的 Mac 本地完成。

相关文章

ffmpeg 提取不了的字幕?

GeekLink 用 OCR 读取 PGS、VobSub 和烧录字幕,并导出干净的 SRT——全部在你的 Mac 本地完成。

免费下载