mkv-subtitle-extractor
Advanced tools
Comparing version 1.0.1 to 1.0.2
101
index.js
@@ -1,2 +0,1 @@ | ||
#!/usr/bin/env node | ||
const fs = require('fs') | ||
@@ -8,59 +7,64 @@ const path = require('path') | ||
if (process.argv.length < 3) { | ||
exitWithUsage(0) | ||
} | ||
/** | ||
* Reads mkv file and writes srt files in same location | ||
*/ | ||
module.exports = function (mkvPath) { | ||
var file = fs.createReadStream(mkvPath) | ||
var mkvPath = process.argv[2] | ||
var file = fs.createReadStream(mkvPath) | ||
file.on('error', function (err) { | ||
console.error('Error:', err.message) | ||
process.exit(1) | ||
}) | ||
file.on('error', function (err) { | ||
console.error('Error:', err.message + '\n') | ||
exitWithUsage(1) | ||
}) | ||
var dir = path.dirname(mkvPath) | ||
var name = path.basename(mkvPath, path.extname(mkvPath)) | ||
var dir = path.dirname(mkvPath) | ||
var name = path.basename(mkvPath, path.extname(mkvPath)) | ||
// create srt path from language suffix | ||
var srtPath = function (language) { | ||
var languageSuffix = language ? '.' + language : '' | ||
return path.join(dir, name + languageSuffix + '.srt') | ||
} | ||
var srtPath = function (language) { | ||
var languageSuffix = language ? '.' + language : '' | ||
return path.join(dir, name + languageSuffix + '.srt') | ||
} | ||
var tracks = new Map() | ||
var subs = matroskaSubtitles() | ||
var tracks = new Map() | ||
var subs = matroskaSubtitles() | ||
subs.on('data', function (data) { | ||
if (data[0] === 'new') { | ||
var subtitlePath = srtPath(data[1].language) | ||
subs.on('data', function (data) { | ||
if (data[0] === 'new') { | ||
var subtitlePath = srtPath(data[1].language) | ||
// obtain unique filename (don't overwrite) | ||
for (var i = 2; fileExists(subtitlePath); i++) { | ||
subtitlePath = srtPath(data[1].language + i || i) | ||
} | ||
// obtain unique filename (don't overwrite) | ||
for (var i = 2; fileExists(subtitlePath); i++) { | ||
subtitlePath = srtPath(data[1].language + i || i) | ||
tracks.set(data[1].track, { | ||
index: 1, | ||
file: fs.createWriteStream(subtitlePath) | ||
}) | ||
} else { | ||
var track = tracks.get(data[0]) | ||
var sub = data[1] | ||
// convert to srt format | ||
track.file.write(`${track.index++}\r\n`) | ||
track.file.write(`${msToTime(sub.time)} --> ${msToTime(sub.time + sub.duration)}\r\n`) | ||
track.file.write(`${sub.text}\r\n\r\n`) | ||
} | ||
}) | ||
tracks.set(data[1].track, { | ||
index: 1, | ||
file: fs.createWriteStream(subtitlePath) | ||
}) | ||
} else { | ||
var track = tracks.get(data[0]) | ||
var sub = data[1] | ||
subs.on('end', function () { | ||
console.log(mkvPath) | ||
// convert to srt format | ||
track.file.write(`${track.index++}\r\n`) | ||
track.file.write(`${msToTime(sub.time)} --> ${msToTime(sub.time + sub.duration)}\r\n`) | ||
track.file.write(`${sub.text}\r\n\r\n`) | ||
} | ||
}) | ||
if (tracks.size === 0) { | ||
return console.log(' No subtitle tracks found.') | ||
} | ||
subs.on('end', function () { | ||
if (tracks.size === 0) return console.log('No subtitle tracks found.') | ||
tracks.forEach(function (track, i) { | ||
track.file.end() | ||
console.log(`Track ${z(2, i)} → ${track.file.path}`) | ||
tracks.forEach(function (track, i) { | ||
track.file.end() | ||
console.log(` Track ${z(2, i)} → ${track.file.path}`) | ||
}) | ||
}) | ||
}) | ||
file.pipe(subs) | ||
file.pipe(subs) | ||
} | ||
@@ -78,8 +82,1 @@ // https://stackoverflow.com/questions/9763441/milliseconds-to-time-in-javascript | ||
} | ||
function exitWithUsage (code) { | ||
var pkg = require('./package.json') | ||
console.log(`Version ${pkg.version}`) | ||
console.log(`Usage: ${pkg.name} <file.mkv>`) | ||
process.exit(code) | ||
} |
{ | ||
"name": "mkv-subtitle-extractor", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "Extract subtitles from .mkv files", | ||
"main": "index.js", | ||
"bin": { | ||
"mkv-subtitle-extractor": "index.js" | ||
"mkv-subtitle-extractor": "bin.js" | ||
}, | ||
@@ -21,3 +22,2 @@ "scripts": { | ||
"license": "MIT", | ||
"main": "index.js", | ||
"dependencies": { | ||
@@ -24,0 +24,0 @@ "file-exists": "^1.0.0", |
@@ -10,5 +10,5 @@ # mkv-subtitle-extractor [![npm][npm-img]][npm-url] [![dependencies][dep-img]][dep-url] [![license][lic-img]][lic-url] | ||
Extract subtitles from `.mkv` files. | ||
Extract subtitles from .mkv files. | ||
Currently only supports the `.srt` format. | ||
> Currently only supports the .srt format. | ||
@@ -24,3 +24,3 @@ ## install | ||
``` | ||
mkv-subtitle-extractor file.mkv | ||
mkv-subtitle-extractor file.mkv ... | ||
``` | ||
@@ -27,0 +27,0 @@ |
5265
5
75