html 中的可点击字幕

Clickable subtitle in html

我正在尝试使用 django 建立一个网站,我想在其中托管带字幕的视频。 我的主要目标是让我的字幕 可点击 这样每当用户点击或悬停在一个词上时他们就可以看到该词的含义。 我目前使用的是 .vtt 格式的字幕。

有什么想法吗?

下面是 html 代码:

<video id="example_video" class="" controls preload="none" width="640" height="264">
    <source src="{% static 'video/video.mp4' %}" type='video/mp4' />
    <track kind="captions" src="{% static 'captions.vtt' %}" srclang="en" label="English" />
</video>

这也是我的副标题:

WEBVTT

    00:03.000 --> 00:06.000
    trying to make each word a clickable element

    00:08.000 --> 00:09.225
    sample text

TL;DR

不在我的脑海里;一种方法是为您的字幕区域制作一个 div,并使用 flexwrapjustify-center 排列其中的所有内容。此 div 将包含 <a> ... </a> 个标签。

然后,您可以为每个时间戳中的每个单词动态填充此模板。

模板

我的意思是:

.sub-word {
  /* padding: 0 5px; */
  padding-right: 1em;
  text-decoration: none;
  color: black;
  font-family: monospace;
  font-size: 18px;
}

.sub-word:hover {
  font-weight: bold;
  text-decoration: underline;
  color: green;
}

#sub-area {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
}
<div id="sub-area">
  <a href="link-to-definition-for-Trying" title="to attemp" class="sub-word">
        Trying
    </a>
  <a href="link-to-definition-for-to" title="preposition" class="sub-word">
        to
    </a>
  <a href="link-to-definition-for-make" title="to form" class="sub-word">
        make
    </a>
  <a href="link-to-definition-for-each" title="every" class="sub-word">
        each
    </a>
  <a href="link-to-definition-for-word" title="a meaningful of a laguage I guess" class="sub-word">
        word
    </a>
  <a href="link-to-definition-for-a" title="determiner" class="sub-word">
        a
    </a>
  <a href="link-to-definition-for-clickable" title="able to be clicked on" class="sub-word">
        clickable
    </a>
  <a href="link-to-definition-for-element." title="part of something" class="sub-word">
        element.
    </a>
</div>

如果您将鼠标悬停在任何单词上,它会突出显示,然后会打开一个小弹出窗口,其中包含定义。如果您单击这些词,您可以转到一个专门的页面,其中包含更全面的含义和您想要的内容。

后端和逻辑

您也有不同的选择。一个想法是编写一个类似 JSON 的字幕文件,其中它们由时间戳分隔,然后是单词等等。

{
  "00:00.000" : {
    "trying" : {
      "def": "attempting to",
      "link": "somewhere"
    },
    "to" : {
      "def": "preposition",
      "link": "somewhere"
    }
  },
  "00:03.000": {
    
  }
}

然后您可以使用 JavaScript 动态更改。

编辑:从字幕生成 HTML 的示例:

假设您的字幕始终采用时间戳和字符串的形式,您可以将它们分开,然后将它们放入字典中:

for i in range(0, len(sub), 2):
    index = sub[i]
    words = sub[i+1]
    # making a dict as above
    sub_dict[index] = {word: define(word) for word in words.split()}

然后你可以用这样的东西生成标签:

sub_div = '<div id="sub-area">'
for word in words.split():
    sub_div += f'<a href="{definition_link(word)}" title="{define(word)}" class="sub-word">{word}</a>'
sub_div += '</div>'

当然也有库可以做到这一点。