matroska-subtitles
Streaming parser for embedded .mkv subtitles.
Supported formats: .srt
, .ssa
, .ass
.
install
$ 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>
example
const fs = require('fs')
const { SubtitleParser } = require('matroska-subtitles')
const parser = new SubtitleParser()
parser.once('tracks', (tracks) => console.log(tracks))
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...' }
]
- The
language
attribute can be undefined
if the mkv track does not specify it, this is often interpreted as eng
. - The
name
attribute is not standard but may provide language info.
subtitle
event response format
{
text: 'This blade has a dark past.',
time: 107250,
duration: 1970
}
attached files
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]
}
random access
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) => {
subtitleStream = new SubtitleStream(subtitleStream)
})
See examples/random-access.js for a detailed example.
see also
mkv-subtitle-extractor
license
MIT