【字幕制作】从IDX/SUB到PGS的小白入门教程
什么是图形字幕
开篇先对一些主要概念进行说明,高手可自行跳转 前期准备 处开始观看
目前主流的字幕有两种类型,文本字幕、图形字幕
- 文本字幕,文件存储的是文本信息,如ASS、SRT,在播放器中字幕是作为矢量图渲染
- 图形字幕,文件存储的是图片信息,如IDX/SUB、PGS,在播放器中字幕作为位图渲染
- IDX/SUB字幕,用两个文件存储字幕信息,后缀分别为.idx与.sub,idx存储属性信息,可用记事本打开包括字幕缩放、延时等,与ASS的功能栏大同小异;sub存储字幕的图片信息。
- PGS字幕,后缀为.sup,存储图片的清晰度上限比IDX/SUB要大,但无法用记事本打开,不可直接编辑。高清字幕通常使用该格式保存
对TS文件的图形字幕高清化处理:
对于从电视录制下来的影音节目(后缀一般为.ts),对于其中图形字幕的处理通常做法是使用Project-X等软件将其中的视频、音频、字幕文件、字幕图片等要素一次性提取出来,然后使用Smart Cutter for DV and DVB等软件剪去广告,输出剪辑后的IDX/SUB字幕,并导出时间轴文件XML,接着对第一次导出的字幕图片使用Photoshop进行高清化处理,最后配上时间轴XML文件即可。
这个过程中输出的bmp图片清晰度是最高的,通常情况下我们使用这一套图来高清化。
但问题在于,如果当时资源发布者不进行高清化,而是直接将剪去广告后的IDX/SUB字幕封装进影片中。我们就得不到最初导出的清晰度最高的bmp图片了。但此时我们仍可按照一定的步骤去得到我们希望的高清化效果。
现在我们有了一个来自网络的,录制于高清翡翠台的MKV影片,发布者进行过视频的压制,其中字幕为IDX/SUB,字幕大小和位置都适合,但清晰度不够。我们想将字幕高清化,然后与该影片一起封装。


需要用到的软件清单
- MKVExtractGUI(抽取MKV轨道)
- MKVmergeGUI(封装MKV文件)
- subresync(调IDX/SUB字幕时间轴)
- BDSup2Sub(图形字幕的输入和输出)
- Adobe Photoshop CC (高清化字幕)
- Java+dotNetFx40_Full(辅助道具)
前期准备
解决延迟语句
我们通过软件MKVExtractGUI——一款可以抽取MKV文件轨道的软件——提取出MKV文件中的IDX/SUB字幕文件,得到了一个后缀为.idx与一个后缀为.sub的文件。
先使用记事本打开.idx文件,发现该字幕存在图片缩放、时间延迟等信息

这表明sub里面的图片是经过长宽缩放后才输出到播放器的

这表明下面所有的时间都得延迟两秒,比如第一个字幕时间显示00:00:00.000,但它实际输出的应该是00:00:02:000
对于延迟问题,我们使用软件Subresync——一款可以调IDX/SUB字幕时间轴的软件——“过滤”一次(后文解释为什么需要这么做),即将idx拉进去,导出新的IDX/SUB,再打开,可以发现已经不存在delay语句了,所有的时间已经推后了两秒。但缩放属性还在。
BDSup2Sub导出XML与PNG
接着我们打开软件BDSup2Sub——一款可以处理图形字幕属性的软件——拉进去刚刚新导出的idx文件,提示
点确定忽略即可,然后进入如下的界面:
- 左上角的Resolution,我们选择我们最终需要得到的字幕的分辨率,因为我们影片本身就是1920x1080,而且现在字幕大小、位置在播放器里输出的效果也是我们希望的,因此改成图示选项。因为字幕输出分辨率调整不恰当的话,字幕会出现过大或者过小、以及偏移等现象。这里先不过多展开。
- 左下角的FPS选项,我们可以通过potplayer等播放器查看视频的帧速率或者使用软件MediaInfo——一款可以查看任意媒体文件信息的软件——这里两项都选择视频的帧速率即可。
- 右上角的Scale,这里输入我们刚刚在文件里面看到的缩放信息,如果不予调整将会是以下效果。
- 右下角的Delay,这里可以输入我们需要整体提前或延后的时间信息。那么为什么我们刚刚还要用Subresync过滤?因为有的字幕它不止开头一处的delay语句,中间可能也会掺杂有,而这里只能整体调一次。


