我有一个包含视频字幕的ttml文件,我想通过所有的时间\字幕对获取并将它们放到一个JSON文件中,我已经尝试过https://www.npmjs.com/package/ttml?activeTab=readme,但它不能工作。有什么想法吗?谢谢
发布于 2019-09-03 19:11:24
尝试在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>
...因此,ISDs中的结果是:
0->10s nothing
10s->15s
此文本以10秒的速度显示,以20秒的速度消失
此文本以10s的速度显示,以15s的速度消失
15s->20s
此文本以10秒的速度显示,以20秒的速度消失
此文本在15s时出现,在20s时消失
20s->无
如您所见,第一行出现在两个ISD中。当然,这取决于您在应用程序中如何处理此问题。
发布于 2021-02-06 02:19:57
对于偏爱Python的人来说,ttconv可以将TTML/IMSC文档拆分成一系列中间同步文档( Intermediate Synchronic,is ),每个文档对应一段时间,其中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 JSONttconv还支持从TTML/IMSC到SRT的转换,这是一种简单的基于文本的格式。但是,所有样式信息都会丢失。
tt.py convert -i <input .ttml file> -o <output .srt file> --otype SRT --itype TTMLhttps://stackoverflow.com/questions/57761966
复制相似问题