0

我有一个包含视频字幕的 ttml 文件,我想通过所有对 time\caption 获取并将它们放入 JSON 文件中,我尝试过https://www.npmjs.com/package/ttml?activeTab=readme但是它没有用这个。有任何想法吗 ?谢谢

4

2 回答 2

0

尝试查看https://github.com/sandflow/imscJS以获取提取中间同步文档 (ISD) 的代码 - 例如文件 isd.js 可能是相关的。

顺便说一句,值得注意的是,TTML 中的数据模型并不完全符合时间对和单个字幕之间映射的想法。你可能会得到重复。

每个 ISD 是时间线上两个时刻之间的快照,其中呈现的内容不会改变。

这是一个重要的区别,因为在 TTML 中,有时可能会出现相同的“标题”与出现和消失的其他标题重叠,例如:

...
<div begin="10s" end="20s">
  <p>This text appears at 10s and disappears by 20s</p>
  <p end="5s">This text appears at 10s and disappears by 15s</p>
  <p begin="5s">This text appears at 15s and disappears by 20s</p> 
</div>
...

所以 ISD 的结果是:

0->10s [无]

10s->15s

此文本在 10 秒出现并在 20 秒后消失

此文本在 10 秒出现并在 15 秒后消失

15s->20s

此文本在 10 秒出现并在 20 秒后消失

此文本在 15 秒出现并在 20 秒后消失

20 多岁-> [无]

如您所见,第一行出现在两个 ISD 中。当然,这取决于您在应用程序中如何处理这个问题。

于 2019-09-03T11:11:24.267 回答
0

对于喜欢 Python 的人来说,ttconv可以将 TTML/IMSC 文档拆分为一系列中间同步文档 (ISD),每个中间同步文档 (ISD) 对应于 TTML/IMSC 文档内容是静态的一段时间。

import ttconv.imsc.reader
import ttconv.isd
import xml.etree.ElementTree as et

tt_doc = """<?xml version="1.0" encoding="UTF-8"?>
  <tt xml:lang="fr" xmlns="http://www.w3.org/ns/ttml">
  <body>
    <div>
      <p begin="1s" end="2s">Hello</p>
      <p begin="3s" end="4s">Bonjour</p>
    </div>
  </body>
  </tt>"""

m = ttconv.imsc.reader.to_model(et.ElementTree(et.fromstring(tt_doc)))

st = ttconv.isd.ISD.significant_times(m)

for t in st:
  isd = ttconv.isd.ISD.from_model(m, t)
  
  # convert ISD to JSON

ttconv还支持从 TTML/IMSC 到SRT的转换,这是一种简单的基于文本的格式。但是,所有样式信息都丢失了。

tt.py convert -i <input .ttml file> -o <output .srt file> --otype SRT --itype TTML
于 2021-02-05T18:19:56.957 回答