0

我正在尝试编写字幕并将其显示在视频中任意位置的多个位置。我有一长串时间和位置来显示视频中的文本,但我不知道如何将这些时间和位置编码到字幕文件中。网上的很多例子只展示了如何显示单个字幕,或者没有解释字幕文件的语法。

我找不到如何做到这一点的简单答案,所以我不得不把很多方法放在一起,我要回答我自己的问题。

4

1 回答 1

1

这样做的主要选项是:

  • 使用 GUI/独立程序(@llogan 提到aegisub
  • ffmpeg 中的“drawtext”过滤器
  • 带有 SRT 文件的字幕过滤器
  • 带有 SSA 文件的字幕过滤器
  • 带有 ASS 文件的字幕过滤器

我想在文本文件中编写自己的字幕(使其可编写脚本),而不是使用独立的 GUI。一些方法不允许任意定位(字幕总是在底部居中)。其他人不允许从文件中加载一长串字幕,即您必须将它们全部编码到 ffmpeg 命令字符串中,这很笨拙。

这是关于字幕过滤器的文档,但它实际上并没有解释随附文件的语法。事实上,我发现很难找到任何字幕文件选项的清晰文档。我选择了 ASS,因为它似乎有效,并且我在互联网上发现了足够多的模板,我能够通过反复试验找出最重要的功能。

首先,创建一个名为的文本文件desc.ass,如下所示:

[Script Info]
PlayResY: 600
WrapStyle: 1

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Alignment, MarginL, MarginV
Style: N,Arial,60,&H00FFFF,1,425,550
Style: NE,Arial,60,&H00FFFF,1,650,480
Style: E,Arial,60,&H00FFFF,1,700,250
Style: SE,Arial,60,&H00FFFF,1,600,50
Style: S,Arial,60,&H00FFFF,1,400,0
Style: SW,Arial,60,&H00FFFF,1,150,50
Style: W,Arial,60,&H00FFFF,1,100,250
Style: NW,Arial,60,&H00FFFF,1,150,500

[Events]
Format: Start, End, Style, Text
Dialogue: 00:00:01.00, 00:00:05.00, E, Text to display with the E style
Dialogue: 00:00:05.00, 00:00:05.50, N, Text to display with the N style

实际文件在此之后还有更多“对话”行,但为了便于阅读,我截断了。

我还没有真正理解该Script Info部分。:(

V4+ Styles部分允许您指定任意数量的“样式”,它们定义颜色、位置、字体和许多其他内容。每个实际的字幕都将使用其中一种样式。

如果每个字幕将显示在少量位置,我认为为每个位置定义一个样式会更容易。因为我想在 8 个位置之一显示字幕,所以我定义了 8 种样式。但是您可以覆盖任何给定字幕的位置(见下文)。所以另一种选择是对所有内容使用单一样式,并根据需要定义每个字幕的位置。

PrimaryColour是一个十六进制颜色参数(尽管由于某种原因它似乎是倒退的,所以黄色给你青色,反之亦然)。 Alignment 指的是数字键盘,所以 1 表示左下,5 表示中间。 MarginLMarginV允许您将水平和垂直偏移应用于默认对齐方式。

您可以在这里指定更多属性,只需将元素添加到该Format行,然后在每一Style行上指定它们。这个页面是我能找到的最全面的文档

互联网上的每个人都复制/粘贴具有许多指定格式的相同示例文本(例如,此处)。是另一个更简单的例子。如果有人可以发布有关这些属性的含义的清晰文档,那就太好了!

[Events]部分定义了各个字幕。在这里,我只指定基础知识:开始时间、结束时间、样式名称和文本。

您可以通过将字符串添加到该行元素的开头来覆盖任何给定元素的位置。(显然将 400、570 替换为您想要的位置。)Dialogue{\pos(400,570)}Text

您可以预览将这些字幕应用到这样命名的视频的结果video.mkvffplay有些 ffplay -i video.mkv -vf "subtitles=desc.ass" 人称之为软字幕,因为视频本身没有被更改,字幕只是显示在它上面。

如果您想将字幕永久刻录到视频中(有时称为硬字幕),您可以像这样重新编码: ffmpeg -i video.mkv -vf "subtitles=desc.ass" video_with_subtitles.mkv

用于刻录字幕的参考

于 2021-09-25T15:35:33.870 回答