# SRT到VTT转换器

这个模块提供了在Node.js环境中将SRT字幕文件转换为WebVTT格式的功能。

## 功能特性

- ✅ 从文件读取SRT并转换为VTT
- ✅ 支持批量转换多个SRT文件
- ✅ 支持字符串内容直接转换
- ✅ 自动验证SRT格式
- ✅ 完整的错误处理
- ✅ TypeScript支持

## 安装

```bash
npm install @xiping/node-utils
```

## 使用方法

### 1. 从文件读取SRT并转换为VTT字符串

```typescript
import { convertSrtFileToVtt } from '@xiping/node-utils/src/srt-to-vtt';

try {
  const vttContent = convertSrtFileToVtt('./subtitles.srt');
  console.log('转换后的VTT内容:', vttContent);
} catch (error) {
  console.error('转换失败:', error);
}
```

### 2. 从文件读取SRT并保存为VTT文件

```typescript
import { convertSrtFileToVttFile } from '@xiping/node-utils/src/srt-to-vtt';

try {
  // 指定输出路径
  const outputPath = convertSrtFileToVttFile('./subtitles.srt', './output/subtitles.vtt');
  console.log('VTT文件已保存到:', outputPath);
  
  // 或者使用默认输出路径（同目录，扩展名改为.vtt）
  const defaultOutputPath = convertSrtFileToVttFile('./subtitles.srt');
  console.log('默认输出路径:', defaultOutputPath);
} catch (error) {
  console.error('文件转换失败:', error);
}
```

### 3. 批量转换多个SRT文件

```typescript
import { batchConvertSrtToVtt } from '@xiping/node-utils/src/srt-to-vtt';

try {
  const srtFiles = [
    './subtitles1.srt',
    './subtitles2.srt',
    './subtitles3.srt'
  ];
  
  const results = batchConvertSrtToVtt(srtFiles, './output');
  
  results.forEach(result => {
    if (result.success) {
      console.log(`✅ ${result.input} -> ${result.output}`);
    } else {
      console.error(`❌ ${result.input}: ${result.error}`);
    }
  });
} catch (error) {
  console.error('批量转换失败:', error);
}
```

### 4. 从字符串内容直接转换

```typescript
import { convertSrtStringToVtt } from '@xiping/node-utils/src/srt-to-vtt';

try {
  const srtContent = `1
00:00:00,000 --> 00:00:04,000
这是第一行字幕

2
00:00:04,000 --> 00:00:08,000
这是第二行字幕`;

  const vttContent = convertSrtStringToVtt(srtContent);
  console.log('转换后的VTT内容:', vttContent);
} catch (error) {
  console.error('字符串转换失败:', error);
}
```

## API参考

### convertSrtFileToVtt(srtFilePath: string): string

从文件读取SRT内容并转换为VTT格式字符串。

**参数:**
- `srtFilePath`: SRT文件路径

**返回值:**
- 转换后的VTT内容字符串

**异常:**
- 文件不存在时抛出错误
- 文件格式无效时抛出错误

### convertSrtFileToVttFile(srtFilePath: string, outputPath?: string): string

从文件读取SRT内容并转换为VTT格式，同时保存到文件。

**参数:**
- `srtFilePath`: SRT文件路径
- `outputPath`: 输出VTT文件路径（可选）

**返回值:**
- 输出文件路径

### batchConvertSrtToVtt(srtFilePaths: string[], outputDir?: string): Array<{ input: string; output: string; success: boolean; error?: string }>

批量转换多个SRT文件到VTT格式。

**参数:**
- `srtFilePaths`: SRT文件路径数组
- `outputDir`: 输出目录（可选）

**返回值:**
- 转换结果数组，包含每个文件的转换状态

### convertSrtStringToVtt(srtContent: string): string

从字符串内容直接转换为VTT格式。

**参数:**
- `srtContent`: SRT内容字符串

**返回值:**
- VTT格式字符串

## 格式说明

### SRT格式
```
1
00:00:00,000 --> 00:00:04,000
字幕内容

2
00:00:04,000 --> 00:00:08,000
字幕内容
```

### WebVTT格式
```
WEBVTT

00:00:00.000 --> 00:00:04.000
字幕内容

00:00:04.000 --> 00:00:08.000
字幕内容
```

## 主要差异

1. **时间格式**: SRT使用逗号分隔毫秒，VTT使用点分隔
2. **头部**: VTT需要`WEBVTT`头部
3. **索引**: SRT包含序号，VTT不包含

## 错误处理

所有函数都包含完整的错误处理：

- 文件不存在
- 文件格式错误
- 权限问题
- 编码问题

## 示例

查看 `example.ts` 文件获取完整的使用示例。 