mirror of
https://github.com/Colin-XKL/Colinx-Blog.git
synced 2026-01-11 02:01:29 +08:00
feat: add post
This commit is contained in:
114
content/posts/关于双语字幕这件小事.md
Normal file
114
content/posts/关于双语字幕这件小事.md
Normal file
@@ -0,0 +1,114 @@
|
||||
---
|
||||
title: 关于双语字幕这件小事
|
||||
date: 2023-09-10
|
||||
description: 今天这篇文章来探讨下双语字幕这件小事. 首先对于一部外语影片或剧集, 原生的英文字幕肯定是能够轻松获得的, 但是匹配、高质量的翻译字幕缺并不总是能找到. 这里分享一些我在寻找和手动 DIY 双语字幕的一些经验和想法, 我自己也编写了一些工具, 有同样需求的朋友也可以快速上手:D
|
||||
categories:
|
||||
- 杂记
|
||||
- 技术
|
||||
tags:
|
||||
- 技术
|
||||
- Linux
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
今天这篇文章来探讨下双语字幕这件小事.
|
||||
|
||||
首先对于一部外语影片或剧集, 原生的英文字幕肯定是能够轻松获得的, 但是匹配、高质量的翻译字幕缺并不总是能找到. 这里分享一些我在寻找和手动 DIY 双语字幕的一些经验和想法, 我自己也编写了一些工具, 有同样需求的朋友也可以快速上手:D
|
||||
|
||||
## 1. 考虑寻找现成的高质量字幕
|
||||
|
||||
很多大火的剧集都会有字幕组第一时间跟进字幕制作和资源的发布, 我们可以在各种 BT, PT 站点找到这些字幕组打包好的自带字幕的资源, 或者也可以在第三方的字幕站点上寻找合适的字幕.
|
||||
|
||||
这里安利一个油猴脚本:[豆瓣资源下载大师](https://greasyfork.org/zh-CN/scripts/329484-%E8%B1%86%E7%93%A3%E8%B5%84%E6%BA%90%E4%B8%8B%E8%BD%BD%E5%A4%A7%E5%B8%88-1%E7%A7%92%E6%90%9E%E5%AE%9A%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1-%E9%9F%B3%E4%B9%90-%E5%9B%BE%E4%B9%A6%E4%B8%8B%E8%BD%BD),可以在豆瓣的影视详情页右侧显示有资源的站点,非常方便
|
||||
|
||||

|
||||
效果如下图所示
|
||||
|
||||

|
||||
|
||||
中文字幕推荐 [字幕库](http://zimuku.org/), 大部分字幕都可以在这里找到. 其他语言可以到 [OpentSubtitles](https://www.opensubtitles.org/zh) 碰碰运气, 虽然界面有点古朴, 但是人家资源还是很丰富滴
|
||||
|
||||
## 2. 字幕的时间轴修正
|
||||
|
||||
对于下载的字幕, 我们常遇到的问题就是时间轴不匹配, 相信每个影视爱好者都或多或少碰到过这样的问题. 产生不匹配有多种原因, 典型的比如:
|
||||
|
||||
- 视频帧率不匹配
|
||||
- 视频有删减(片头或者片中都有可能, 常见于电视剧集, 有些中间有广告转场有些没有)
|
||||
- 视频版本不一样(各种删减版, 完整版, 导演剪辑版等等)
|
||||
|
||||
最后一种差异的地方太多, 建议重新找字幕. 对于前面两种情况, 文本的部分没有太多差异, 只需要调整字幕的时间轴就可以了.
|
||||
|
||||
这里需要一些对齐时间轴的工具, 这个市面上已经有很多了, 大部分都是基于将对白音频持续时间和字幕对白持续时间做匹配, 然后进行字幕整体时间轴的缩放或平移来实现对齐的.
|
||||
|
||||
比如 [Sushi](https://github.com/tp7/Sushi), 以及[ffsubsync](https://github.com/smacke/ffsubsync)
|
||||
|
||||
还有一类是最近比较火的, 利用 AI 来对语音进行识别, 输出对应的字幕. 一半都是通过 Whisper 这个开源的语音识别模型来实现的, 比如[autosubsync](https://github.com/oseiskar/autosubsync).
|
||||
|
||||
这类语音识别的 AI 目前已经很成熟了, 市面上有很多商业应用, 比如办公软件 飞书, 腾讯会议一般都会支持会议语音转文字. 但是这种都是为会议场景准备的. 其实国内网易有道在这块做的更早, 对英文支持更好, [网易见外](https://jianwai.youdao.com/)可以直接对音频进行识别, 并生成 srt 文件, 甚至还可以直接加上翻译, 效率直接拉满. 免费额度基本够用, 各位轻度使用的朋友不要错过.
|
||||
|
||||
当然, 这类 AI 语音识别和翻译现阶段还是差了点意思, 在各种影视作品中, 各类人名, 专有名词, 还有各种各样的梗(比如 The Simpsons ), AI 处理起来还是有点够呛, 所以最好还是优先选择人工调教后的字幕比较好.
|
||||
|
||||
上面罗列的那些对齐工具只能处理字幕和影片都是原生语言的情况, 比如处理英文电影的英文字幕, 但是对于要对时间轴不匹配的中英文双语字幕就基本没辙了. 找遍了全网都没找到合适的工具, 所以我就自己写了一个 [srt-fuzzy-sync](https://github.com/Colin-XKL/srt-fuzzy-sync)
|
||||
|
||||
> fuzzy-sync 是一个简单的同步 srt 字幕的工具, 通过指定一个与音轨匹配的参考字幕文件, 来将另一个未同步的字幕进行匹配, 时间轴修正, 使得其可以与音轨正确对齐.
|
||||
|
||||
简单点来说呢, 这是一个专门用来对双语字幕时间轴进行修正的工具. 你手头有一个英文电影资源, 一个正确对齐的英文字幕, 一个没对齐的双语字幕, 这个时候你就可以用 srt-fuzzy-sync 这个工具, 将英文字幕设定为参考, 然后对双语字幕的时间轴进行修正, 就可以得到一个时间轴正确的双语字幕啦!
|
||||
|
||||
为什么叫 fuzzy-sync 呢, 这主要是为了通用性, 只对两个字幕之间高度相同的一些关键对白进行匹配, 其他的对白则只是基于匹配结果进行整体偏移, 这样做的好处是即便你找的这两个字幕的对白数量不一样, 仍然可以完成同步.
|
||||
|
||||
一般英文的 SDH 无障碍字幕里都会有很多非对白场景下的文字提示, 比如
|
||||
|
||||
> (Theme Music Playing)
|
||||
|
||||
> (sigh)
|
||||
|
||||
> (Bird Singing)
|
||||
|
||||
而影片对应中文字幕里一般都不会加上这些翻译. 此外中文字幕还常常对影片中出现的标题、店铺招牌、标语、新闻标题做翻译说明, 种种因素导致中英文字幕在句子的数量上不是严格对等的.
|
||||
|
||||
此外这些字幕出现的时间, 通常是没有对应的对白音频的. 上面基于音频匹配的都无法很好地处理这类情况, 所以我才抛弃按句匹配的方法, 改为按一些句子很长, 具有标志性, 在影片中通常只会出现一次的关键语句匹配.
|
||||
|
||||
至于找不到的现成双语字幕的, 那就需要我们自己动手制作啦.
|
||||
|
||||
## 3. 自制双语字幕
|
||||
|
||||
有时只能找到现成的中文字幕和原版英文字幕, 但是没有双语的版本, 这个时候就需要我们手动合并了.
|
||||
|
||||
这里推荐一个工具网站 [Subtitle Tools](https://subtitletools.com/merge-subtitles-online), 里面有各种简单的字幕工具, 比如字幕合并, 字幕格式转换.
|
||||
|
||||
对于手上又对齐的英文字幕和对齐的英文字幕, 但是数量很多不想一个个到网站上去合并的, 可以考虑 srt-merge 这个工具. 不过原作者很久没更新了, 我这里也编写了一个工具, 也可以实现一样的功能. [dual-lang-sub-tool](https://github.com/Colin-XKL/dual-lang-sub-tool/tree/main)
|
||||
|
||||
此外还有一种常见的情况, 就是我们下载的 WebRip 版本资源, 影片已经内置了多国语言分别的字幕, 这些资源大部分是来源于 Netfilx, Disney Plus , iTunes 这些, 我们可以直接提取影片资源内置的两种语言的字幕然后将它们合并.
|
||||
|
||||
内置字幕的提取可以使用 ffmpeg 工具, 首先用 ffmpeg -i 文件路径 来查看基本信息, 确定好字幕所在的 track, 比如 Stream #0:3(chi) Subtitle, 这种就是说明 3 号 stream 是中文字幕.
|
||||
|
||||
```shell
|
||||
# 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 格式
|
||||
|
||||
```shell
|
||||
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 应该有生之年就可以用上, 至于是好事还是坏事, 那就交给未来去评判吧.
|
||||
Reference in New Issue
Block a user