求助:使用FFmpeg从MKV提取HDMV PGS字幕转SRT失败
解决HDMV PGS字幕转SRT的问题
首先得明确一个关键知识点:你要处理的HDMV PGS字幕是位图格式(本质是图片帧),而SRT是纯文本字幕——FFmpeg本身不支持位图到文本的直接转换(这就是你看到Subtitle encoding currently only possible from text to text or bitmap to bitmap报错的核心原因)。MKVToolNix提取的是原始PGS二进制文件,自然也没法直接当SRT文本用。
你的操作失误点
- 试图用FFmpeg直接跨类型转换:FFmpeg只能在同类型字幕间转码(比如文本转文本、位图转位图),位图转文本需要OCR(光学字符识别)工具配合,FFmpeg做不到这一步。
- 错误的命令参数:你加的
pgssub/hdmv_pgs_subtitle是输入编码器的标识,不是输出格式,所以FFmpeg会报错找不到对应输出格式。
正确的转换流程(Mac系统)
整个过程分两步:提取原始PGS字幕文件 → 用OCR工具将位图转成SRT文本
第一步:提取原始PGS字幕文件
用FFmpeg直接复制字幕流即可(不会转码,避免报错):
ffmpeg -i "你的MKV文件路径.mkv" -map 0:4 -c copy "extracted_subs.pgs"
或者用MKVToolNix的mkvextract工具(需要先安装MKVToolNix):
mkvextract tracks "你的MKV文件路径.mkv" 4:extracted_subs.pgs
注:这里的
4对应你字幕流的编号(你的字幕是Stream #0:4),所以track编号为4。
提取完成后,你可以用VLC播放器测试这个PGS文件是否能正常显示(直接拖入VLC即可),确认提取结果正确。
第二步:用OCR工具将PGS转成SRT
Mac上最适合新手的工具是Subtitle Edit(虽然是Windows原生软件,但可以通过Wine/Crossover在Mac上运行,也有第三方移植的Mac版本):
- 打开Subtitle Edit,导入你提取的
extracted_subs.pgs文件 - 软件会自动调用OCR引擎识别字幕内容(确保你安装了英文语言包,因为你的字幕是英文的)
- 仔细检查识别结果,修正OCR可能出现的错误(比如字体模糊、特殊符号识别偏差)
- 点击「文件」→「导出」→选择「SRT字幕格式」保存即可
如果你偏好命令行工具,可以用tesseract OCR配合脚本,但操作复杂度较高,新手还是推荐用Subtitle Edit更直观。
常见问题补充
- 为什么提取的PGS文件是二进制?因为PGS本身就是由图片帧组成的容器,不是文本,所以必须经过OCR才能转成SRT格式。
- OCR识别不准确怎么办?可以在Subtitle Edit里调整OCR参数,或者手动校对关键位置的字幕内容。
内容的提问来源于stack exchange,提问作者breezybrea




