在 Linux 中编辑字幕

几十年来,我一直是世界电影和地区电影的爱好者。 字幕是必不可少的工具,它使我能够欣赏来自不同国家的各种语言的最佳电影。

如果您喜欢看带字幕的电影,您可能已经注意到有时字幕不同步或不正确。

您知道您可以编辑字幕并使其更好吗? 让我向您展示 Linux 中的一些基本字幕编辑。

从隐藏式字幕数据中提取字幕

大约在 2012 年、2013 年,我开始知道一种名为 CCE 提取器。 随着时间的推移,它已成为我的重要工具之一,尤其是当我遇到一个嵌入了字幕的媒体文件时。

CCExtractor 分析视频文件并从隐藏式字幕数据生成独立的字幕文件。

CCExtractor 是一个跨平台、免费和开源的工具。 该工具从它的形成年代开始已经相当成熟,现在已经成为 GSOC 和 Google Code-in 的一部分,并且 然后。

简单地说,该工具或多或少是一组脚本,它们以序列化的顺序一个接一个地工作,为您提供提取的字幕。

您可以按照 CCExtractor 上的安装说明进行操作 这一页.

安装后,当您想从媒体文件中提取字幕时,请执行以下操作:

ccextractor <path_to_video_file>

命令的输出将是这样的:

此文件包含双向 Unicode 文本,其解释或编译方式可能与下面显示的不同。 要查看,请在显示隐藏 Unicode 字符的编辑器中打开文件。
了解有关双向 Unicode 字符的更多信息

显示隐藏字符


$ ccextractor $something.mkv
CCExtractor 0.87,卡洛斯·费尔南德斯·桑兹,沃尔克·奎奇克。
图文电视部分取自 Petr Kutalek 的 telxcc
———————————————————————————
输入:$something.mkv
[Extract: 1] [Stream mode: Autodetect]
[Program : Auto ] [Hauppage mode: No] [Use MythTV code: Auto]
[Timing mode: Auto] [Debug: No] [Buffer input: No]
[Use pic_order_cnt_lsb for H.264: No] [Print CC decoder traces: No]
[Target format: .srt] [Encoding: UTF-8] [Delay: 0] [Trim lines: No]
[Add font color data: Yes] [Add font typesetting: Yes]
[Convert case: No] [Video-edit join: No]
[Extraction start time: not set (from start)]
[Extraction end time: not set (to end)]
[Live stream: No] [Clock frequency: 90000]
[Teletext page: Autodetect]
[Start credits text: None]
[Quantisation-mode: CCExtractor’s internal function]
————————————————————————
打开文件:$something.mkv
文件似乎是 Matroska/WebM 容器
在 Matroska 模式下分析数据
文件类型:matroska
时间码比例:1000000
Muxing 应用程序:libebml v1.3.1 + libmatroska v1.4.2
编写应用程序:mkvmerge v8.2.0 (‘World of Adventure’) 64bit
标题:$something
曲目输入:
曲目编号:1
用户标识:1
类型:视频
编解码器 ID:V_MPEG4/ISO/AVC
语言:马尔
名称:$something
曲目输入:
曲目编号:2
用户标识:2
类型:音频
编解码器 ID:A_MPEG/L3
语言:马尔
名称:$something
曲目输入:
曲目编号:3
UID:一些数字
类型:副标题
编解码器 ID:S_TEXT/UTF8
名称:$something
99% | 144:34
100% | 144:34
输出文件:$something_eng.srt
完成,处理时间 = 6 秒
问题? 在这里开票
https://github.com/CCExtractor/ccextractor/issues

查看原始数据

ccextractor-output.txt

由 ❤ 主持 GitHub

它基本上扫描媒体文件。 在这种情况下,它发现媒体文件在马来语中并且媒体容器是 .mkv 容器。 它提取了与视频文件同名的字幕文件,并在其中添加了_eng。

CCExtractor 是一个很棒的工具,可用于增强字幕以及我将在下一节中分享的字幕编辑。

有趣的阅​​读: 有一个有趣的字幕概要 副官 它告诉并分享了为什么字幕对我们很重要。 对于那些对这些主题感兴趣的人,它也涉及电影制作的相当多的细节。

使用 SubtitleEditor Tool 编辑字幕

您可能知道大多数字幕都在 .srt 格式 . 这种格式的美妙之处在于,您可以将它加载到文本编辑器中并对其进行一些修复。

一个 srt 文件在启动到一个简单的文本编辑器时看起来像这样:

此文件包含双向 Unicode 文本,其解释或编译方式可能与下面显示的不同。 要查看,请在显示隐藏 Unicode 字符的编辑器中打开文件。
了解有关双向 Unicode 字符的更多信息

显示隐藏字符


