Files
Colinx-Blog/content/posts/关于双语字幕这件小事.md
2023-09-10 21:06:40 +08:00

8.7 KiB

title, date, description, categories, tags
title date description categories tags
关于双语字幕这件小事 2023-09-10 今天这篇文章来探讨下双语字幕这件小事. 首先对于一部外语影片或剧集, 原生的英文字幕肯定是能够轻松获得的, 但是匹配、高质量的翻译字幕缺并不总是能找到. 这里分享一些我在寻找和手动 DIY 双语字幕的一些经验和想法, 我自己也编写了一些工具, 有同样需求的朋友也可以快速上手:D
杂记
技术
技术
Linux

今天这篇文章来探讨下双语字幕这件小事.

首先对于一部外语影片或剧集, 原生的英文字幕肯定是能够轻松获得的, 但是匹配、高质量的翻译字幕缺并不总是能找到. 这里分享一些我在寻找和手动 DIY 双语字幕的一些经验和想法, 我自己也编写了一些工具, 有同样需求的朋友也可以快速上手:D

1. 考虑寻找现成的高质量字幕

很多大火的剧集都会有字幕组第一时间跟进字幕制作和资源的发布, 我们可以在各种 BT, PT 站点找到这些字幕组打包好的自带字幕的资源, 或者也可以在第三方的字幕站点上寻找合适的字幕.

这里安利一个油猴脚本:豆瓣资源下载大师,可以在豆瓣的影视详情页右侧显示有资源的站点,非常方便

Pasted image 20230910152405 效果如下图所示

image-20220509144533549

中文字幕推荐 字幕库, 大部分字幕都可以在这里找到. 其他语言可以到 OpentSubtitles 碰碰运气, 虽然界面有点古朴, 但是人家资源还是很丰富滴

2. 字幕的时间轴修正

对于下载的字幕, 我们常遇到的问题就是时间轴不匹配, 相信每个影视爱好者都或多或少碰到过这样的问题. 产生不匹配有多种原因, 典型的比如:

  • 视频帧率不匹配
  • 视频有删减(片头或者片中都有可能, 常见于电视剧集, 有些中间有广告转场有些没有)
  • 视频版本不一样(各种删减版, 完整版, 导演剪辑版等等)

最后一种差异的地方太多, 建议重新找字幕. 对于前面两种情况, 文本的部分没有太多差异, 只需要调整字幕的时间轴就可以了.

这里需要一些对齐时间轴的工具, 这个市面上已经有很多了, 大部分都是基于将对白音频持续时间和字幕对白持续时间做匹配, 然后进行字幕整体时间轴的缩放或平移来实现对齐的.

比如 Sushi, 以及ffsubsync

还有一类是最近比较火的, 利用 AI 来对语音进行识别, 输出对应的字幕. 一半都是通过 Whisper 这个开源的语音识别模型来实现的, 比如autosubsync.

这类语音识别的 AI 目前已经很成熟了, 市面上有很多商业应用, 比如办公软件 飞书, 腾讯会议一般都会支持会议语音转文字. 但是这种都是为会议场景准备的. 其实国内网易有道在这块做的更早, 对英文支持更好, 网易见外可以直接对音频进行识别, 并生成 srt 文件, 甚至还可以直接加上翻译, 效率直接拉满. 免费额度基本够用, 各位轻度使用的朋友不要错过.

当然, 这类 AI 语音识别和翻译现阶段还是差了点意思, 在各种影视作品中, 各类人名, 专有名词, 还有各种各样的梗(比如 The Simpsons ), AI 处理起来还是有点够呛, 所以最好还是优先选择人工调教后的字幕比较好.

上面罗列的那些对齐工具只能处理字幕和影片都是原生语言的情况, 比如处理英文电影的英文字幕, 但是对于要对时间轴不匹配的中英文双语字幕就基本没辙了. 找遍了全网都没找到合适的工具, 所以我就自己写了一个 srt-fuzzy-sync

fuzzy-sync 是一个简单的同步 srt 字幕的工具, 通过指定一个与音轨匹配的参考字幕文件, 来将另一个未同步的字幕进行匹配, 时间轴修正, 使得其可以与音轨正确对齐.

