TTML 转 MicroDVD
或者粘贴字幕文本
选项
时间按哪个帧率计算。在格式页面里,这是 MicroDVD 需要的值,因为它把时间存成帧号。在帧率页面里,它是文件当初对应的速率 —— 字幕是按这个版本做的 —— 而页面的第二个框填你要拿它配套的视频速率。常见的有 23.976、24、25、29.97、30、50、59.94 和 60。填错会让整条时间轴偏移;在帧率页面里,偏移是按比例发生的,而不是一个固定的量。
这次转换会改变什么
有 4 项会被丢弃或需要你决定
- 样式
全部样式(粗体、斜体、颜色、描边、阴影)
- 定位
屏幕定位(每条字幕条都会回到默认位置)
- 帧率
该格式以帧号存储时间——时间取决于你提供的帧率
- 格式专有内容
源格式保留在字幕条之外的内容(非字幕块、文件头文字、单条字幕的设置、被注释掉的事件)——目标格式没有地方存放它们
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
这一页把 TTML 写成 MicroDVD:产物是 `{100}{152}正文` 这样的帧号行,第一行写 `{1}{1}25` 声明帧率。MicroDVD 不存时钟,所以毫秒要先乘以帧率、再四舍五入到帧。
帧率由页面上的 fps 框给(默认 25)。TTML 自己的 `ttp:frameRate` 与 `ttp:frameRateMultiplier` 只在这一页的读入阶段用来解释帧号写法;写出来的 MicroDVD 只认自己那一行声明。取整会留下半帧的痕迹:`1.5s` 在 25 fps 下是 37.5 帧,写成 `{38}`;`3.5s` 是 87.5,写成 `{88}`。
丢的东西最多:样式、屏幕定位、帧率、TTML 的头部构造都没有落点。段落内的 `<span>` 强调也保不住——MicroDVD 的样式能力是 none,`<span>` 里的文字会留下,颜色与斜体不会。
`<br/>` 写成 `|`,两行仍在同一条 cue。产物按开始时间升序,UTF-8、LF、无 BOM;批量串行、可取消、ZIP 打包,不上传。
示例
一份典型的 TTML 文件转成 MicroDVD
输入
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
<head>
<styling>
<style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
</styling>
<layout>
<region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
</layout>
</head>
<body>
<div>
<p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
<p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
</div>
</body>
</tt>
输出
{1}{1}25
{25}{88}Hello there.
{88}{150}How are you?|Fine, thanks.
产物丢掉了样式、定位、帧率与头部构造;帧号按 25 fps 取整。
同一转换遇到一份脏输入
输入
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
ttp:frameRate="25" xml:lang="en">
<body>
<div>
<p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
<p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
<p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
<p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom & Jerry.</p>
</div>
</body>
</tt>
输出
{1}{1}25
{38}{88}Loaded from an offset and a duration.
{100}{163}A coarser clock spelling.
{175}{212}Frames, at 25fps.
{225}{275}Half-open and Tom & Jerry.
这一份用了真实的写法混排:偏移加时长、粗一点的时钟拼法、按帧号写的时间、实体与只有开始时间的半开 cue。可以看解析器把哪些写法折成了同一份时间轴。
常见问题
TTML 转 MicroDVD 用哪个帧率?
页面 fps 框里的值,默认 25。TTML 自己声明的 `ttp:frameRate` 不会自动带过去;要让产物按别的帧率写,就在框里改。填错的表现是整条时间轴按比例偏。
TTML 的 7 秒 12 帧在 MicroDVD 里为什么是 `{212}`?
先把帧号写法折算成 8.48 秒(25 fps),再乘以 25 得 212 帧。MicroDVD 第一个花括号里的就是帧号,不是时间码。
TTML 转 MicroDVD 会保留毫秒吗?
不会。MicroDVD 的精度是一帧,25 fps 下约 40 ms;毫秒在换算时被取整到最近的帧,样例里 1.5 秒写成第 38 帧。
TTML 的样式与定位在 MicroDVD 产物里有落点吗?
没有。`<styling>`、`<layout>`、`<p>` 上的 `style` / `region` 引用与段落内的 `<span>` 强调都不会进产物,只有文字与帧号。
TTML 转 MicroDVD 的两行字幕怎么合并?
用竖线 `|` 连成一行,这是 MicroDVD 的硬换行写法。两行仍然属于同一条 cue,时间窗只出现一次。
MicroDVD 再转回 TTML 会丢掉什么?
丢掉帧率。TTML 的 cue 只有时钟,帧号换算过一次就不再保留;MicroDVD 的帧率也不会写成 `ttp:frameRate`。