1
00:00:00,959 –> 00:00:13,744
“内阁
博士。 卡利加里”
2
00:00:40,084 –> 00:01:02,088
一个 11 世纪神话现代再现的故事
注入奇异而神秘的影响
一个流浪僧侣对一个梦游者的描述。

查看原始数据

示例字幕.txt

由 ❤ 主持 GitHub

我分享的摘录字幕来自一部漂亮的老德国电影,名为 卡利加里博士的内阁 (1920)

Subtitleeditor 是编辑字幕的绝佳工具。 字幕编辑器是并且可以用于处理持续时间、字幕文件的帧速率以与媒体文件同步、中间中断的持续时间等等。 我将在这里分享一些基本的字幕编辑。

首先按照您安装 ccextractor 的方式安装subtitleeditor,使用您喜欢的安装方法。 在 Debian 中,您可以使用以下命令:

sudo apt install subtitleeditor

安装好后,让我们看看一些需要编辑字幕的常见场景。

操纵帧率与媒体文件同步

如果您发现字幕与视频不同步,原因之一可能是视频文件和字幕文件的帧率不同。

那么你怎么知道这些文件的帧率呢?

要获取视频文件的帧率,您可以使用 mediainfo 工具。 您可能需要先使用发行版的包管理器安装它。

使用 mediainfo 很简单:

$ mediainfo somefile.mkv | grep Frame
 Format settings                          : CABAC / 4 Ref Frames
 Format settings, ReFrames                : 4 frames
 Frame rate mode                          : Constant
 Frame rate                               : 25.000 FPS
 Bits/(Pixel*Frame)                       : 0.082
 Frame rate                               : 46.875 FPS (1024 SPF)

现在您可以看到视频文件的帧率为 25.000 FPS。 我们看到的另一个帧速率是针对音频的。 虽然我可以分享为什么在视频编码、音频编码等中使用特定的 fps,但这将是一个不同的主题。 有很多与它相关的历史。

接下来就是找出字幕文件的帧率,这个有点复杂。

通常,大多数字幕都是压缩格式。 解压缩 .zip 存档以及以 something.srt 结尾的字幕文件。 除此之外,通常还有一个同名的 .info 文件,有时可能具有字幕的帧速率。

如果没有,那么通常最好去某个站点并从具有该帧速率信息的站点下载字幕。 对于这个特定的德语文件,我将使用打开subtitle.org

正如您在链接中看到的,字幕的帧率为 23.976 FPS。 很明显,它不能很好地与我的帧速率为 25.000 FPS 的视频文件一起播放。

在这种情况下,您可以使用字幕编辑器工具更改字幕文件的帧速率:

通过执行 CTRL+A 从字幕文件中选择所有内容。 转到计时 -> 更改帧速率并将帧速率从 23.976 fps 更改为 25.000 fps 或任何所需的值。 Save 更改后的文件。

更改字幕文件的起始位置

有时上述方法可能就足够了,有时虽然还不够。

您可能会发现某些情况下,字幕文件的开头与电影或媒体文件中的开头不同,而帧速率相同。

在这种情况下,请执行以下操作:

通过执行 CTRL+A 从字幕文件中选择所有内容。 转到计时 -> 选择移动字幕。

更改字幕文件的新起始位置。 Save 更改后的文件。

如果你想更准确,然后使用 mpv 查看电影或媒体文件并点击时间,如果你点击显示电影或媒体文件已经过去了多少时间的时间栏,点击它也会显示微秒。

我通常喜欢准确,所以我尽量做到准确。 在 MPV 中这是非常困难的,因为人类的反应时间是不精确的。 如果我想超级准确,那么我会使用类似的东西 大胆 但那完全是另一场球赛,因为你可以用它做更多的事情。 这也可能是在未来的博客文章中探索的内容。

操纵持续时间

有时,即使两者都做还不够,您甚至必须缩短或增加持续时间以使其与媒体文件同步。 这是较繁琐的工作之一,因为您必须单独固定每个句子的持续时间。 如果媒体文件中的帧速率可变(现在很少见,但您仍然可以获得此类文件),这种情况尤其会发生。

在这种情况下,您可能必须手动编辑持续时间并且无法实现自动化。 最好的方法是修复视频文件(在不降低视频质量的情况下不可能)或以更高的质量从另一个来源获取视频,然后 转码 它具有您喜欢的设置。 这又是一项重大任务,我可以在未来的一些博客文章中阐明。

结论

我在上面分享的内容或多或少是对现有字幕文件的改进。 如果您要从头开始,则需要大量时间。 我根本没有分享这一点,因为一部电影或任何一个小时的视频材料很容易花费 4-6 小时甚至更多时间,这取决于字幕制作者的技能、耐心、上下文、行话、口音、以英语为母语的人,翻译器等,所有这些都会对字幕的质量产生影响。

我希望你觉得这很有趣,从现在开始,你会更好地处理你的字幕。 如果您有任何建议要添加,请在下方留言。