@aim-packages/subtitle 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -366,6 +366,27 @@ utils.convertTimeToAssFormat("00:00:00.999"); // "0:00:00.99"
366
366
  3. 确保时间轴的准确性和兼容性
367
367
  4. 自动处理毫秒的精度转换(3位转2位)
368
368
 
369
+ ##### `cleanTimeDisplay(timeString: string): string`
370
+ 清理时间显示格式,移除毫秒部分和多余的小时前缀。
371
+
372
+ ```typescript
373
+ import { utils } from '@aim-packages/subtitle';
374
+
375
+ utils.cleanTimeDisplay("00:01:30.500"); // "01:30"
376
+ utils.cleanTimeDisplay("01:45:20,123"); // "01:45:20"
377
+ utils.cleanTimeDisplay("00:00:05.00"); // "00:05"
378
+ utils.cleanTimeDisplay("01:30:45,50"); // "01:30:45"
379
+ ```
380
+
381
+ **参数说明:**
382
+ - `timeString: string` - 输入的时间字符串
383
+
384
+ **作用:**
385
+ 1. 移除时间字符串末尾的毫秒部分(支持 .xxx、,xxx 等分隔符)
386
+ 2. 移除时间字符串开头多余的 "00:" 小时前缀
387
+ 3. 保持时间格式的简洁性和可读性
388
+ 4. 自动处理不同格式的时间字符串,统一输出格式
389
+
369
390
  ### Parser 字幕格式解析器
370
391
 
371
392
  Parser 模块提供了多种字幕格式的解析和转换功能,支持 SRT、VTT、ASS 等常见字幕格式,以及流式解析器用于实时处理。
@@ -1162,6 +1183,185 @@ console.log(assContent);
1162
1183
  // 输出完整的ASS格式字幕文件,包含样式定义和字幕内容
