如何手抄内嵌字幕

我最近在手抄 DitF 的爱奇艺内嵌字幕,原因有二,一是,bilibili 采用的羚邦翻译惨不忍睹;二是,爱奇艺的视频压制也是惨不忍睹,但是字幕却是参照台本翻译而成的,相比其他字幕更加准确。于是我手抄爱奇艺字幕,并通过时间轴的调整适配于目前画质最佳的 1080p cc 源以获得更好的观赏体验,外挂字幕也分享在了 S1 的每话专楼中,可惜爱奇艺的 DitF 惨遭举报下线,再上线就不知道要猴年马月了,只希望再上线可以暗牧不要删减,否则就太可惜了。在本文中我就介绍一下如何快速的手抄字幕。

准备篇

本篇主要参照 esrXP:硬字幕转制外挂字幕利器(改二) - VCB-S 论坛 中 kavenliang,darkangel0224 的相关讨论。

需要工具/软件

部件介绍

WMP 组件

esrXP 抓取字幕时需要调用的多媒体组件,如果系统已经禁用该组件,可以前往启用或关闭Windows功能中开启。相关调试都放在 esrXP 的部分中。

K-Lite Codec Pack Mega

我推荐把其中的东西全部安装,例如其中的 MPC-HC 是非常优秀的开源视频播放器,madvr、ffdshow 也是有用的东西,但在本篇中需要的组件为 Code Tweak Tool 和 LAV Filters。

esrXP

esrXP 视频组件是调用的 32 位的 WMP,能够原生识别的视频格式仅有 AVI、mpg 寥寥几种,所以我们要通过调用 LAV Filters 的分离和解码以实现对 mp4,mkv,x264,x265 等的支持。

在安装了 K-Lite Codec Pack Mega 这个解码包后,我们要通过 Code Tweak Tool 来使 WMP 调用 LAV Filters

Preferred decoders中的32-bit decoders中将H.264H.265设为LAV Video即可,如需必要还可将MS Codec Tweaks中的 所有 32-bits 的解码器全部禁用掉,如此之后在使用 WMP 播放 H.264/H.265 的 mp4/mkv 文件时便可调用 LAV Filters,即在任务栏中出现的标志。

如此便完成了所有的准备工作,在你打开 esrXP 导入影片后即可在过滤器中预览到影片,具体的设置见下一篇。

提取篇

本篇主要摘自 esrXP:硬字幕转制外挂字幕利器(改二) - VCB-S 论坛 中 kavenliang,darkangel0224 的相关讨论。

参数调整

  • 区域——在画面上左键确定选取左上坐标点,右键确定选取右下坐标点。换句话说通过一次左键和一次右键就能选定选区。对选取长按左键不放就是整个拖动选区。字幕截取范围上下刚好贴住字幕就好,左右没多大要求;[√]「完整宽度」这个一般不勾选,因为有的视频在左下角右下角会出现插入曲的歌词什么的,勾选的话可能会跑出相当一部分重复图像,后面可能需要花时间修正文本,不影响最终效果,你可以判断下当前的截取范围够不够宽,能截取到最长的对白。

左侧Region控制区里,点击四个数字框中间的长方形,会在选区中出现一条红色中线。这是对双行显示字幕的中分线。

  • 过滤器设置——这其实就是个复合滤镜调整。这个对话框打开后,是无法对主区进行选择的。所以一般调整前会勾选上启动过滤器额外颜色查看实时调整结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
需要知道的背景知识:
Hue,Lum和Sat属HSL,RGB属RGB。
HSL:https://en.wikipedia.org/wiki/HSL_and_HSV
RGB:https://en.wikipedia.org/wiki/RGB_color_model
Lum:luminance 亮度 / 光度
Sat:saturation 饱和度 / 色泽
Outline / 边线和 Pass1 / 第一阶段是同组滤镜,如果选 Color / 颜色模式,这俩个是不起作用的。
各项取值范围
Pixel Compensate / 像点补偿 [0 – 6]
Hue Difference / 色度差距 [0 – 181]
RGB Difference / RGB 差距 [0 – 255]
Lum, Sat [0 – 100] (最小值必定小于最大值)

数值调整要应视频而异,给出两个例子

  • 后处理——[√]移除只有一像素的点;[√]移除只有一像素的线;[√]移除区块大过「?×?」像素(在字体本身不被移除的前提下尽可能小,也可以不开);[√]移除接触边缘的区块(一般都可以选,字幕组一般都会预留相当的左右边距);[ ]移除通过中央的区块(不能选,因为大部分字幕都是居中的,选了就没有了)