简单点来说呢, 这是一个专门用来对双语字幕时间轴进行修正的工具. 你手头有一个英文电影资源, 一个正确对齐的英文字幕, 一个没对齐的双语字幕, 这个时候你就可以用 srt-fuzzy-sync 这个工具, 将英文字幕设定为参考, 然后对双语字幕的时间轴进行修正, 就可以得到一个时间轴正确的双语字幕啦!

为什么叫 fuzzy-sync 呢, 这主要是为了通用性, 只对两个字幕之间高度相同的一些关键对白进行匹配, 其他的对白则只是基于匹配结果进行整体偏移, 这样做的好处是即便你找的这两个字幕的对白数量不一样, 仍然可以完成同步.

一般英文的 SDH 无障碍字幕里都会有很多非对白场景下的文字提示, 比如

(Theme Music Playing)

(sigh)

(Bird Singing)

而影片对应中文字幕里一般都不会加上这些翻译. 此外中文字幕还常常对影片中出现的标题、店铺招牌、标语、新闻标题做翻译说明, 种种因素导致中英文字幕在句子的数量上不是严格对等的.

此外这些字幕出现的时间, 通常是没有对应的对白音频的. 上面基于音频匹配的都无法很好地处理这类情况, 所以我才抛弃按句匹配的方法, 改为按一些句子很长, 具有标志性, 在影片中通常只会出现一次的关键语句匹配.

至于找不到的现成双语字幕的, 那就需要我们自己动手制作啦.

3. 自制双语字幕

有时只能找到现成的中文字幕和原版英文字幕, 但是没有双语的版本, 这个时候就需要我们手动合并了.

这里推荐一个工具网站 Subtitle Tools, 里面有各种简单的字幕工具, 比如字幕合并, 字幕格式转换.

对于手上又对齐的英文字幕和对齐的英文字幕, 但是数量很多不想一个个到网站上去合并的, 可以考虑 srt-merge 这个工具. 不过原作者很久没更新了, 我这里也编写了一个工具, 也可以实现一样的功能. dual-lang-sub-tool

此外还有一种常见的情况, 就是我们下载的 WebRip 版本资源, 影片已经内置了多国语言分别的字幕, 这些资源大部分是来源于 Netfilx, Disney Plus , iTunes 这些, 我们可以直接提取影片资源内置的两种语言的字幕然后将它们合并.

内置字幕的提取可以使用 ffmpeg 工具, 首先用 ffmpeg -i 文件路径 来查看基本信息, 确定好字幕所在的 track, 比如 Stream #0:3(chi) Subtitle, 这种就是说明 3 号 stream 是中文字幕.

# example output # ......
Stream #0:1(jpn): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
Metadata: title : 日语

Stream #0:2(chi): Audio: aac (LC), 48000 Hz, stereo, fltp
Metadata: title : 国语

Stream #0:3(chi): Subtitle: ass (default)
Metadata: title : gb

Stream #0:4(chi): Subtitle: ass
Metadata: title : big5

可以用下面的命令将其提取出来并转换成 srt 格式

ffmpeg -i xxx.mkv -map 0:3 -c:s srt output.srt

提取完成后就可以直接合并得到成品的双语字幕了, 但是你应该也会觉得这样提取太麻烦, 尤其是一部剧几十集的情况. 一般同一个资源, 里面各个音轨和字幕的排布是一样的, 比如上面只取了一集进行查看, 其他集数都是一样的, 中文字幕都是在 stream 0:3, shell 循环一下就可以了.

当然你可能觉得这还是太麻烦了, 我也是这么想的, 所以 dual-lang-srt-tool 工具也支持自动检测, 导出, 合并双语字幕啦:D DIY 双语字幕可以很简单

后记

对于一些专有名词太多, AI 翻译质量欠佳, 又没有现成中文字幕可供参考的, 那目前就没有很好的办法了. 通常我遇到这种情况是用 AI 的版本将就下, 或者直接全英文一把梭. 不过随着 AI 技术的发展, 后面或许可以考虑将过往季的字幕喂给 AI 让 ta 自己学习人名地名翻译, 再辅以各种新闻八卦材料让 AI 也能对各种潮流热梗烂熟于心, 到那个时候制作双语字幕就是分分种的事情了, 可以预见的是这样的 AI 应该有生之年就可以用上, 至于是好事还是坏事, 那就交给未来去评判吧.