可以看到,调整后的字比较方,和播放器输出的效果一致,不调整缩放输出的字体会很窄。
BDSup2Sub软件上面的框为输入显示即sub存储的图,下面的框为输出显示。
接着我们点击功能栏
这里选择输出的格式,其中最后一个XML/PNG就是输出我们需要的时间轴和字幕图片,选择它,然后点击
点击Save
我们可以看到在当前文件夹下输出了XML文件(后缀为.xml)以及很多PNG图片(这里我建议在单独的一个文件夹中操作,也便于后面Photoshop的批处理)
XML文件为图形字幕的时间轴,保存有几分几秒使用的图片名称,因此该文件所在文件夹下必须有对应的的字幕图片配合使用
我们可以看到,输出后的图片如下:
这就是原本sub里面存储的图片,前期准备完成。
高清化
Photoshop高清化图片
这是最核心的一步,直接决定了最终字幕的质量,打开软件Photoshop,使用录制动作功能将以下步骤录制下来(这一步不熟悉的读者请自行了解Photoshop的批处理功能,本文最后会提供本文使用的.atn文件),步骤主要分为以下几步:
-
画布拉宽一点,因为看到这个输出的图片边缘与字体的边缘贴得太近了,担心后面描边时描不下去,效果不好。当然这一步不是必须。
-
色彩范围,选择字体最中间的部分
-
选择、调整边缘,平滑选择2像素,确定
-
反选选取,删除,剩下除黑边外的部分
-
设置图层样式
-
得到最终效果如下:
对比一下原始图片:
重描边是为了加粗边框,令字体显得更浑厚饱满,内发光则是将原本灰沉的字提亮。其实这一步很看具体情况,不同的原始字体操作方法也有所变化。比如在本例中可以看到,因为原始字体锯齿比较多,尽管平滑了边缘,但锯齿还是存在。
更多关于Photoshop的操作详情读者请自行搜索。 -
导出图片,如下图设置:
选择PNG-24格式导出
存储,选择路径,保存 -
关闭文件,停止动作录制(这一步非常重要,如果不关闭文件,后面批处理将不能自动进行)
-
最后,文件 > 自动 > 批处理,将文件夹中所有的字幕图片高清化。
生成高清化后的PGS字幕
我们现在有原字幕的时间轴XML文件,有高清化后的图片,接下来的工作就是将它们绑定在一起。将XML与新图片放在同一个文件夹内,保证两者命名前缀一致,即:
红圈部分的前缀需要一致,如不一致则可使用软件Ant Renamer来批量重命名,不过既然Photoshop的批处理设置里面已经有输出文件名设置,个人建议输出前就设置好命名。
把XML拖入BDSup2Sub中,如果命名正确便不会出现错误,导入设置与前文提及的一样,分辨率、帧速率匹配视频的相应属性,但缩放则不需要了,因为我们需要的字幕就是我们做出的新图的效果
可以预览到输出效果,输入框展示了新图的效果,输出框展示了生成字幕的效果:
选择SUP格式,与前文的步骤一样,Save,输出PGS字幕
此时将字幕拖入视频,可以看到高清化后的效果:

将字幕与原先的视频、音频封装在一起。至此,整个流程结束。
注意事项
若最后输出IDX/SUB
在BDSup2Sub中对输入输出框鼠标左键可以放大,右键可以缩小,能看到更多图片的细节。若最后不选择SUP而是选择IDX/SUB输出,可以看到,锯齿变多,因为IDX/SUB格式存储图片的清晰度上限很低。
参考资料
[字幕制作] SUP字幕高清制作方法
HD VobSub 高清外掛字幕
Photoshop动作文件(.atn文件)下载地址
链接:https://pan.baidu.com/s/1kqusiNgz5ep8i94iRYBUow
提取码:1234