X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fcaptions-utils.ts;h=f6e5b9784b0876bc2f4e93953722ad8dd6e09cb3;hb=0b6f531653a7a24f82ad65564479a70a9326301a;hp=401f2fb7b236cb4e7b177adfc31f1c380c6c34b3;hpb=6302d599cdf98b5a5363a2a1dcdc266447950191;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/captions-utils.ts b/server/helpers/captions-utils.ts index 401f2fb7b..f6e5b9784 100644 --- a/server/helpers/captions-utils.ts +++ b/server/helpers/captions-utils.ts @@ -1,8 +1,10 @@ import { createReadStream, createWriteStream, move, remove } from 'fs-extra' import { join } from 'path' -import * as srt2vtt from 'srt-to-vtt' +import srt2vtt from 'srt-to-vtt' +import { Transform } from 'stream' import { MVideoCaption } from '@server/types/models' import { CONFIG } from '../initializers/config' +import { pipelinePromise } from './core-utils' async function moveAndProcessCaptionFile (physicalFile: { filename: string, path: string }, videoCaption: MVideoCaption) { const videoCaptionsDir = CONFIG.STORAGE.CAPTIONS_DIR @@ -30,17 +32,22 @@ export { // --------------------------------------------------------------------------- function convertSrtToVtt (source: string, destination: string) { - return new Promise((res, rej) => { - const file = createReadStream(source) - const converter = srt2vtt() - const writer = createWriteStream(destination) + const fixVTT = new Transform({ + transform: (chunk, _encoding, cb) => { + let block: string = chunk.toString() - for (const s of [ file, converter, writer ]) { - s.on('error', err => rej(err)) - } + block = block.replace(/(\d\d:\d\d:\d\d)(\s)/g, '$1.000$2') + .replace(/(\d\d:\d\d:\d\d),(\d)(\s)/g, '$1.00$2$3') + .replace(/(\d\d:\d\d:\d\d),(\d\d)(\s)/g, '$1.0$2$3') - return file.pipe(converter) - .pipe(writer) - .on('finish', () => res()) + return cb(undefined, block) + } }) + + return pipelinePromise( + createReadStream(source), + srt2vtt(), + fixVTT, + createWriteStream(destination) + ) }