https://github.com/1c7/srt-parser-2
SRT parser that can handle wrong SRT format too (like 00:00:12.682 use dot as separator, which is wrong, it should be a comma)
https://github.com/1c7/srt-parser-2
srt srt-parser srt-subtitles subtitles-parser
Last synced: 19 days ago
JSON representation
SRT parser that can handle wrong SRT format too (like 00:00:12.682 use dot as separator, which is wrong, it should be a comma)
- Host: GitHub
- URL: https://github.com/1c7/srt-parser-2
- Owner: 1c7
- License: mit
- Created: 2020-02-14T14:22:14.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-09-25T14:03:12.000Z (over 1 year ago)
- Last Synced: 2025-03-31T10:06:22.822Z (26 days ago)
- Topics: srt, srt-parser, srt-subtitles, subtitles-parser
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/srt-parser-2
- Size: 373 KB
- Stars: 67
- Watchers: 2
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## srt-parser-2
An SRT parser for Javascript.
It reads an `.srt` file into an array.
## Install
`npm`
```
npm install srt-parser-2
```or `yarn`
```
yarn add srt-parser-2
```## Example
This is a srt format file:
```
1
00:00:11,544 --> 00:00:12,682
Hello
```it would become:
```
[{
id: '1',
startTime: '00:00:11,544',
startSeconds: 11.544,
endTime: '00:00:12,682',
endSeconds: 12.682,
text: 'Hello'
}]
```### Enviroment support
Since it only process text,
it should work in both `Browser` and `Node.js` enviroment## Usage
```javascript
let srt = `
1
00:00:11,544 --> 00:00:12,682
Hello
`;import srtParser2 from "srt-parser-2";
var parser = new srtParser2();
var srt_array = parser.fromSrt(srt);
console.log(srt_array);// turn array back to SRT string.
var srt_string = parser.toSrt(srt_array);
console.log(srt_string);
```You can run this example using `node example/1.Comma.js`
## CLI
```
npx srt-parser-2 -i input.srt -o output.json --minify
```Options:
| Option | Required | Default |
| -------------- | -------- | ----------- |
| --input or -i | Yes | |
| --output or -o | No | output.json |
| --minify | No | false |## License
MIT
## Why?
Why this one special? There are plently SRT parser on npm:
- [subtitles-parser](https://www.npmjs.com/package/subtitles-parser)
- [subtitles-parser-vtt](https://www.npmjs.com/package/subtitles-parser-vtt)
- [subtitle](https://www.npmjs.com/package/subtitle)
- [srt](https://www.npmjs.com/package/srt)## What's wrong with them?
Nothing wrong.
All of them can handle this format:```
1
00:00:11,544 --> 00:00:12,682
Hello
```## But I want to handle format like these:
```
00:00:11.544
```This is wrong format, it use period as separator
Or this:
```
00:00:11,5440
```This is also wrong format, millisecond has 4 digit (should be 3)
Or this:
```
1:00:11,5
```Similiar, hour & millisecond is only 1 digit (wrong)
Or this
```
00:00:00.05
```etc
## Format Support
| Format | Other parser | srt-parser-2 | srt-parser-2 would turn this into |
| ------------- | ------------------------------- | ---------------------- | --------------------------------- |
| 00:00:01,544 | Yes :white_check_mark: | Yes :white_check_mark: | 00:00:01,544 |
| 00:00:01.544 | :question: Yes for some of them | Yes :white_check_mark: | 00:00:01,544 |
| 00:00:01.54 | :question: Yes for some of them | Yes :white_check_mark: | 00:00:01,544 |
| 00:00:00.3333 | No :x: | Yes :white_check_mark: | 00:00:00,333 |
| 00:00:00.3 | No :x: | Yes :white_check_mark: | 00:00:00,300 |
| 1:2:3.4 | No :x: | Yes :white_check_mark: | 01:02:03,400 |Basic principle:
1. If hour,minute,second is shorter than 2 digit, pad start with "0", if longer than 2 digit, only save first 2 digit.
2. Millisecond is the same, but it's 3 digit.
3. Seperator can be `.`(periods) or `,`(comma), periods(incorrect) will be replace with comma(correct)## Conclusion
1. Support more time format (even wrong format)
2. Have extensive test