UNPKG

youtube-transcript-node

Version:

This is a Node.js API which allows you to get the transcripts/subtitles for a given YouTube video. It also works for automatically generated subtitles and supports translating subtitles.

50 lines (49 loc) 2.02 kB
export class Formatter { } export class PrettyPrintFormatter extends Formatter { formatTranscript(transcript, kwargs) { return JSON.stringify(transcript.toRawData(), null, 2); } formatTranscripts(transcripts, kwargs) { return JSON.stringify(transcripts.map(t => t.toRawData()), null, 2); } } export class JSONFormatter extends Formatter { formatTranscript(transcript, kwargs) { return JSON.stringify(transcript.toRawData(), null, kwargs?.indent); } formatTranscripts(transcripts, kwargs) { return JSON.stringify(transcripts.map(t => t.toRawData()), null, kwargs?.indent); } } export class TextFormatter extends Formatter { formatTranscript(transcript, kwargs) { return transcript.snippets.map(snippet => snippet.text).join('\n'); } formatTranscripts(transcripts, kwargs) { return transcripts.map(t => this.formatTranscript(t, kwargs)).join('\n\n\n'); } } export class WebVTTFormatter extends Formatter { formatTranscript(transcript, kwargs) { const lines = ['WEBVTT\n']; for (const snippet of transcript.snippets) { const start = this._secondsToTime(snippet.start); const end = this._secondsToTime(snippet.start + snippet.duration); lines.push(`${start} --> ${end}`); lines.push(snippet.text); lines.push(''); } return lines.join('\n'); } formatTranscripts(transcripts, kwargs) { return transcripts.map(t => this.formatTranscript(t, kwargs)).join('\n\n'); } _secondsToTime(totalSeconds) { const hours = Math.floor(totalSeconds / 3600); const minutes = Math.floor((totalSeconds % 3600) / 60); const seconds = totalSeconds % 60; const milliseconds = Math.round((seconds % 1) * 1000); return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(Math.floor(seconds)).padStart(2, '0')}.${String(milliseconds).padStart(3, '0')}`; } }