TXT 转 TTML
或者粘贴字幕文本
选项
当源文件没有结束时间时使用(纯文本、LRC)。输出里的时间轴是在这里生成的,不是转换来的,所以填多少就是多少。
这次转换会改变什么
有 1 项会被丢弃或需要你决定
- 时间
时间轴本身——源文件不记录任何时间,因此输出的时间轴是生成的,而不是转换来的
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
TXT 转 TTML 会给每行文字补上起止时间,写成 `<p begin=… end=…>`。第一行从 0 开始,之后每行接着上一行的结束,单行长度由“时长”参数决定,默认 2000 毫秒;时间写到毫秒,不再舍入。
产物是带 XML 声明的 TTML 文档,正文在 `<body>` 里逐条排列。TXT 的空白行是段落分隔,不会生成空的 `<p>`;每条非空行对应一条字幕,时间码写成 `00:00:02.000`,正文按行序排列。
有损说明只列一项:时间轴是生成的。TXT 没有样式、定位和卡拉OK,因此 TTML 里不会出现从源文件继承的样式或区域设置。
生成的起点是等间距的,适合先得到一份可加载的字幕再对轴。批量转换与浏览器内处理照旧:文件不上传,多个结果打包下载,每个文件独立成一份 TTML,不会互相混入。
示例
一份典型的 TXT 文件转成 TTML
输入
The quick brown fox jumps over the lazy dog.
Second paragraph, first line.
Second paragraph, second line.
输出
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:00.000" end="00:00:02.000">The quick brown fox jumps over the lazy dog.</p>
<p begin="00:00:02.000" end="00:00:04.000">Second paragraph, first line.</p>
<p begin="00:00:04.000" end="00:00:06.000">Second paragraph, second line.</p> </body>
</tt>
这份产物丢掉了时间轴(它由本站排定);每行文字变成一条带毫秒 begin/end 的 `<p>`。
同一转换遇到带 BOM 与空行的 TXT
输入
Hello world.
Second block.
输出
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:00.000" end="00:00:02.000">Hello world.</p>
<p begin="00:00:02.000" end="00:00:04.000">Second block.</p> </body>
</tt>
真实文件常带 BOM、Windows 换行、前后空白和多层空行。可以对照上面那份干净样例,看看解析器能容忍到什么程度。
常见问题
TXT 转 TTML 的 begin 和 end 是怎么来的?
由这一页生成:第一行从 0 开始,之后每行接着上一行的结束,单行长度取“时长”参数(默认 2000 毫秒)。TXT 里没有可读取的时间码。
TXT 转 TTML 会生成空的 p 元素吗?
不会。空白行只作段落分隔,不生成 `<p>`;每条非空行对应一条字幕,所以时间轴里没有由格式造成的空洞。
TXT 转 TTML 每行默认持续多久?
默认 2000 毫秒。所有行共用这个值,最后一条的结束时间等于行数乘以它;改参数会让整份文档的时间范围一起变化。
TXT 转 TTML 的时间会舍入吗?
不会。TTML 的时间精度是毫秒,生成的时间直接写成 `00:00:02.000` 这样的值,不再经过第二次舍入。
TXT 转 TTML 会带样式或 region 吗?
不会。TXT 没有样式表和定位信息,产物只写时间与正文;`<head>` 里不会凭空出现从源文件继承的样式或区域定义。
TXT 转 TTML 的输出用什么编码?
输出固定是 UTF-8、Unix 换行符、不带 BOM,XML 声明里也写着 UTF-8。输入 TXT 若是别的编码,会先解码。