跳到主要内容
SubtitleMatrix

视频提取字幕

媒体输入视频里的字幕

首次运行会下载字幕引擎 —— 约 31 MB,由本站提供,之后浏览器会缓存。视频本身从不离开这个标签页。

这一页把视频里已经存在的字幕轨原样取出来,一条轨一个文件,按语言命名。一个同时带英文 SDH 轨、中文轨和 PGS 图像轨的 MKV,会得到三份产物:.srt、.srt 和 .sup。流程是解封装(demux),不是重新编码,所以文本轨复制出来的是文件里原本那串字节,不是从画面上重新打字,也不是重新计时。支持的容器包括 MKV、MP4、M4V、AVI、MOV、TS、WebM、WMV、FLV、MPG 和 OGV。

整个过程在标签页里完成。视频由本站自托管的 ffmpeg WebAssembly 版本读取,唯一的网络请求是下载这个引擎:首次使用约 31 MB,之后由浏览器缓存。视频本身不会发往任何地方,这也是这一页能处理“不允许离开本机”的素材的原因。

烧录在画面里的字幕无法提取,任何工具都做不到,因为那里根本没有轨可读——那些字是像素。如果文件里完全没有字幕流,页面会直接说明,而不是产出一个空文件;烧录的情况也算在内:一份看得见字幕、却没有字幕轨的视频,会被报告为没有可提取的内容。

写文件之前,页面先列出找到的每一条字幕流:序号、编码、语言、标题,以及是否标为默认或强制。已经住在独立容器里的轨保持原格式——ASS 仍是 ASS,WebVTT 仍是 WebVTT——因为在这里转成 SRT 会静默丢掉样式,而没被要求就丢样式正是本站不做的事。编码本身没有独立容器的轨(例如 MP4 里的 mov_text)会重新编码成 SRT,结果卡片会注明这一点,而不是让它冒充原样复制。

位图轨出来的是图像,不是文字:PGS 流写成 .sup,DVD 流写成 .sub。这是刻意的——图像才是文件里原本的东西,猜它的文字是另一页的工作,有它自己的语言选择和校对步骤。需要文字时,把 .sup 交给 PGS 转 SRT 那一页。

常见问题

MKV 视频里的内嵌字幕轨能直接导出为 SRT 吗?

能,但要分清是哪一种编码。subrip 或 srt 编码的文本轨会原样复制成 .srt,字节与容器里原本的那一段一致;ASS 或 WebVTT 轨则保持自己的扩展名(.ass、.vtt),因为在这里转成 SRT 会静默丢掉样式。只有没有独立容器格式的轨(例如 MP4 里的 mov_text)才会被重新编码成 .srt。

视频提取字幕为什么给出 .sup 而不是 .srt?

因为那条轨是位图,不是文字。PGS(hdmv_pgs_subtitle)是一条图像序列,如实抽取一条图像流,产物也只能是图像流——.sup 正是播放器和字幕编辑器期待的形式。要把它变成文字,需要识别每张图里的字母,那是 PGS 转 SRT 那一页的工作,有独立的语言选项和校对步骤。

MP4 里的 mov_text 字幕轨为什么会被重新编码?

因为 mov_text 没有自己的独立文件格式,直接复制出来会得到一份谁也打不开的字节。页面会把这一条轨转码成 SRT,并在结果卡片上标注“已重新编码”;转码不是无损的,mov_text 可能携带的样式与定位不会保留,所以它会进入有损列表,而不是冒充原样复制。

同一语言的普通轨和 SDH 轨会互相覆盖吗?

不会。产物按视频名加语言码命名,例如 documentary.mkv 的英语轨写成 documentary.eng.srt;第二条英语轨会得到 documentary.eng-2.srt,而不是覆盖第一条。没有语言标签的轨回退到轨道序号,仍然可以区分。多于一个文件时,页面把全部产物打成一个 ZIP,因为浏览器不允许一次手势触发多个下载。

烧录在画面里的字幕,视频提取字幕能读出来吗?

不能,任何工具都不能,因为画面上没有字幕轨,只有像素。如果文件里完全没有字幕流,页面会直接报告没有找到字幕轨道,烧录的情况也算在内。要处理烧录字幕,得先走 OCR 流程,而不是从容器里抽取。

为什么第一次提取要下载约 31 MB?

因为跑的是本站自托管的 ffmpeg WebAssembly 引擎,首次使用需要下载约 31 MB,之后由浏览器缓存。引擎按托管平台 25 MiB 的单文件上限切成四片,页面在启动前在内存里拼回完整文件,这段拼接也包含在首次等待里。视频本身从不参与这次下载。

提取中途取消,会留下半个字幕文件吗?

不会。取消按钮会结束正在进行的抽取,并终止执行它的 worker,大文件不会在你决定不等之后继续占用一个核心。条目回到可重试的状态,下一次运行会启动新的 worker;没有写完的产物不会作为下载提供,因为一份看起来完整、实际只写了一半的字幕比没有文件更糟。

相关工具