1163
1184
  ```
1164
1185
 
1186
+ ##### `outputTxt(params: OutputTextParams): string`
1187
+
1188
+ 生成TXT格式的纯文本文件,支持多种输出模式。
1189
+
1190
+ **参数:**
1191
+ - `params: OutputTextParams` - 输出参数配置
1192
+ - `useIndex?: boolean` - 是否显示索引编号
1193
+ - `useTimestamp?: boolean` - 是否显示时间戳
1194
+ - `useParagraph?: boolean` - 是否使用段落模式(按发言人分组或按chunkSize分组)
1195
+
1196
+ **返回值:**
1197
+ - `string` - TXT格式的文本内容
1198
+
1199
+ **功能特性:**
1200
+ - **段落模式**: 支持按说话人分组或按固定大小分块
1201
+ - **行模式**: 每个字幕片段单独一行
1202
+ - **多语言支持**: 自动检测中日韩语言,调整文本连接方式
1203
+ - **说话人支持**: 支持显示说话人名称和时间戳
1204
+
1205
+ **示例:**
1206
+ ```typescript
1207
+ import { tools } from '@aim-packages/subtitle';
1208
+
1209
+ const segments1 = [
1210
+ ["00:00:01,000", "00:00:03,000", "Hello world", "speaker1"],
1211
+ ["00:00:03,000", "00:00:05,000", "How are you?", "speaker1"],
1212
+ ["00:00:05,000", "00:00:07,000", "I'm fine, thank you.", "speaker2"]
1213
+ ];
1214
+
1215
+ const segments2 = [
1216
+ ["00:00:01,000", "00:00:03,000", "你好世界", "speaker1"],
1217
+ ["00:00:03,000", "00:00:05,000", "你好吗?", "speaker1"],
1218
+ ["00:00:05,000", "00:00:07,000", "我很好,谢谢。", "speaker2"]
1219
+ ];
1220
+
1221
+ const speakerData = {
1222
+ settings: {
1223
+ speaker1: { spk: "speaker1", name: "张三", color: "#FF0000" },
1224
+ speaker2: { spk: "speaker2", name: "李四", color: "#00FF00" }
1225
+ },
1226
+ speakers: { speaker1: 1, speaker2: 1 },
1227
+ data: []
1228
+ };
1229
+
1230
+ // 行模式 - 每个字幕片段单独一行
1231
+ const txtContent1 = tools.output.outputTxt({
1232
+ segments1,
1233
+ segments2,
1234
+ speakerData,
1235
+ useIndex: true,
1236
+ useTimestamp: true,
1237
+ useParagraph: false
1238
+ });
1239
+
1240
+ console.log(txtContent1);
1241
+ // 输出:
1242
+ // 0
1243
+ // 00:00:01,000 --> 00:00:03,000
1244
+ // 张三: Hello world
1245
+ // 你好世界
1246
+ //
1247
+ // 1
1248
+ // 00:00:03,000 --> 00:00:05,000
1249
+ // 张三: How are you?
1250
+ // 你好吗?
1251
+ //
1252
+ // 2
1253
+ // 00:00:05,000 --> 00:00:07,000
1254
+ // 李四: I'm fine, thank you.
1255
+ // 我很好,谢谢。
1256
+
1257
+ // 段落模式 - 按说话人分组
1258
+ const txtContent2 = tools.output.outputTxt({
1259
+ segments1,
1260
+ segments2,
1261
+ speakerData,
1262
+ useIndex: true,
1263
+ useTimestamp: true,
1264
+ useParagraph: true
1265
+ });
1266
+
1267
+ console.log(txtContent2);
1268
+ // 输出:
1269
+ // 1
1270
+ // 张三 - 00:00:01,000 --> 00:00:05,000
1271
+ // Hello world How are you?
1272
+ // 你好世界 你好吗?
1273
+ //
1274
+ // 2
1275
+ // 李四 - 00:00:05,000 --> 00:00:07,000
1276
+ // I'm fine, thank you.
1277
+ // 我很好,谢谢。
1278
+
1279
+ ##### `outputMarkdown(params: OutputTextParams): string`
1280
+
1281
+ 生成 Markdown 格式的字幕文件,支持多种输出模式和说话人分组。
1282
+
1283
+ **参数:**
1284
+ - `params: OutputTextParams` - 输出参数配置
1285
+ - `header?: string` - 文档标题
1286
+ - `isMd?: boolean` - 是否为 Markdown 格式(影响换行符)
1287
+ - `chunkSize?: number` - 分块大小,默认为 10
1288
+
1289
+ **返回值:**
1290
+ - `string` - Markdown 格式的字幕内容
1291
+
1292
+ **功能特性:**
1293
+ - **说话人分组**: 支持按说话人分组显示内容
1294
+ - **多语言支持**: 自动检测中日韩语言,调整文本连接方式
1295
+ - **分块处理**: 支持按固定大小分块处理长文本
1296
+ - **时间显示**: 自动清理时间格式,移除毫秒和多余前缀
1297
+ - **灵活格式**: 支持 Markdown 和纯文本两种输出格式
1298
+
1299
+ **示例:**
1300
+ ```typescript
1301
+ import { tools } from '@aim-packages/subtitle';
1302
+
1303
+ const segments1 = [
1304
+ ["00:00:01,000", "00:00:03,000", "Hello world", "speaker1"],
1305
+ ["00:00:03,000", "00:00:05,000", "How are you?", "speaker1"],
1306
+ ["00:00:05,000", "00:00:07,000", "I'm fine, thank you.", "speaker2"]
1307
+ ];
1308
+
1309
+ const segments2 = [
1310
+ ["00:00:01,000", "00:00:03,000", "你好世界", "speaker1"],
1311
+ ["00:00:03,000", "00:00:05,000", "你好吗?", "speaker1"],
1312
+ ["00:00:05,000", "00:00:07,000", "我很好,谢谢。", "speaker2"]
1313
+ ];
1314
+
1315
+ const speakerData = {
1316
+ settings: {
1317
+ speaker1: { spk: "speaker1", name: "张三", color: "#FF0000" },
1318
+ speaker2: { spk: "speaker2", name: "李四", color: "#00FF00" }
1319
+ },
1320
+ speakers: { speaker1: 1, speaker2: 1 },
1321
+ data: []
1322
+ };
1323
+
1324
+ // 带说话人的 Markdown 输出
1325
+ const mdContent = tools.output.outputMarkdown({
1326
+ segments1,
1327
+ segments2,
1328
+ header: "# 会议记录",
1329
+ speakerData,
1330
+ chunkSize: 5
1331
+ });
1332
+
1333
+ console.log(mdContent);
1334
+ // 输出:
1335
+ // # 会议记录
1336
+ //
1337
+ // 张三 01:30 - 01:45
1338
+ // Hello world How are you?
1339
+ // 你好世界 你好吗?
1340
+ //
1341
+ // 李四 01:45 - 01:47
1342
+ // I'm fine, thank you.
1343
+ // 我很好,谢谢。
1344
+
1345
+ // 纯文本输出(无说话人)
1346
+ const textContent = tools.output.outputMarkdown({
1347
+ segments1,
1348
+ segments2,
1349
+ header: "会议记录",
1350
+ isMd: false,
1351
+ chunkSize: 3
1352
+ });
1353
+
1354
+ console.log(textContent);
1355
+ // 输出:
1356
+ // 会议记录
1357
+ // 1. Hello world
1358
+ // 你好世界
1359
+ // 2. How are you?
1360
+ // 你好吗?
1361
+ // 3. I'm fine, thank you.
1362
+ // 我很好,谢谢。
1363
+ ```
1364
+
1165
1365
  #### 完整的字幕处理流程示例
1166
1366
 
1167
1367
  ```typescript