Skip to content

Instantly share code, notes, and snippets.

@guiseek
Created June 17, 2023 05:20
Show Gist options
  • Save guiseek/1a7035e0e01c27dfbe150e8b7b588754 to your computer and use it in GitHub Desktop.
Save guiseek/1a7035e0e01c27dfbe150e8b7b588754 to your computer and use it in GitHub Desktop.
Youtube subtitles to text
const subtitle = segToSub(subtitles.events);
console.log(subtitle);
function segToSub(segments: SubtitleEvent[], withTime: false): string[];
function segToSub(segments: SubtitleEvent[], withTime: true): SubtitleTimed[];
function segToSub(segments: SubtitleEvent[], withTime = false) {
return segments.map(({ tStartMs, dDurationMs, segs = [] }) => {
return withTime
? {
start: tStartMs,
duration: dDurationMs,
text: segs.map((seg) => seg.utf8).join(''),
}
: segs.map((seg) => seg.utf8).join('');
});
}
export interface Subtitles {
wireMagic: string;
pens: Pen[];
wsWinStyles: WsWinStyle[];
wpWinPositions: WpWinPosition[];
events: SubtitleEvent[];
}
export interface SubtitleEvent {
tStartMs: number;
dDurationMs?: number;
id?: number;
wpWinPosId?: number;
wsWinStyleId?: number;
wWinId?: number;
segs?: Seg[];
aAppend?: number;
}
export interface Seg {
utf8: string;
acAsrConf?: number;
tOffsetMs?: number;
}
export interface Pen {}
export interface WpWinPosition {
apPoint?: number;
ahHorPos?: number;
avVerPos?: number;
rcRows?: number;
ccCols?: number;
}
export interface WsWinStyle {
mhModeHint?: number;
juJustifCode?: number;
sdScrollDir?: number;
}
interface SubtitleTimed {
start: number;
duration: number;
text: string;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment