add srt files

This commit is contained in:
2024-12-24 15:20:16 -06:00
parent 3129677921
commit 566cdab6d6
95 changed files with 1199450 additions and 16 deletions

View File

@@ -3,6 +3,8 @@ const handlebars = require('handlebars');
const sass = require("sass");
const pluginRss = require("@11ty/eleventy-plugin-rss");
const handlebarsHelpers = require('handlebars-helpers')
const { parseSync } = require('subtitle')
const path = require('path')
const htmlmin = require("html-minifier");
@@ -21,23 +23,36 @@ module.exports = function(eleventyConfig) {
eleventyConfig.addPlugin(utilsPlugin, {immediate: true});
eleventyConfig.addPlugin(handlebarsPlugin);
eleventyConfig.addPlugin(pluginRss);
eleventyConfig.addTemplateFormats("srt");
eleventyConfig.addExtension(
"srt",
{compile: (inputContent, inputPath)=>{
const parsed = parseSync(inputContent.toString(), {type:'srt'})
return async (data) => {
data.transcript = parsed
data.layout = "transcript"
// data.tags = ['transcript']
return JSON.stringify(parsed)
}
}})
handlebarsHelpers({
handlebars
})
eleventyConfig.addTransform("htmlmin", (content, outputPath) => {
if (outputPath.endsWith(".html")) {
return htmlmin.minify(content, {
collapseWhitespace: true,
removeComments: true,
useShortDoctype: true,
});
}
// eleventyConfig.addTransform("htmlmin", (content, outputPath) => {
// if (outputPath.endsWith(".html")) {
// return htmlmin.minify(content, {
// collapseWhitespace: true,
// removeComments: true,
// useShortDoctype: true,
// });
// }
return content;
});
// return content;
// });
// Creates the extension for use
eleventyConfig.addTemplateFormats("scss");

View File

@@ -31,6 +31,8 @@ async function podcastData (data) {
var file_stem
if (data.season === 1) {
file_stem = `ep${data.episode}`
} if (data.season === 2) {
file_stem = `${seasonEpisodeFormat(null, {...data, episodePrefix: "ep"}).toLowerCase()}`
} else {
file_stem = `${seasonEpisodeFormat(null, data).toLowerCase()}`
}
@@ -50,7 +52,18 @@ async function podcastData (data) {
}
}).catch((e)=>{return null})
const transcript_exists_promise = new Promise ((resolve, reject) => {
const transcript_page_exists_promises = [
`${data.page.filePathStem}`,
`../../../transcripts/${file_stem}`
].filter(file_path=>file_path).map((file_path)=>
fs.access(path.resolve(data.page.inputPath, `${file_path}.srt`))
.then(()=>path.resolve(data.page.filePathStem, file_path))
.catch((e)=>{
return null
})
)
transcript_file_exists_promise = new Promise ((resolve, reject) => {
if (data.podcast.transcriptUrl) {
resolve(data.podcast.transcriptUrl)
} else {
@@ -68,7 +81,8 @@ async function podcastData (data) {
const result = {
"enclosureUrl": await mp3_exists_promise,
"transcriptUrl": await transcript_exists_promise,
"transcriptUrl": await transcript_file_exists_promise,
"transcriptPage": (await Promise.all(transcript_page_exists_promises)).find(i=>i),
"title": data.podcast.title || `${seasonEpisodeFormat(null, data)}: ${data.title || "Episode " + data.episode}`,
"image" : data.podcast.image || data.image
}

21644
content/transcripts/ep15.srt Normal file

File diff suppressed because it is too large Load Diff

5860
content/transcripts/ep16.srt Normal file

File diff suppressed because it is too large Load Diff

16916
content/transcripts/ep17.srt Normal file

File diff suppressed because it is too large Load Diff

18356
content/transcripts/ep18.srt Normal file

File diff suppressed because it is too large Load Diff

13868
content/transcripts/ep19.srt Normal file

File diff suppressed because it is too large Load Diff

14520
content/transcripts/ep20.srt Normal file

File diff suppressed because it is too large Load Diff

21224
content/transcripts/ep21.srt Normal file

File diff suppressed because it is too large Load Diff

4688
content/transcripts/ep22.srt Normal file

File diff suppressed because it is too large Load Diff

14896
content/transcripts/ep23.srt Normal file

File diff suppressed because it is too large Load Diff

11280
content/transcripts/ep24.srt Normal file

File diff suppressed because it is too large Load Diff

17964
content/transcripts/ep25.srt Normal file

File diff suppressed because it is too large Load Diff

4236
content/transcripts/ep26.srt Normal file

File diff suppressed because it is too large Load Diff

16344
content/transcripts/ep27.srt Normal file

File diff suppressed because it is too large Load Diff

8880
content/transcripts/ep28.srt Normal file

File diff suppressed because it is too large Load Diff

13256
content/transcripts/ep29.srt Normal file

File diff suppressed because it is too large Load Diff

19660
content/transcripts/ep30.srt Normal file

File diff suppressed because it is too large Load Diff

22708
content/transcripts/ep31.srt Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

13120
content/transcripts/ep32.srt Normal file

File diff suppressed because it is too large Load Diff

13324
content/transcripts/ep33.srt Normal file

File diff suppressed because it is too large Load Diff

14216
content/transcripts/ep34.srt Normal file

File diff suppressed because it is too large Load Diff

16560
content/transcripts/ep35.srt Normal file

File diff suppressed because it is too large Load Diff

14132
content/transcripts/ep36.srt Normal file

File diff suppressed because it is too large Load Diff

17880
content/transcripts/ep37.srt Normal file

File diff suppressed because it is too large Load Diff

9708
content/transcripts/ep38.srt Normal file

File diff suppressed because it is too large Load Diff

11744
content/transcripts/ep39.srt Normal file

File diff suppressed because it is too large Load Diff

10464
content/transcripts/ep40.srt Normal file

File diff suppressed because it is too large Load Diff

9612
content/transcripts/ep41.srt Normal file

File diff suppressed because it is too large Load Diff

8548
content/transcripts/ep42.srt Normal file

File diff suppressed because it is too large Load Diff

11428
content/transcripts/ep43.srt Normal file

File diff suppressed because it is too large Load Diff

12316
content/transcripts/ep44.srt Normal file

File diff suppressed because it is too large Load Diff

10372
content/transcripts/ep45.srt Normal file

File diff suppressed because it is too large Load Diff

30728
content/transcripts/ep46.srt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,15 @@
---
eleventyExcludeFromCollections: ['transcript']
layout: base
---
<div>
{{#each (sort collections.transcript)}}
<div class="card m-2">
<div class="card-body">
<div class="card-title">
<h4><a href="{{this.url}}">{{this.url}}</a></h4>
</div>
</div>
</div>
{{/each}}
</div>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

17800
content/transcripts/s03e02.srt Normal file

File diff suppressed because it is too large Load Diff

11384
content/transcripts/s03e03.srt Normal file

File diff suppressed because it is too large Load Diff

20212
content/transcripts/s03e04.srt Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

16428
content/transcripts/s03e07.srt Normal file

File diff suppressed because it is too large Load Diff

16068
content/transcripts/s03e08.srt Normal file

File diff suppressed because it is too large Load Diff

16044
content/transcripts/s03e09.srt Normal file

File diff suppressed because it is too large Load Diff

11072
content/transcripts/s03e10.srt Normal file

File diff suppressed because it is too large Load Diff

16116
content/transcripts/s03e11.srt Normal file

File diff suppressed because it is too large Load Diff

14876
content/transcripts/s03e12.srt Normal file

File diff suppressed because it is too large Load Diff

12568
content/transcripts/s03e13.srt Normal file

File diff suppressed because it is too large Load Diff

11520
content/transcripts/s03e14.srt Normal file

File diff suppressed because it is too large Load Diff

19524
content/transcripts/s03e15.srt Normal file

File diff suppressed because it is too large Load Diff

13512
content/transcripts/s03e16.srt Normal file

File diff suppressed because it is too large Load Diff

10668
content/transcripts/s03e17.srt Normal file

File diff suppressed because it is too large Load Diff

19620
content/transcripts/s03e18.srt Normal file

File diff suppressed because it is too large Load Diff

12412
content/transcripts/s03e19.srt Normal file

File diff suppressed because it is too large Load Diff

15988
content/transcripts/s03e20.srt Normal file

File diff suppressed because it is too large Load Diff

29264
content/transcripts/s04e47.srt Normal file

File diff suppressed because it is too large Load Diff

23604
content/transcripts/s04e48.srt Normal file

File diff suppressed because it is too large Load Diff

19224
content/transcripts/s04e49.srt Normal file

File diff suppressed because it is too large Load Diff

22596
content/transcripts/s04e50.srt Normal file

File diff suppressed because it is too large Load Diff

19268
content/transcripts/s04e51.srt Normal file

File diff suppressed because it is too large Load Diff

16372
content/transcripts/s04e52.srt Normal file

File diff suppressed because it is too large Load Diff

17676
content/transcripts/s04e53.srt Normal file

File diff suppressed because it is too large Load Diff

28872
content/transcripts/s04e54.srt Normal file

File diff suppressed because it is too large Load Diff

13792
content/transcripts/s04e55.srt Normal file

File diff suppressed because it is too large Load Diff

28332
content/transcripts/s04e56.srt Normal file

File diff suppressed because it is too large Load Diff

38192
content/transcripts/s04e57.srt Normal file

File diff suppressed because it is too large Load Diff

11560
content/transcripts/s05e21.srt Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

11360
content/transcripts/s05e23.srt Normal file

File diff suppressed because it is too large Load Diff

12760
content/transcripts/s05e24.srt Normal file

File diff suppressed because it is too large Load Diff

11408
content/transcripts/s05e25.srt Normal file

File diff suppressed because it is too large Load Diff

9192
content/transcripts/s05e26.srt Executable file

File diff suppressed because it is too large Load Diff

7760
content/transcripts/s05e27.srt Executable file

File diff suppressed because it is too large Load Diff

14832
content/transcripts/s05e28.srt Executable file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
{
"tags":["transcript"]
}

View File

@@ -12,7 +12,7 @@ eleventyComputed:
<date>{{formatDate this.date "MMMM d, yyyy"}}</date><br>
{{#if podcast}}
<a href="{{{podcast.enclosureUrl}}}">Download</a>
{{#if podcast.transcriptUrl}}| <a href="{{{podcast.transcriptUrl}}}">Transcript</a>{{/if}}
{{#if podcast.transcriptPage}}| <a href="{{{podcast.transcriptPage}}}">Transcript</a>{{/if}}
<div>
<audio controls>

11
layouts/transcript.hbs Normal file
View File

@@ -0,0 +1,11 @@
---
layout: base
---
<script>
{{{content}}}
</script>
{{#each transcript}}
<div>
{{formatDuration this.data.start "hh:mm:ss"}}: {{this.data.text}}
</div>
{{/each}}

102
package-lock.json generated
View File

@@ -27,7 +27,8 @@
"music-metadata": "^10.5.1",
"npx": "^10.2.2",
"podcast": "^2.0.1",
"sass": "^1.80.3"
"sass": "^1.80.3",
"subtitle": "^4.2.1"
}
},
"node_modules/@11ty/eleventy-fetch": {
@@ -468,6 +469,24 @@
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
"integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
},
"node_modules/@types/multipipe": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/multipipe/-/multipipe-3.0.5.tgz",
"integrity": "sha512-mHBbV67bsmUtLtio0gj/GPzGsjv+Y6K1ff/48iR6YAfFfLkBtRIR0M5lZPbkMCyHGrCZM9p3VNnfY1QCws4t4w==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/node": {
"version": "22.10.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz",
"integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.20.0"
}
},
"node_modules/ansi-bgblack": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz",
@@ -1494,6 +1513,15 @@
"url": "https://dotenvx.com"
}
},
"node_modules/duplexer2": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
"integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
"license": "BSD-3-Clause",
"dependencies": {
"readable-stream": "^2.0.2"
}
},
"node_modules/ent": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz",
@@ -2962,6 +2990,16 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/multipipe": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/multipipe/-/multipipe-4.0.0.tgz",
"integrity": "sha512-jzcEAzFXoWwWwUbvHCNPwBlTz3WCWe/jPcXSmTfbo/VjRwRTfvLZ/bdvtiTdqCe8d4otCSsPCbhGYcX+eggpKQ==",
"license": "MIT",
"dependencies": {
"duplexer2": "^0.1.2",
"object-assign": "^4.1.0"
}
},
"node_modules/music-metadata": {
"version": "10.5.1",
"resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-10.5.1.tgz",
@@ -7639,6 +7677,15 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
@@ -8486,6 +8533,29 @@
"node": ">=0.10.0"
}
},
"node_modules/split2": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
"integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
"license": "ISC",
"dependencies": {
"readable-stream": "^3.0.0"
}
},
"node_modules/split2/node_modules/readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -8539,6 +8609,15 @@
"safe-buffer": "~5.1.0"
}
},
"node_modules/strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/striptags": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz",
@@ -8561,6 +8640,21 @@
"url": "https://github.com/sponsors/Borewit"
}
},
"node_modules/subtitle": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/subtitle/-/subtitle-4.2.1.tgz",
"integrity": "sha512-ohV7DcQAYjoO8SDTZHaD912g6K+JktbLERlkZyuoNWSXboOOdIvuriF4fZC0T6lbVeiqLfR8mmw3CxIJ5+UTuw==",
"license": "MIT",
"dependencies": {
"@types/multipipe": "^3.0.0",
"multipipe": "^4.0.0",
"split2": "^3.2.2",
"strip-bom": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/success-symbol": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz",
@@ -8753,6 +8847,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/undici-types": {
"version": "6.20.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
"license": "MIT"
},
"node_modules/union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",

View File

@@ -30,6 +30,7 @@
"music-metadata": "^10.5.1",
"npx": "^10.2.2",
"podcast": "^2.0.1",
"sass": "^1.80.3"
"sass": "^1.80.3",
"subtitle": "^4.2.1"
}
}

View File

@@ -1,4 +1,4 @@
const { DateTime } = require("luxon");
const { DateTime, Duration } = require("luxon");
module.exports = {
seasonEpisodeFormat: (_, {
@@ -61,6 +61,9 @@ module.exports = {
formatDate: (date, format = "MMMM d, yyyy") => {
return DateTime.fromJSDate(new Date(date)).toFormat(format);
},
formatDuration: (milliseconds, format = "hh:mm:ss") => {
return Duration.fromMillis(milliseconds).toFormat(format);
},
episodeNumber: (s, episode) => {
return episode ? Number(episode) : Number(s.replace(/[^0-9]/,''))
}