开始

设定完参数后就可以关闭过滤器,回到主界面,点击开始进行内嵌字幕的提取。

提取结束

提取完成后需要对字幕进行一下稍微的处理就可以进入 OCR 篇了,如清理错误、无关的图像,善用鼠标左键、右键来选取。

整理后文件另存为可以导出为SSA格式(纯时间轴)、idx+sub(可以利用另一个软件实现含轴的字幕 OCR),也可以将字幕保存为 bmp 图片格式来实现 OCR。

拓展篇

知名老牌字幕软件 popsub 也同样是调用 WMP 组件的,完成准备篇后,popsub 也可以打开 mp4,mkv 等文件了。

OCR 篇

字幕的 OCR 处理有两种方式,一种是使用导出的SSA(时间轴)和对 bmp 的 OCR 识别字幕整合来实现的,而另一种则是使用对 idx+sub 的 OCR 识别导出为 SRT 来实现的。经过我的对比,第二种方式相对来说要更加简单,也是本篇要介绍的内容。

使用软件

参考文章

  • 用MODI OCR 21种语言
  • MODI中的OCR模块
  • 安装和 Microsoft Office 2010 一同使用的 MODI

以上文章皆来自于老马,如果在博客中找不到,那么会在上述软件的附属文档之中。

MODI 篇

由于我使用的是 x64 Windows 10 和 OFFICE 2016,所以以下内容建立在此前提下,即适用于使用 OFFICE 2010 及其以后的版本的用户。使用 OFFICE 2003 和 OFFICE 2007 的用户可参照《用MODI OCR 21种语言》一文,不想安装 OFFICE 却仍想使用第三方软件调用 MODI 的用户可以参照《MODI中的OCR模块》一文或者参照以下内容。

安装

从 OFFICE 2010 开始,OCR 功能就转移到了 Onenote 之中,所以需要安装 OFFICE 2007 版 MODI 组件,即 MODI 12.0 版本,微软给出了官方文档,我选用的是第二种方法,即通过安装 SharePoint Designer 2007 安装 MODI,官方文档已经写的很简略了,所以按照官方文档中的操作流程即可。

多语言支持

由于下载时选用的语言是简体中文所以此时能 OCR 的语言只有简体中文和英文,所以需要安装其他语言包,这时有三种方法可以实现,我选择了最简略的第三种方法,我简要地摘录和整理了一下其中添加繁体中文和日文包的方法,其他的方法和语言包安装还是可以参照《用MODI OCR 21种语言》一文。

繁体中文

将 12.0 文件夹中的以下文件复制到 MODI 的安装文件夹,Win 10 的为 C:\Program Files\Common Files\Microsoft Shared\MODI\12.0,x64 的将 Program Files 替换为 Program Files (x86)

1
2
3
4
5
6
7
8
TCCODE.UNI
TCPRINT.DAT
TCPRINT2.DAT
TCSERHT.DAT
TCTREE.DAT
TW_BU.DAT
TW_UB.DAT
TWBIG532.DLL

复制完成后,用记事本创建一个 reg 文件,把下面内容粘贴后存盘:

1
2
3
4
5
6
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Installer\Components\61BA386016BD0C340BBEAC273D84FD5F]
"1028"=hex(7):76,00,55,00,70,00,41,00,56,00,4f,00,65,00,64,00,40,00,24,00,21,\
00,21,00,21,00,21,00,21,00,4d,00,4b,00,4b,00,53,00,6b,00,4f,00,43,00,52,00,\
5f,00,31,00,30,00,32,00,38,00,3c,00,00,00,00,00

双击导入注册表

日文

复制的文件为

1
2
3
4
5
6
7
8
9
JPCODE.UNI
JPPRINT.DAT
JPPRINT2.DAT
JPSERHT.DAT
JPTREE.DAT
TW_SU.DAT
TW_US.DAT
TWRECJ.DLL
TWSJIS32.DLL

Reg 文件为

1
2
3
4
5
6
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Installer\Components\61BA386016BD0C340BBEAC273D84FD5F]
"1041"=hex(7):76,00,55,00,70,00,41,00,56,00,5d,00,5e,00,2a,00,42,00,24,00,21,\
00,21,00,21,00,21,00,21,00,4d,00,4b,00,4b,00,53,00,6b,00,4f,00,43,00,52,00,\
5f,00,31,00,30,00,34,00,31,00,3c,00,00,00,00,00

其余操作同上

IdxSubOcr 篇

直接操作就行,导出为 srt 文件。一定要使用管理员权限运行,否则导出为空,怀疑是需要写入注册表的原因。