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.
[
{ number: 3, language: 'eng', type: 'utf8', name: 'English(US)' },
{ number: 4, language: 'jpn', type: 'ass', header: '[Script Info]\r\n...' }
]
- The
language
attribute can beundefined
if the mkv track does not specify it, this is often interpreted aseng
. - The
name
attribute is not standard but may provide language info.
{
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