Streaming parser for embedded .mkv subtitles.
Supported formats: .srt
, .ssa
, .ass
.
$ npm install matroska-subtitles
or include it directly:
<script src="https://cdn.jsdelivr.net/npm/matroska-subtitles@3.x/dist/matroska-subtitles.min.js"></script>
const fs = require('fs')
const { SubtitleParser } = require('matroska-subtitles')
const parser = new SubtitleParser()
// first an array of subtitle track information is emitted
parser.once('tracks', (tracks) => console.log(tracks))
// afterwards each subtitle is emitted
parser.on('subtitle', (subtitle, trackNumber) =>
console.log('Track ' + trackNumber + ':', subtitle))
fs.createReadStream('Sintel.2010.720p.mkv').pipe(parser)
See examples folder for more examples.
tracks
event response format[
{ number: 3, language: 'eng', type: 'utf8', name: 'English(US)' },
{ number: 4, language: 'jpn', type: 'ass', header: '[Script Info]\r\n...' }
]
language
attribute can be undefined
if the mkv track does not specify it, this is often interpreted as eng
.name
attribute is not standard but may provide language info.subtitle
event response format{
text: 'This blade has a dark past.',
time: 107250, // ms
duration: 1970 // ms
}
The parser now also has a file
event that emits embedded mkv files, mainly to be used to extract embedded subtitle fonts.
parser.on('file', file => console.log('file:', file))
Output:
{
filename: 'Arial.ttf',
mimetype: 'application/x-truetype-font',
data: Buffer() [Uint8Array]
}
This module also includes a SubtitleStream
class for intercepting subtitles
in mkv streams with support for seeking.
const { SubtitleStream } = require('matroska-subtitles')
let subtitleStream = new SubtitleStream()
subtitleStream.once('tracks', (tracks) => {
// close the old subtitle stream and open a new at a different stream offset
subtitleStream = new SubtitleStream(subtitleStream)
})
See examples/random-access.js for a detailed example.
MIT