@coursebuilder/core
Version:
Core package for Course Builder
1 lines • 6.38 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/inngest/video-processing/utils.ts"],"sourcesContent":["import SrtParser2 from 'srt-parser-2'\n\nexport async function mergeSrtWithScreenshots(\n\tsrt: string,\n\tmuxPlaybackId: string,\n) {\n\tlet parser = new SrtParser2()\n\tlet result = parser.fromSrt(srt)\n\n\t// filter over result to find triggerWords\n\tlet timesWithWords = result.filter((x) => {\n\t\tfor (let word of triggerWords) {\n\t\t\tif (x.text.toLowerCase().includes(word)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t})\n\n\tlet timesWithWordsScreenshots: any = []\n\tlet screenshotNumber = 1\n\tfor (let time of timesWithWords) {\n\t\ttry {\n\t\t\tconst startTime = time.startTime.split(',')[0]\n\t\t\tconst [hours, minutes, seconds]: any = startTime?.split(':').map(Number)\n\t\t\tconst totalSeconds = hours * 3600 + minutes * 60 + seconds\n\n\t\t\tconst muxThumbnailUrl = `https://image.mux.com/${muxPlaybackId}/thumbnail.png?width=800&height=600`\n\t\t\ttimesWithWordsScreenshots.push({\n\t\t\t\t...time,\n\t\t\t\tscreenshot: muxThumbnailUrl + `&time=${totalSeconds}`,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.log(e)\n\t\t}\n\t\tscreenshotNumber++\n\t}\n\t// deep merge timesWithWordsScreenshots with result\n\tlet resultWithScreenshots = result.map((x: any) => {\n\t\tlet found = timesWithWordsScreenshots.find(\n\t\t\t(y: any) => y.startTime === x.startTime,\n\t\t)\n\t\tif (found) {\n\t\t\treturn { ...x, screenshot: found.screenshot }\n\t\t}\n\t\treturn x\n\t})\n\n\tlet withTimes = resultWithScreenshots.map((line) => {\n\t\treturn { ...line, totalSeconds: line.endSeconds - line.startSeconds }\n\t})\n\n\tlet timeLimitInSeconds = 20\n\tlet currentTimeInSeconds = 0\n\tlet transcribedSentencesCount = 0\n\n\tlet arrayByTimes = []\n\tlet tempArray: any = []\n\twithTimes.forEach((x, i) => {\n\t\tif (currentTimeInSeconds + x.totalSeconds >= timeLimitInSeconds) {\n\t\t\tarrayByTimes.push(tempArray)\n\t\t\ttempArray = []\n\t\t\tcurrentTimeInSeconds = 0\n\t\t\ttranscribedSentencesCount = 0\n\t\t}\n\n\t\tif (currentTimeInSeconds === 0) {\n\t\t\t// if x has a screenshot add it to the array\n\t\t\tif (x.screenshot) {\n\t\t\t\ttempArray.push(\n\t\t\t\t\t`[${formatMdTimeString(x.startTime.split(',')[0])}] ${x.text}\\n\\n\\n\\n`,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\ttempArray.push(\n\t\t\t\t\t`[${formatMdTimeString(x.startTime.split(',')[0])}] ${x.text}`,\n\t\t\t\t)\n\t\t\t}\n\t\t} else {\n\t\t\tif (x.screenshot) {\n\t\t\t\ttempArray.push(`${x.text}\\n\\n\\n\\n`)\n\t\t\t} else {\n\t\t\t\ttempArray.push(`${x.text}`)\n\t\t\t}\n\t\t}\n\t\tcurrentTimeInSeconds += x.totalSeconds\n\t\ttranscribedSentencesCount++\n\t})\n\n\tarrayByTimes.push(tempArray)\n\n\tlet transcript = [\n\t\t...arrayByTimes\n\t\t\t.map((x) => x.join(' '))\n\t\t\t.flat()\n\t\t\t.join('\\n\\n'),\n\t].join('')\n\treturn { transcriptWithScreenshots: transcript, resultWithScreenshots }\n}\n\nfunction formatMdTimeString(str: string) {\n\tlet [h, m, s] = str.split(':')\n\tif (h == '00') {\n\t\treturn `${m}:${s}`\n\t}\n\n\treturn `${h}:${m}:${s}`\n}\n\nlet triggerWords = [\n\t'here',\n\t'have',\n\t'there',\n\t'this',\n\t'that',\n\t'see',\n\t'these',\n\t'look',\n\t'show',\n\t'watch',\n\t'notice',\n\t'line',\n\t'where',\n\t'say',\n\t'go',\n\t'do',\n\t'can',\n\t'hover',\n\t'click',\n\t'function',\n\t'component',\n\t'variable',\n]\n"],"mappings":"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","names":["mergeSrtWithScreenshots","srt","muxPlaybackId","parser","SrtParser2","result","fromSrt","timesWithWords","filter","x","word","triggerWords","text","toLowerCase","includes","timesWithWordsScreenshots","screenshotNumber","time","startTime","split","hours","minutes","seconds","map","Number","totalSeconds","muxThumbnailUrl","push","screenshot","e","console","log","resultWithScreenshots","found","find","y","withTimes","line","endSeconds","startSeconds","timeLimitInSeconds","currentTimeInSeconds","transcribedSentencesCount","arrayByTimes","tempArray","forEach","i","formatMdTimeString","transcript","join","flat","transcriptWithScreenshots","str","h","m","s"]}