diff --git a/.gitignore b/.gitignore index a6358c3..122dded 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,10 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +build + +# Add to .gitignore +public/video-cache/ +public/videos/ +public/audios \ No newline at end of file diff --git a/README.md b/README.md index 3aabf0d..8228e1e 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,11 @@ use cli rendering instead of ssr ` npx remotion render remotion/index.ts MyVideo output.mp4 ` +new +` +node -p "JSON.stringify({captions:require('./remotion/captions/captions-1769673372841.json')})" > props.json && \ +npx remotion render remotion/index.ts MyVideo output.mp4 --props=props.json +` - runs directly in node.js - bypasses next.js completely - bundling and rendering work without errors diff --git a/app/actions/generate-audio.ts b/app/actions/generate-audio.ts index 9331a3a..f873892 100644 --- a/app/actions/generate-audio.ts +++ b/app/actions/generate-audio.ts @@ -4,6 +4,7 @@ import { elevenlabs } from '@ai-sdk/elevenlabs'; import { experimental_generateSpeech as generateSpeech} from "ai" import { writeFile } from 'fs/promises'; import path from 'path'; +import { mp3ToWav } from './mp3-16k_wav'; export async function generateAudio(cleanedStory: string){ // const rawText = await generateStory(genre) @@ -14,7 +15,7 @@ export async function generateAudio(cleanedStory: string){ model: elevenlabs.speech('eleven_flash_v2'), text: cleanedStory, voice: "cgSgspJ2msm6clMCkdW9", - outputFormat: "pcm_16000", + outputFormat: "mp3", providerOptions: { elevenlabs: { voiceSettings: { @@ -27,10 +28,14 @@ export async function generateAudio(cleanedStory: string){ }) const buffer = Buffer.from(result.audio.base64, "base64"); - const fileName = `story-${Date.now()}.${result.audio.format}`; - const filePath = path.join(process.cwd(), "public/audios", fileName); + + const baseName = `story-${Date.now()}`; + const mp3Path = path.join(process.cwd(), "public/audios", `${baseName}.mp3`); + const wavPath = path.join(process.cwd(), "public/audios", `${baseName}_16k.wav`); - await writeFile(filePath, buffer); + await writeFile(mp3Path, buffer); + + await mp3ToWav(mp3Path, wavPath); return { @@ -39,7 +44,7 @@ export async function generateAudio(cleanedStory: string){ format: result.audio.format, mediaType: result.audio.mediaType, uint8Array: result.audio.uint8Array, - url: `/audios/${fileName}` + url: `/audios/${baseName}_16k.wav`, }, metadata: result.providerMetadata } diff --git a/app/actions/mp3-16k_wav.ts b/app/actions/mp3-16k_wav.ts new file mode 100644 index 0000000..e2fda92 --- /dev/null +++ b/app/actions/mp3-16k_wav.ts @@ -0,0 +1,17 @@ +"use server" + +import { execFile } from "child_process"; +import { promisify } from "util"; + +const execFileAsync = promisify(execFile); + +export async function mp3ToWav(mp3Path: string, wavPath: string) { + await execFileAsync("ffmpeg", [ + "-y", + "-i", mp3Path, + "-ac", "1", + "-ar", "16000", + "-c:a", "pcm_s16le", + wavPath, + ]); +} \ No newline at end of file diff --git a/app/api/render-video/route.ts b/app/api/render-video/route.ts new file mode 100644 index 0000000..22b77ef --- /dev/null +++ b/app/api/render-video/route.ts @@ -0,0 +1,102 @@ +// app/api/render-video/route.ts +import { renderMedia, selectComposition } from "@remotion/renderer"; +import path from "path"; +import fs from "fs"; +import type { Caption } from "@remotion/captions"; +import { cleanOldCache, getCachedVideo } from "@/lib/video-cache"; + +export async function POST(request: Request) { + const renderData = await request.json(); + + // load captions + let captions: Caption[] = []; + if (renderData.captionsPath) { + try { + const captionsFullPath = path.join(process.cwd(), renderData.captionsPath); + const captionsContent = fs.readFileSync(captionsFullPath, "utf-8"); + captions = JSON.parse(captionsContent); + } catch (error) { + console.error("Error loading captions:", error); + return Response.json( + { success: false, error: "Failed to load captions" }, + { status: 500 } + ); + } + } + + // Download and cache background video if it's from Cloudinary + let videoUrl = renderData.videoUrl; + if (videoUrl && videoUrl.includes("cloudinary.com")) { + try { + videoUrl = await getCachedVideo(videoUrl); + console.log("Using cached video:", videoUrl); + } catch (error) { + console.error("Failed to cache video:", error); + return Response.json( + { success: false, error: "Failed to download background video" }, + { status: 500 } + ); + } + } + + // Create the final input props + const inputProps = { + hook: renderData.hook, + story: renderData.story, + audioUrl: renderData.audioUrl, + videoUrl: videoUrl, // Use cached local path + highlightColor: renderData.highlightColor, + captions: captions, + }; + +const bundleLocation = path.join(process.cwd(), "build"); + const outputDir = path.join(process.cwd(), "public", "videos"); + + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); + } + + try { + const composition = await selectComposition({ + serveUrl: bundleLocation, + id: "MyVideo", + inputProps: inputProps, + timeoutInMilliseconds: 60000, + }); + + const lastCaptionEndMs = captions.length + ? Math.max(...captions.map(c => c.endMs)) + : 2000; + +const durationInFrames = Math.ceil((lastCaptionEndMs / 1000) * 30); + +// override duration +composition.durationInFrames = durationInFrames; + + + const outputPath = path.join(outputDir, `story-${Date.now()}.mp4`); + + await renderMedia({ + composition, + serveUrl: bundleLocation, + codec: "h264", + outputLocation: outputPath, + inputProps: inputProps, + timeoutInMilliseconds: 300000, + }); + + // Clean old cache after successful render + cleanOldCache(7); + + return Response.json({ + success: true, + videoPath: `/videos/${path.basename(outputPath)}`, + }); + } catch (error) { + console.error("Rendering error:", error); + return Response.json( + { success: false, error: "Failed to render video" }, + { status: 500 } + ); + } +} \ No newline at end of file diff --git a/app/page.tsx b/app/page.tsx index ed221c7..31dbe0a 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,16 +1,31 @@ +import { RenderButton } from "@/components/render-button"; import ChooseHighlightColor from "@/components/screens/choose-highlight-color"; import ChooseBGVideo from "@/components/screens/choose-stock-bg"; import GenerateAudio from "@/components/screens/generate-audio-screen"; +import GenerateCaptions from "@/components/screens/generate-captions-screen"; import ScriptGenerator from "@/components/screens/script-generator"; export default function Page() { return (
+ + {/* correct */} + + {/* correct */} + + {/* incorrect, captions are getting generated manually r9*/} + + + {/* correct */} + + {/* correct */} + +
); } diff --git a/components/render-button.tsx b/components/render-button.tsx new file mode 100644 index 0000000..b8a879a --- /dev/null +++ b/components/render-button.tsx @@ -0,0 +1,35 @@ +'use client'; + +import { useVideoStoryStore } from '@/store/useVideoStoryStore'; +import { useState } from 'react'; +import { Button } from './ui/button'; + +export function RenderButton() { + const [isRendering, setIsRendering] = useState(false); + const getRenderData = useVideoStoryStore(state => state.getRenderData); + + const handleRender = async () => { + setIsRendering(true); + + // get plain json from zustand + const renderData = getRenderData(); + + // send to /api/render-video + const response = await fetch('/api/render-video', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(renderData) // <-- this is plain json data no zustand + }); + + const result = await response.json(); + console.log('Video rendered:', result.videoPath); + + setIsRendering(false); + }; + + return ( + + ); +} \ No newline at end of file diff --git a/components/screens/generate-captions-screen.tsx b/components/screens/generate-captions-screen.tsx new file mode 100644 index 0000000..f9f0394 --- /dev/null +++ b/components/screens/generate-captions-screen.tsx @@ -0,0 +1,53 @@ +"use client"; + +import { useVideoStoryStore } from "@/store/useVideoStoryStore"; +import { useState } from "react"; +import { toast } from "sonner"; +import { Button } from "../ui/button"; +import { generateCaptions } from "@/remotion/scripts/generate-captions"; + +export default function GenerateCaptions() { + const { audioUrl, setCaptionsPath, captionsPath } = useVideoStoryStore(); + const [loading, setLoading] = useState(false); + + const handleGenerateCaptions = async () => { + if (!audioUrl) { + toast.error("Generate audio first"); + return; + } + + setLoading(true); + try { + const { captionsPath } = await generateCaptions(`public/${audioUrl}`); + setCaptionsPath(captionsPath); + } catch { + toast.error("Failed to generate captions"); + } finally { + setLoading(false); + } + }; + + return ( +
+ Generate captions + + {audioUrl ? ( + + ) : ( +

Generate audio first

+ )} + + {captionsPath && ( +

+ Captions saved at: {captionsPath} +

+ )} +
+ ); +} diff --git a/lib/getCaptions.ts b/lib/getCaptions.ts index ac9e1ef..28f9670 100644 --- a/lib/getCaptions.ts +++ b/lib/getCaptions.ts @@ -1,18 +1,37 @@ +"use server" + import { toCaptions, transcribe } from "@remotion/install-whisper-cpp"; import path from "path"; +import fs from "fs"; + +export async function getCaptions(audioPath: string) { + const inputPath = path.isAbsolute(audioPath) + ? audioPath + : path.join(process.cwd(), audioPath); -export async function getCaptions() { const whisperCppOutput = await transcribe({ - inputPath: path.join(process.cwd(), "public/audios/audio_16k.wav"), + inputPath, whisperPath: path.join(process.cwd(), "whisper.cpp"), whisperCppVersion: "1.5.5", model: "medium.en", tokenLevelTimestamps: true, }); - const { captions } = toCaptions({ - whisperCppOutput, - }); + const { captions } = toCaptions({ whisperCppOutput }); + + const fileName = `captions-${Date.now()}.json`; + + const captionsDir = path.join(process.cwd(), "remotion/captions"); + if (!fs.existsSync(captionsDir)) { + fs.mkdirSync(captionsDir, { recursive: true }); + } + + const captionsPath = path.join(captionsDir, fileName); + + fs.writeFileSync(captionsPath, JSON.stringify(captions, null, 2)); - return captions; -} + + return { + captionsPath: `remotion/captions/${fileName}`, + }; +} \ No newline at end of file diff --git a/lib/video-cache.ts b/lib/video-cache.ts new file mode 100644 index 0000000..2bb0421 --- /dev/null +++ b/lib/video-cache.ts @@ -0,0 +1,56 @@ +// lib/videoCache.ts +import fs from "fs"; +import path from "path"; +import crypto from "crypto"; + +const CACHE_DIR = path.join(process.cwd(), "public", "video-cache"); + +// Ensure cache directory exists +if (!fs.existsSync(CACHE_DIR)) { + fs.mkdirSync(CACHE_DIR, { recursive: true }); +} + +export async function getCachedVideo(cloudinaryUrl: string): Promise { + // Create a hash of the URL to use as filename + const urlHash = crypto.createHash("md5").update(cloudinaryUrl).digest("hex"); + const cachedPath = path.join(CACHE_DIR, `${urlHash}.mp4`); + const relativePath = `video-cache/${urlHash}.mp4`; + + // Check if already cached + if (fs.existsSync(cachedPath)) { + console.log("Video found in cache:", relativePath); + return relativePath; + } + + // Download from Cloudinary + console.log("Downloading video from Cloudinary..."); + const response = await fetch(cloudinaryUrl); + + if (!response.ok) { + throw new Error(`Failed to download video: ${response.statusText}`); + } + + const buffer = await response.arrayBuffer(); + fs.writeFileSync(cachedPath, Buffer.from(buffer)); + + console.log("Video cached successfully:", relativePath); + return relativePath; +} + +// Optional: Clean up old cache files (older than 7 days) +export function cleanOldCache(daysOld = 7) { + const files = fs.readdirSync(CACHE_DIR); + const now = Date.now(); + const maxAge = daysOld * 24 * 60 * 60 * 1000; + + files.forEach((file) => { + const filePath = path.join(CACHE_DIR, file); + const stats = fs.statSync(filePath); + const age = now - stats.mtimeMs; + + if (age > maxAge) { + fs.unlinkSync(filePath); + console.log(`Deleted old cache: ${file}`); + } + }); +} \ No newline at end of file diff --git a/package.json b/package.json index 72792f0..a4b3803 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "start": "next start", "lint": "eslint", "remotion studio": "npx remotion studio remotion/index.ts", - "render-video": "npx remotion render remotion/index.ts MyVideo public/videos/output-$(date +%s).mp4" + "bundle-remotion": "remotion bundle remotion/index.ts --bundle-dir=public/remotion-bundle", + "download-whisper-model-tiny-en": "node remotion/scripts/download-whisper.mjs" }, "dependencies": { "@ai-sdk/elevenlabs": "^2.0.8", diff --git a/props.json b/props.json new file mode 100644 index 0000000..b59a33e --- /dev/null +++ b/props.json @@ -0,0 +1 @@ +{"captions":[{"text":"My","startMs":30,"endMs":120,"timestampMs":180,"confidence":0.908703},{"text":" sister","startMs":120,"endMs":490,"timestampMs":500,"confidence":0.9983},{"text":" stole","startMs":490,"endMs":800,"timestampMs":820,"confidence":0.99803},{"text":" my","startMs":800,"endMs":920,"timestampMs":1060,"confidence":0.999195},{"text":" wedding","startMs":920,"endMs":1340,"timestampMs":1280,"confidence":0.999157},{"text":" dress","startMs":1340,"endMs":1660,"timestampMs":1720,"confidence":0.999253},{"text":".","startMs":1660,"endMs":1880,"timestampMs":4600,"confidence":0.972292},{"text":" I","startMs":1880,"endMs":2170,"timestampMs":4740,"confidence":0.970458},{"text":" am","startMs":2170,"endMs":4630,"timestampMs":4920,"confidence":0.992888},{"text":" furious","startMs":4630,"endMs":4770,"timestampMs":5400,"confidence":0.995949},{"text":".","startMs":4770,"endMs":5640,"timestampMs":5780,"confidence":0.748954},{"text":" My","startMs":5640,"endMs":5770,"timestampMs":5860,"confidence":0.999054},{"text":" younger","startMs":5770,"endMs":6230,"timestampMs":6100,"confidence":0.999592},{"text":" sister","startMs":6230,"endMs":6630,"timestampMs":6600,"confidence":0.999607},{"text":",","startMs":6630,"endMs":6840,"timestampMs":6900,"confidence":0.743727},{"text":" always","startMs":6840,"endMs":7180,"timestampMs":7100,"confidence":0.937627},{"text":" competing","startMs":7180,"endMs":7800,"timestampMs":7580,"confidence":0.997687},{"text":",","startMs":7800,"endMs":7800,"timestampMs":7920,"confidence":0.960686},{"text":" just","startMs":7800,"endMs":8060,"timestampMs":8040,"confidence":0.999485},{"text":" announced","startMs":8060,"endMs":8630,"timestampMs":8400,"confidence":0.999169},{"text":" her","startMs":8630,"endMs":8810,"timestampMs":8580,"confidence":0.998708},{"text":" engagement","startMs":8810,"endMs":9680,"timestampMs":9000,"confidence":0.999794},{"text":".","startMs":9680,"endMs":9680,"timestampMs":9740,"confidence":0.988576},{"text":" Her","startMs":9680,"endMs":9910,"timestampMs":9860,"confidence":0.998471},{"text":" dream","startMs":9910,"endMs":10290,"timestampMs":10200,"confidence":0.995372},{"text":" wedding","startMs":10290,"endMs":10830,"timestampMs":10440,"confidence":0.998186},{"text":" dress","startMs":10830,"endMs":11210,"timestampMs":10760,"confidence":0.999622},{"text":" is","startMs":11210,"endMs":11360,"timestampMs":10940,"confidence":0.986109},{"text":" my","startMs":11360,"endMs":11510,"timestampMs":11120,"confidence":0.999546},{"text":" exact","startMs":11510,"endMs":11890,"timestampMs":11440,"confidence":0.999729},{"text":" design","startMs":11890,"endMs":12640,"timestampMs":11880,"confidence":0.999813},{"text":".","startMs":12640,"endMs":12640,"timestampMs":12680,"confidence":0.997687},{"text":" For","startMs":12640,"endMs":12890,"timestampMs":12820,"confidence":0.999722},{"text":" years","startMs":12890,"endMs":13310,"timestampMs":13160,"confidence":0.99976},{"text":",","startMs":13310,"endMs":13480,"timestampMs":13280,"confidence":0.816827},{"text":" I","startMs":13480,"endMs":13490,"timestampMs":13360,"confidence":0.955837},{"text":" shared","startMs":13490,"endMs":13620,"timestampMs":13600,"confidence":0.995984},{"text":" my","startMs":13620,"endMs":13710,"timestampMs":13760,"confidence":0.984639},{"text":" perfect","startMs":13710,"endMs":14180,"timestampMs":14140,"confidence":0.996219},{"text":" gown","startMs":14180,"endMs":14310,"timestampMs":14380,"confidence":0.995889},{"text":" sketches","startMs":14310,"endMs":14810,"timestampMs":14680,"confidence":0.991673},{"text":" with","startMs":14810,"endMs":15120,"timestampMs":14920,"confidence":0.91811},{"text":" her","startMs":15120,"endMs":15400,"timestampMs":15160,"confidence":0.9995},{"text":",","startMs":15400,"endMs":15400,"timestampMs":15540,"confidence":0.915926},{"text":" trusting","startMs":15400,"endMs":16090,"timestampMs":15780,"confidence":0.998091},{"text":" her","startMs":16090,"endMs":16880,"timestampMs":16100,"confidence":0.999718},{"text":".","startMs":16880,"endMs":16880,"timestampMs":16880,"confidence":0.977969},{"text":" I","startMs":16880,"endMs":16950,"timestampMs":17020,"confidence":0.999928},{"text":" described","startMs":16950,"endMs":17600,"timestampMs":17380,"confidence":0.998452},{"text":" its","startMs":17600,"endMs":17870,"timestampMs":17540,"confidence":0.957233},{"text":" unique","startMs":17870,"endMs":18240,"timestampMs":17820,"confidence":0.999588},{"text":" lace","startMs":18240,"endMs":18520,"timestampMs":18140,"confidence":0.998108},{"text":" and","startMs":18520,"endMs":18730,"timestampMs":18400,"confidence":0.989383},{"text":" silhouette","startMs":18730,"endMs":19700,"timestampMs":18760,"confidence":0.999382},{"text":".","startMs":19700,"endMs":19700,"timestampMs":19660,"confidence":0.994731},{"text":" Now","startMs":19700,"endMs":19950,"timestampMs":19900,"confidence":0.999661},{"text":" she","startMs":19950,"endMs":20200,"timestampMs":20080,"confidence":0.876849},{"text":" claims","startMs":20200,"endMs":20710,"timestampMs":20380,"confidence":0.99883},{"text":" the","startMs":20710,"endMs":20950,"timestampMs":20560,"confidence":0.997406},{"text":" idea","startMs":20950,"endMs":21300,"timestampMs":20800,"confidence":0.99958},{"text":" is","startMs":21300,"endMs":21460,"timestampMs":21040,"confidence":0.99899},{"text":" hers","startMs":21460,"endMs":22100,"timestampMs":21360,"confidence":0.998304},{"text":".","startMs":22100,"endMs":22100,"timestampMs":22060,"confidence":0.991696},{"text":" She","startMs":22100,"endMs":22300,"timestampMs":22300,"confidence":0.999554},{"text":" denies","startMs":22300,"endMs":22820,"timestampMs":22600,"confidence":0.999192},{"text":" seeing","startMs":22820,"endMs":23120,"timestampMs":22940,"confidence":0.999207},{"text":" my","startMs":23120,"endMs":23270,"timestampMs":23160,"confidence":0.999744},{"text":" designs","startMs":23270,"endMs":23760,"timestampMs":23640,"confidence":0.999611},{"text":",","startMs":23760,"endMs":23760,"timestampMs":23700,"confidence":0.807808},{"text":" even","startMs":23760,"endMs":24010,"timestampMs":24000,"confidence":0.999386},{"text":" when","startMs":24010,"endMs":24260,"timestampMs":24160,"confidence":0.999413},{"text":" our","startMs":24260,"endMs":24440,"timestampMs":24320,"confidence":0.992559},{"text":" mother","startMs":24440,"endMs":24800,"timestampMs":24500,"confidence":0.997995},{"text":" reminded","startMs":24800,"endMs":25490,"timestampMs":24860,"confidence":0.999542},{"text":" her","startMs":25490,"endMs":25720,"timestampMs":25180,"confidence":0.999703},{"text":".","startMs":25720,"endMs":25720,"timestampMs":25800,"confidence":0.860285},{"text":" Mom","startMs":25720,"endMs":26020,"timestampMs":25960,"confidence":0.995287},{"text":" wants","startMs":26020,"endMs":26520,"timestampMs":26200,"confidence":0.999153},{"text":" peace","startMs":26520,"endMs":27320,"timestampMs":26660,"confidence":0.995148},{"text":".","startMs":27320,"endMs":27320,"timestampMs":27320,"confidence":0.969518},{"text":" This","startMs":27320,"endMs":27620,"timestampMs":27540,"confidence":0.996333},{"text":" betrayal","startMs":27620,"endMs":28210,"timestampMs":27840,"confidence":0.963931},{"text":" is","startMs":28210,"endMs":28360,"timestampMs":28080,"confidence":0.99955},{"text":" painful","startMs":28360,"endMs":29120,"timestampMs":28460,"confidence":0.999844},{"text":".","startMs":29120,"endMs":29120,"timestampMs":29080,"confidence":0.990705},{"text":" It","startMs":29160,"endMs":29370,"timestampMs":29280,"confidence":0.999077},{"text":" symbol","startMs":29370,"endMs":29660,"timestampMs":29580,"confidence":0.99951},{"text":"izes","startMs":29660,"endMs":29940,"timestampMs":29840,"confidence":0.9895},{"text":" her","startMs":29940,"endMs":30130,"timestampMs":30040,"confidence":0.999329},{"text":" need","startMs":30130,"endMs":30400,"timestampMs":30260,"confidence":0.999203},{"text":" to","startMs":30400,"endMs":30530,"timestampMs":30460,"confidence":0.993995},{"text":" diminish","startMs":30530,"endMs":31080,"timestampMs":30740,"confidence":0.999291},{"text":" me","startMs":31080,"endMs":31400,"timestampMs":31140,"confidence":0.998224},{"text":",","startMs":31400,"endMs":31400,"timestampMs":31440,"confidence":0.926698},{"text":" stealing","startMs":31400,"endMs":32140,"timestampMs":31740,"confidence":0.996668},{"text":" my","startMs":32140,"endMs":32320,"timestampMs":31960,"confidence":0.999752},{"text":" future","startMs":32320,"endMs":33160,"timestampMs":32300,"confidence":0.999912},{"text":".","startMs":33160,"endMs":33160,"timestampMs":33160,"confidence":0.996953},{"text":" I","startMs":33160,"endMs":33230,"timestampMs":33280,"confidence":0.99992},{"text":" want","startMs":33230,"endMs":33550,"timestampMs":33400,"confidence":0.849308},{"text":" to","startMs":33550,"endMs":33690,"timestampMs":33520,"confidence":0.999588},{"text":" expose","startMs":33690,"endMs":34170,"timestampMs":33800,"confidence":0.999744},{"text":" her","startMs":34170,"endMs":34380,"timestampMs":34020,"confidence":0.999455},{"text":" publicly","startMs":34380,"endMs":35260,"timestampMs":34420,"confidence":0.998289},{"text":".","startMs":35260,"endMs":35260,"timestampMs":35260,"confidence":0.996729},{"text":" Should","startMs":35260,"endMs":35670,"timestampMs":35400,"confidence":0.999058},{"text":" I","startMs":35670,"endMs":35780,"timestampMs":35540,"confidence":0.99958},{"text":" let","startMs":35780,"endMs":35930,"timestampMs":35640,"confidence":0.999432},{"text":" it","startMs":35930,"endMs":36060,"timestampMs":35760,"confidence":0.999096},{"text":" go","startMs":36060,"endMs":36240,"timestampMs":36060,"confidence":0.999851},{"text":" or","startMs":36240,"endMs":36320,"timestampMs":36360,"confidence":0.250181},{"text":" would","startMs":36320,"endMs":36570,"timestampMs":36500,"confidence":0.991151},{"text":" I","startMs":36570,"endMs":36620,"timestampMs":36600,"confidence":0.997554},{"text":" be","startMs":36620,"endMs":36740,"timestampMs":36740,"confidence":0.997995},{"text":" the","startMs":36740,"endMs":36910,"timestampMs":36920,"confidence":0.983558},{"text":" asshole","startMs":36910,"endMs":37320,"timestampMs":37180,"confidence":0.975612},{"text":" for","startMs":37320,"endMs":37520,"timestampMs":37400,"confidence":0.991212},{"text":" a","startMs":37520,"endMs":37540,"timestampMs":37560,"confidence":0.998605},{"text":" scene","startMs":37540,"endMs":37830,"timestampMs":37760,"confidence":0.999066},{"text":"?","startMs":37830,"endMs":38040,"timestampMs":38020,"confidence":0.987321}],"audioUrl":"/audios/story-1769672701663_16k.wav","hook":"My sister is getting married in a dress I designed for myself and I don't know what to do","highlightColor":"#FF4500","videoUrl":"https://res.cloudinary.com/dvqafp9v0/video/upload/v1769025840/minecraft-parkour-2_z75oy8.mp4"} diff --git a/public/videos/output-1769022297.mp4 b/public/videos/output-1769022297.mp4 deleted file mode 100644 index 9454102..0000000 Binary files a/public/videos/output-1769022297.mp4 and /dev/null differ diff --git a/remotion/CaptionText.tsx b/remotion/CaptionText.tsx index 8e8fd6f..ac90384 100644 --- a/remotion/CaptionText.tsx +++ b/remotion/CaptionText.tsx @@ -1,6 +1,3 @@ -"use client" - -import { useVideoStoryStore } from "@/store/useVideoStoryStore"; import { TikTokPage } from "@remotion/captions"; import { spring, @@ -8,14 +5,14 @@ import { useVideoConfig, } from "remotion"; - - export default function CaptionText({ page, fontFamily, + highlightColor, }: { page: TikTokPage; fontFamily: string; + highlightColor: string; }) { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); @@ -30,8 +27,6 @@ export default function CaptionText({ }, }); - const { highlightColor } = useVideoStoryStore(); - return (
); -} +} \ No newline at end of file diff --git a/remotion/Composition.tsx b/remotion/Composition.tsx index 2e3181b..453e6a9 100644 --- a/remotion/Composition.tsx +++ b/remotion/Composition.tsx @@ -1,12 +1,12 @@ import { AbsoluteFill, Audio, - Html5Audio, Sequence, spring, staticFile, useCurrentFrame, useVideoConfig, + OffthreadVideo, } from "remotion"; import { loadFont } from "@remotion/google-fonts/TikTokSans"; import { createTikTokStyleCaptions } from "@remotion/captions"; @@ -16,16 +16,26 @@ import RedditOverlay from "./RedditOverlay,"; type Props = { captions: Caption[]; + audioUrl: string; + hook: string; + highlightColor: string; + videoUrl?: string | null; }; -export const MyComposition: React.FC = ({ captions }) => { +// remotion/Composition.tsx +export const MyComposition: React.FC = ({ + captions, + audioUrl, + hook, + highlightColor, + videoUrl, +}) => { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); const { fontFamily } = loadFont(); const OVERLAY_DURATION = 15 * fps; - // pop in animation const pop = spring({ frame, fps, @@ -45,8 +55,31 @@ export const MyComposition: React.FC = ({ captions }) => { return ( - + {/* Background Video */} + {videoUrl && ( + + + + + )} + {/* Audio */} + ); -}; +}; \ No newline at end of file diff --git a/remotion/RedditOverlay,.tsx b/remotion/RedditOverlay,.tsx index 75cde18..db1af70 100644 --- a/remotion/RedditOverlay,.tsx +++ b/remotion/RedditOverlay,.tsx @@ -1,5 +1,3 @@ -"use client" - import React from "react"; import { Card, @@ -8,8 +6,7 @@ import { CardFooter, } from "../components/ui/card"; import { Avatar, AvatarImage } from "../components/ui/avatar"; -import { Heart, Share, CheckCircle2, VerifiedIcon } from "lucide-react"; -import { useVideoStoryStore } from "../store/useVideoStoryStore"; +import { Heart, Share, VerifiedIcon } from "lucide-react"; const BADGE_DATA = [ { @@ -32,23 +29,14 @@ const BADGE_DATA = [ }, ]; -const RedditOverlay = () => { - // Mock data for the award icons row - const awards = Array.from({ length: 10 }); - - const { hook } = useVideoStoryStore(); - - +const RedditOverlay = ({ hook }: { hook: string }) => { return ( - {/* Reddit Subreddit Icon */}
@@ -60,13 +48,11 @@ const RedditOverlay = () => { AskReddit - {/* Blue Verification Checkmark */}
- {/* Awards Row */}
{BADGE_DATA.map((badge) => (
{ - {/* Left Side: Vote/Heart Counter */}
99+
- {/* Right Side: Share Counter */}
99+ @@ -111,4 +95,4 @@ const RedditOverlay = () => { ); }; -export default RedditOverlay; +export default RedditOverlay; \ No newline at end of file diff --git a/remotion/Root.tsx b/remotion/Root.tsx index 3ea6012..8e71e2a 100644 --- a/remotion/Root.tsx +++ b/remotion/Root.tsx @@ -1,12 +1,43 @@ import { Composition } from "remotion"; import { MyComposition } from "./Composition"; -import captions from "./captions.json"; +import type { Caption } from "@remotion/captions"; const fps = 30; -const lastCaption = captions[captions.length - 1]; -const durationInFrames = Math.ceil((lastCaption.endMs / 1000) * fps); + +// matches the structure of Zustand store's getRenderData fnc +interface RenderInputProps { + hook: string; + story: string; + audioUrl: string; + videoUrl: string; + highlightColor: string; + captions: Caption[]; +} export const RemotionRoot: React.FC = () => { + // These will come from inputProps when rendering + // For now, set default values for preview + const defaultProps: RenderInputProps = { + hook: "What's your most embarrassing moment?", + story: "", + audioUrl: "audio.mp3", + videoUrl: "bg-video.mp4", + highlightColor: "#ff0000", + captions: [ + { + text: "Sample caption", + startMs: 0, + endMs: 2000, + timestampMs: 0, + confidence: 1, + }, + ], + }; + + // Calculate duration based on last caption + const lastCaption = defaultProps.captions[defaultProps.captions.length - 1]; + const durationInFrames = Math.ceil((lastCaption.endMs / 1000) * fps); + return ( { fps={fps} width={1080} height={1920} - defaultProps={{ captions }} + defaultProps={{ + captions: defaultProps.captions, + audioUrl: defaultProps.audioUrl, + hook: defaultProps.hook, + highlightColor: defaultProps.highlightColor, + videoUrl: defaultProps.videoUrl, + }} /> ); -}; +}; \ No newline at end of file diff --git a/remotion/captions.json b/remotion/captions.json deleted file mode 100644 index ff50344..0000000 --- a/remotion/captions.json +++ /dev/null @@ -1,4202 +0,0 @@ -[ - { - "text": "My", - "startMs": 70, - "endMs": 130, - "timestampMs": 240, - "confidence": 0.873624 - }, - { - "text": " kid", - "startMs": 130, - "endMs": 320, - "timestampMs": 420, - "confidence": 0.992695 - }, - { - "text": " keeps", - "startMs": 320, - "endMs": 660, - "timestampMs": 680, - "confidence": 0.998605 - }, - { - "text": " insisting", - "startMs": 660, - "endMs": 1240, - "timestampMs": 1120, - "confidence": 0.999127 - }, - { - "text": " I", - "startMs": 1240, - "endMs": 1300, - "timestampMs": 1300, - "confidence": 0.974479 - }, - { - "text": "'m", - "startMs": 1300, - "endMs": 1430, - "timestampMs": 1360, - "confidence": 0.978517 - }, - { - "text": " not", - "startMs": 1430, - "endMs": 1620, - "timestampMs": 1500, - "confidence": 0.998811 - }, - { - "text": " his", - "startMs": 1620, - "endMs": 1810, - "timestampMs": 1680, - "confidence": 0.997721 - }, - { - "text": " \"", - "startMs": 1810, - "endMs": 1870, - "timestampMs": 1900, - "confidence": 0.36924 - }, - { - "text": "hello", - "startMs": 1870, - "endMs": 2190, - "timestampMs": 1900, - "confidence": 0.298048 - }, - { - "text": " everyone", - "startMs": 2190, - "endMs": 3040, - "timestampMs": 2460, - "confidence": 0.67816 - }, - { - "text": ".\"", - "startMs": 3040, - "endMs": 3090, - "timestampMs": 2460, - "confidence": 0.590111 - }, - { - "text": " I", - "startMs": 3090, - "endMs": 3180, - "timestampMs": 3260, - "confidence": 0.51761 - }, - { - "text": " am", - "startMs": 3180, - "endMs": 3190, - "timestampMs": 3360, - "confidence": 0.750567 - }, - { - "text": " the", - "startMs": 3190, - "endMs": 3340, - "timestampMs": 3500, - "confidence": 0.990235 - }, - { - "text": " single", - "startMs": 3340, - "endMs": 3680, - "timestampMs": 3760, - "confidence": 0.992515 - }, - { - "text": " mom", - "startMs": 3680, - "endMs": 4000, - "timestampMs": 4040, - "confidence": 0.936842 - }, - { - "text": " of", - "startMs": 4000, - "endMs": 4120, - "timestampMs": 4160, - "confidence": 0.957722 - }, - { - "text": " an", - "startMs": 4120, - "endMs": 4240, - "timestampMs": 4320, - "confidence": 0.988299 - }, - { - "text": " only", - "startMs": 4240, - "endMs": 4560, - "timestampMs": 4540, - "confidence": 0.950644 - }, - { - "text": " child", - "startMs": 4560, - "endMs": 4800, - "timestampMs": 4900, - "confidence": 0.577602 - }, - { - "text": " who", - "startMs": 4800, - "endMs": 4950, - "timestampMs": 5080, - "confidence": 0.999455 - }, - { - "text": " just", - "startMs": 4950, - "endMs": 5150, - "timestampMs": 5280, - "confidence": 0.994879 - }, - { - "text": " recently", - "startMs": 5150, - "endMs": 5560, - "timestampMs": 5760, - "confidence": 0.999836 - }, - { - "text": " celebrated", - "startMs": 5560, - "endMs": 6080, - "timestampMs": 6280, - "confidence": 0.999622 - }, - { - "text": " his", - "startMs": 6080, - "endMs": 6230, - "timestampMs": 6520, - "confidence": 0.998936 - }, - { - "text": " seventh", - "startMs": 6230, - "endMs": 6590, - "timestampMs": 6760, - "confidence": 0.913013 - }, - { - "text": " birthday", - "startMs": 6590, - "endMs": 7070, - "timestampMs": 7180, - "confidence": 0.998239 - }, - { - "text": ".", - "startMs": 7070, - "endMs": 7200, - "timestampMs": 7960, - "confidence": 0.983442 - }, - { - "text": " His", - "startMs": 7200, - "endMs": 7970, - "timestampMs": 8100, - "confidence": 0.983295 - }, - { - "text": " name", - "startMs": 7970, - "endMs": 7990, - "timestampMs": 8260, - "confidence": 0.999706 - }, - { - "text": " is", - "startMs": 7990, - "endMs": 8190, - "timestampMs": 8520, - "confidence": 0.999214 - }, - { - "text": " Jackson", - "startMs": 8190, - "endMs": 8960, - "timestampMs": 8860, - "confidence": 0.985522 - }, - { - "text": ",", - "startMs": 8960, - "endMs": 9360, - "timestampMs": 9320, - "confidence": 0.723735 - }, - { - "text": " and", - "startMs": 9360, - "endMs": 9480, - "timestampMs": 9460, - "confidence": 0.975394 - }, - { - "text": " his", - "startMs": 9480, - "endMs": 9780, - "timestampMs": 9600, - "confidence": 0.994215 - }, - { - "text": " entire", - "startMs": 9780, - "endMs": 10310, - "timestampMs": 9940, - "confidence": 0.998015 - }, - { - "text": " life", - "startMs": 10310, - "endMs": 10420, - "timestampMs": 10360, - "confidence": 0.991639 - }, - { - "text": ",", - "startMs": 10420, - "endMs": 10720, - "timestampMs": 10760, - "confidence": 0.854598 - }, - { - "text": " he", - "startMs": 10720, - "endMs": 10890, - "timestampMs": 10980, - "confidence": 0.997893 - }, - { - "text": "'s", - "startMs": 10890, - "endMs": 11020, - "timestampMs": 11100, - "confidence": 0.993263 - }, - { - "text": " been", - "startMs": 11020, - "endMs": 11320, - "timestampMs": 11300, - "confidence": 0.998567 - }, - { - "text": " a", - "startMs": 11320, - "endMs": 11420, - "timestampMs": 11660, - "confidence": 0.974922 - }, - { - "text": " loving", - "startMs": 11420, - "endMs": 11840, - "timestampMs": 11980, - "confidence": 0.989398 - }, - { - "text": ",", - "startMs": 11840, - "endMs": 11990, - "timestampMs": 12560, - "confidence": 0.982115 - }, - { - "text": " thoughtful", - "startMs": 11990, - "endMs": 12800, - "timestampMs": 12800, - "confidence": 0.997425 - }, - { - "text": " child", - "startMs": 12800, - "endMs": 13110, - "timestampMs": 13440, - "confidence": 0.994689 - }, - { - "text": ".", - "startMs": 13110, - "endMs": 13360, - "timestampMs": 14220, - "confidence": 0.994089 - }, - { - "text": " He", - "startMs": 13360, - "endMs": 13630, - "timestampMs": 14380, - "confidence": 0.970017 - }, - { - "text": "'s", - "startMs": 13630, - "endMs": 13730, - "timestampMs": 14460, - "confidence": 0.995114 - }, - { - "text": " a", - "startMs": 13730, - "endMs": 13960, - "timestampMs": 14580, - "confidence": 0.999153 - }, - { - "text": " bit", - "startMs": 13960, - "endMs": 14320, - "timestampMs": 14660, - "confidence": 0.998955 - }, - { - "text": " of", - "startMs": 14320, - "endMs": 14410, - "timestampMs": 14760, - "confidence": 0.999573 - }, - { - "text": " a", - "startMs": 14410, - "endMs": 14510, - "timestampMs": 14920, - "confidence": 0.998182 - }, - { - "text": " miracle", - "startMs": 14510, - "endMs": 15230, - "timestampMs": 15220, - "confidence": 0.95229 - }, - { - "text": " baby", - "startMs": 15230, - "endMs": 15670, - "timestampMs": 15640, - "confidence": 0.950856 - }, - { - "text": ",", - "startMs": 15670, - "endMs": 16080, - "timestampMs": 16060, - "confidence": 0.979369 - }, - { - "text": " as", - "startMs": 16080, - "endMs": 16110, - "timestampMs": 16240, - "confidence": 0.86594 - }, - { - "text": " he", - "startMs": 16110, - "endMs": 16240, - "timestampMs": 16340, - "confidence": 0.998334 - }, - { - "text": " was", - "startMs": 16240, - "endMs": 16400, - "timestampMs": 16500, - "confidence": 0.985827 - }, - { - "text": " born", - "startMs": 16400, - "endMs": 16720, - "timestampMs": 16780, - "confidence": 0.924036 - }, - { - "text": " with", - "startMs": 16720, - "endMs": 16880, - "timestampMs": 16980, - "confidence": 0.8905 - }, - { - "text": " the", - "startMs": 16880, - "endMs": 16960, - "timestampMs": 17120, - "confidence": 0.717007 - }, - { - "text": " umb", - "startMs": 16960, - "endMs": 17140, - "timestampMs": 17340, - "confidence": 0.99798 - }, - { - "text": "il", - "startMs": 17140, - "endMs": 17260, - "timestampMs": 17400, - "confidence": 0.999072 - }, - { - "text": "ical", - "startMs": 17260, - "endMs": 17500, - "timestampMs": 17560, - "confidence": 0.999947 - }, - { - "text": " cord", - "startMs": 17500, - "endMs": 17740, - "timestampMs": 17840, - "confidence": 0.994605 - }, - { - "text": " wrapped", - "startMs": 17740, - "endMs": 18160, - "timestampMs": 18060, - "confidence": 0.999462 - }, - { - "text": " around", - "startMs": 18160, - "endMs": 18520, - "timestampMs": 18320, - "confidence": 0.998133 - }, - { - "text": " his", - "startMs": 18520, - "endMs": 18700, - "timestampMs": 18520, - "confidence": 0.999458 - }, - { - "text": " neck", - "startMs": 18700, - "endMs": 18930, - "timestampMs": 18820, - "confidence": 0.999592 - }, - { - "text": ",", - "startMs": 18930, - "endMs": 19060, - "timestampMs": 19200, - "confidence": 0.661154 - }, - { - "text": " and", - "startMs": 19060, - "endMs": 19410, - "timestampMs": 19580, - "confidence": 0.998593 - }, - { - "text": " feeling", - "startMs": 19410, - "endMs": 19660, - "timestampMs": 19880, - "confidence": 0.996888 - }, - { - "text": " the", - "startMs": 19660, - "endMs": 19840, - "timestampMs": 20080, - "confidence": 0.999516 - }, - { - "text": " fear", - "startMs": 19840, - "endMs": 20160, - "timestampMs": 20320, - "confidence": 0.999355 - }, - { - "text": " of", - "startMs": 20160, - "endMs": 20200, - "timestampMs": 20520, - "confidence": 0.998883 - }, - { - "text": " knowing", - "startMs": 20200, - "endMs": 20620, - "timestampMs": 20760, - "confidence": 0.998342 - }, - { - "text": " that", - "startMs": 20620, - "endMs": 20860, - "timestampMs": 20960, - "confidence": 0.998239 - }, - { - "text": " my", - "startMs": 20860, - "endMs": 21040, - "timestampMs": 21160, - "confidence": 0.996519 - }, - { - "text": " baby", - "startMs": 21040, - "endMs": 21360, - "timestampMs": 21440, - "confidence": 0.948418 - }, - { - "text": " boy", - "startMs": 21360, - "endMs": 21680, - "timestampMs": 21700, - "confidence": 0.921521 - }, - { - "text": " could", - "startMs": 21680, - "endMs": 22090, - "timestampMs": 21960, - "confidence": 0.999302 - }, - { - "text": " possibly", - "startMs": 22090, - "endMs": 22470, - "timestampMs": 22480, - "confidence": 0.997832 - }, - { - "text": " die", - "startMs": 22470, - "endMs": 22650, - "timestampMs": 22780, - "confidence": 0.999359 - }, - { - "text": " before", - "startMs": 22650, - "endMs": 23020, - "timestampMs": 23100, - "confidence": 0.999649 - }, - { - "text": " I", - "startMs": 23020, - "endMs": 23080, - "timestampMs": 23260, - "confidence": 0.99728 - }, - { - "text": " even", - "startMs": 23080, - "endMs": 23340, - "timestampMs": 23420, - "confidence": 0.99819 - }, - { - "text": " got", - "startMs": 23340, - "endMs": 23500, - "timestampMs": 23580, - "confidence": 0.999127 - }, - { - "text": " the", - "startMs": 23500, - "endMs": 23680, - "timestampMs": 23780, - "confidence": 0.998727 - }, - { - "text": " chance", - "startMs": 23680, - "endMs": 24050, - "timestampMs": 24040, - "confidence": 0.999367 - }, - { - "text": " to", - "startMs": 24050, - "endMs": 24170, - "timestampMs": 24260, - "confidence": 0.999908 - }, - { - "text": " hold", - "startMs": 24170, - "endMs": 24420, - "timestampMs": 24420, - "confidence": 0.999561 - }, - { - "text": " him", - "startMs": 24420, - "endMs": 24590, - "timestampMs": 24540, - "confidence": 0.999314 - }, - { - "text": " in", - "startMs": 24590, - "endMs": 24710, - "timestampMs": 24660, - "confidence": 0.9995 - }, - { - "text": " my", - "startMs": 24710, - "endMs": 24830, - "timestampMs": 24940, - "confidence": 0.999554 - }, - { - "text": " arms", - "startMs": 24830, - "endMs": 25070, - "timestampMs": 25220, - "confidence": 0.999131 - }, - { - "text": " was", - "startMs": 25070, - "endMs": 25240, - "timestampMs": 25460, - "confidence": 0.988674 - }, - { - "text": " palpable", - "startMs": 25240, - "endMs": 25810, - "timestampMs": 25960, - "confidence": 0.966223 - }, - { - "text": ".", - "startMs": 25810, - "endMs": 26000, - "timestampMs": 26540, - "confidence": 0.967062 - }, - { - "text": " However", - "startMs": 26760, - "endMs": 27040, - "timestampMs": 27100, - "confidence": 0.998182 - }, - { - "text": ",", - "startMs": 27040, - "endMs": 27160, - "timestampMs": 27260, - "confidence": 0.946362 - }, - { - "text": " against", - "startMs": 27160, - "endMs": 27630, - "timestampMs": 27520, - "confidence": 0.99851 - }, - { - "text": " all", - "startMs": 27630, - "endMs": 27830, - "timestampMs": 27800, - "confidence": 0.999664 - }, - { - "text": " odds", - "startMs": 27830, - "endMs": 28100, - "timestampMs": 28200, - "confidence": 0.99958 - }, - { - "text": ",", - "startMs": 28100, - "endMs": 28230, - "timestampMs": 28360, - "confidence": 0.923995 - }, - { - "text": " he", - "startMs": 28230, - "endMs": 28360, - "timestampMs": 28440, - "confidence": 0.999066 - }, - { - "text": " made", - "startMs": 28360, - "endMs": 28630, - "timestampMs": 28640, - "confidence": 0.993021 - }, - { - "text": " it", - "startMs": 28630, - "endMs": 28760, - "timestampMs": 28920, - "confidence": 0.999478 - }, - { - "text": ",", - "startMs": 28760, - "endMs": 28920, - "timestampMs": 29160, - "confidence": 0.875035 - }, - { - "text": " and", - "startMs": 28920, - "endMs": 29220, - "timestampMs": 29340, - "confidence": 0.999474 - }, - { - "text": " he", - "startMs": 29220, - "endMs": 29250, - "timestampMs": 29460, - "confidence": 0.998811 - }, - { - "text": "'s", - "startMs": 29250, - "endMs": 29350, - "timestampMs": 29560, - "confidence": 0.995551 - }, - { - "text": " grown", - "startMs": 29350, - "endMs": 29690, - "timestampMs": 29780, - "confidence": 0.999634 - }, - { - "text": " into", - "startMs": 29690, - "endMs": 29970, - "timestampMs": 30080, - "confidence": 0.997733 - }, - { - "text": " such", - "startMs": 29970, - "endMs": 30230, - "timestampMs": 30320, - "confidence": 0.996831 - }, - { - "text": " a", - "startMs": 30230, - "endMs": 30300, - "timestampMs": 30520, - "confidence": 0.995412 - }, - { - "text": " charismatic", - "startMs": 30300, - "endMs": 31180, - "timestampMs": 31040, - "confidence": 0.993744 - }, - { - "text": " and", - "startMs": 31180, - "endMs": 31280, - "timestampMs": 31380, - "confidence": 0.957171 - }, - { - "text": " charming", - "startMs": 31280, - "endMs": 31680, - "timestampMs": 31700, - "confidence": 0.954507 - }, - { - "text": " child", - "startMs": 31680, - "endMs": 32240, - "timestampMs": 32200, - "confidence": 0.97691 - }, - { - "text": ".", - "startMs": 32240, - "endMs": 32640, - "timestampMs": 32720, - "confidence": 0.993475 - }, - { - "text": " I", - "startMs": 32640, - "endMs": 32830, - "timestampMs": 32920, - "confidence": 0.999237 - }, - { - "text": " did", - "startMs": 32830, - "endMs": 32880, - "timestampMs": 33060, - "confidence": 0.999703 - }, - { - "text": " everything", - "startMs": 32880, - "endMs": 33510, - "timestampMs": 33500, - "confidence": 0.999485 - }, - { - "text": " I", - "startMs": 33510, - "endMs": 33570, - "timestampMs": 33700, - "confidence": 0.998814 - }, - { - "text": " could", - "startMs": 33570, - "endMs": 33880, - "timestampMs": 33880, - "confidence": 0.999714 - }, - { - "text": " to", - "startMs": 33880, - "endMs": 34000, - "timestampMs": 34060, - "confidence": 0.998296 - }, - { - "text": " bring", - "startMs": 34000, - "endMs": 34310, - "timestampMs": 34220, - "confidence": 0.999641 - }, - { - "text": " him", - "startMs": 34310, - "endMs": 34530, - "timestampMs": 34360, - "confidence": 0.999607 - }, - { - "text": " up", - "startMs": 34530, - "endMs": 34610, - "timestampMs": 34560, - "confidence": 0.999497 - }, - { - "text": " correctly", - "startMs": 34610, - "endMs": 35360, - "timestampMs": 35020, - "confidence": 0.998407 - }, - { - "text": ",", - "startMs": 35360, - "endMs": 35400, - "timestampMs": 35500, - "confidence": 0.972455 - }, - { - "text": " nurturing", - "startMs": 35400, - "endMs": 35830, - "timestampMs": 35860, - "confidence": 0.978948 - }, - { - "text": " him", - "startMs": 35830, - "endMs": 35990, - "timestampMs": 36160, - "confidence": 0.995266 - }, - { - "text": " and", - "startMs": 35990, - "endMs": 36160, - "timestampMs": 36360, - "confidence": 0.96435 - }, - { - "text": " watching", - "startMs": 36160, - "endMs": 36560, - "timestampMs": 36660, - "confidence": 0.972659 - }, - { - "text": " him", - "startMs": 36560, - "endMs": 36800, - "timestampMs": 36900, - "confidence": 0.83327 - }, - { - "text": " spr", - "startMs": 36800, - "endMs": 37110, - "timestampMs": 37240, - "confidence": 0.756444 - }, - { - "text": "out", - "startMs": 37110, - "endMs": 37280, - "timestampMs": 37360, - "confidence": 0.998719 - }, - { - "text": " into", - "startMs": 37280, - "endMs": 37520, - "timestampMs": 37600, - "confidence": 0.885799 - }, - { - "text": " the", - "startMs": 37520, - "endMs": 37680, - "timestampMs": 37840, - "confidence": 0.965267 - }, - { - "text": " loving", - "startMs": 37680, - "endMs": 38080, - "timestampMs": 38080, - "confidence": 0.998277 - }, - { - "text": " young", - "startMs": 38080, - "endMs": 38410, - "timestampMs": 38320, - "confidence": 0.983142 - }, - { - "text": " man", - "startMs": 38410, - "endMs": 38610, - "timestampMs": 38620, - "confidence": 0.999653 - }, - { - "text": " he", - "startMs": 38610, - "endMs": 38740, - "timestampMs": 38800, - "confidence": 0.998228 - }, - { - "text": " is", - "startMs": 38740, - "endMs": 38870, - "timestampMs": 38960, - "confidence": 0.999832 - }, - { - "text": " today", - "startMs": 38870, - "endMs": 39200, - "timestampMs": 39360, - "confidence": 0.999493 - }, - { - "text": ".", - "startMs": 39200, - "endMs": 39990, - "timestampMs": 40000, - "confidence": 0.994731 - }, - { - "text": " Everything", - "startMs": 39990, - "endMs": 40070, - "timestampMs": 40340, - "confidence": 0.997288 - }, - { - "text": " has", - "startMs": 40070, - "endMs": 40280, - "timestampMs": 40520, - "confidence": 0.998711 - }, - { - "text": " gone", - "startMs": 40280, - "endMs": 40540, - "timestampMs": 40700, - "confidence": 0.999798 - }, - { - "text": " perfectly", - "startMs": 40540, - "endMs": 41170, - "timestampMs": 41240, - "confidence": 0.999481 - }, - { - "text": " in", - "startMs": 41170, - "endMs": 41270, - "timestampMs": 41440, - "confidence": 0.98574 - }, - { - "text": " almost", - "startMs": 41270, - "endMs": 41670, - "timestampMs": 41700, - "confidence": 0.997573 - }, - { - "text": " every", - "startMs": 41670, - "endMs": 42000, - "timestampMs": 42160, - "confidence": 0.998643 - }, - { - "text": " single", - "startMs": 42000, - "endMs": 42480, - "timestampMs": 42540, - "confidence": 0.999134 - }, - { - "text": " way", - "startMs": 42480, - "endMs": 42800, - "timestampMs": 42820, - "confidence": 0.900164 - }, - { - "text": " except", - "startMs": 42800, - "endMs": 43040, - "timestampMs": 43080, - "confidence": 0.726814 - }, - { - "text": " for", - "startMs": 43040, - "endMs": 43280, - "timestampMs": 43400, - "confidence": 0.921106 - }, - { - "text": " one", - "startMs": 43280, - "endMs": 43500, - "timestampMs": 43620, - "confidence": 0.998331 - }, - { - "text": " thing", - "startMs": 43500, - "endMs": 43870, - "timestampMs": 44020, - "confidence": 0.999588 - }, - { - "text": ".", - "startMs": 43870, - "endMs": 44230, - "timestampMs": 44500, - "confidence": 0.839403 - }, - { - "text": " No", - "startMs": 44230, - "endMs": 44550, - "timestampMs": 44720, - "confidence": 0.997889 - }, - { - "text": " matter", - "startMs": 44550, - "endMs": 44670, - "timestampMs": 44920, - "confidence": 0.999783 - }, - { - "text": " what", - "startMs": 44670, - "endMs": 44960, - "timestampMs": 45280, - "confidence": 0.999626 - }, - { - "text": ",", - "startMs": 44960, - "endMs": 45100, - "timestampMs": 45640, - "confidence": 0.98887 - }, - { - "text": " my", - "startMs": 45100, - "endMs": 45280, - "timestampMs": 45760, - "confidence": 0.998586 - }, - { - "text": " son", - "startMs": 45280, - "endMs": 45590, - "timestampMs": 45940, - "confidence": 0.999226 - }, - { - "text": " keeps", - "startMs": 45590, - "endMs": 45830, - "timestampMs": 46240, - "confidence": 0.999504 - }, - { - "text": " insisting", - "startMs": 45830, - "endMs": 46500, - "timestampMs": 46740, - "confidence": 0.999516 - }, - { - "text": " that", - "startMs": 46500, - "endMs": 46780, - "timestampMs": 46980, - "confidence": 0.996516 - }, - { - "text": " I", - "startMs": 46780, - "endMs": 46850, - "timestampMs": 47080, - "confidence": 0.998616 - }, - { - "text": "'m", - "startMs": 46850, - "endMs": 46990, - "timestampMs": 47140, - "confidence": 0.996877 - }, - { - "text": " not", - "startMs": 46990, - "endMs": 47210, - "timestampMs": 47320, - "confidence": 0.999657 - }, - { - "text": " his", - "startMs": 47210, - "endMs": 47430, - "timestampMs": 47700, - "confidence": 0.994734 - }, - { - "text": ".", - "startMs": 47430, - "endMs": 47640, - "timestampMs": 48220, - "confidence": 0.934709 - }, - { - "text": " He", - "startMs": 47640, - "endMs": 48160, - "timestampMs": 48360, - "confidence": 0.99631 - }, - { - "text": " keeps", - "startMs": 48160, - "endMs": 48280, - "timestampMs": 48620, - "confidence": 0.999058 - }, - { - "text": " sp", - "startMs": 48280, - "endMs": 48300, - "timestampMs": 48880, - "confidence": 0.998253 - }, - { - "text": "outing", - "startMs": 48300, - "endMs": 48770, - "timestampMs": 48980, - "confidence": 0.998982 - }, - { - "text": " off", - "startMs": 48770, - "endMs": 48960, - "timestampMs": 49300, - "confidence": 0.998026 - }, - { - "text": " about", - "startMs": 48960, - "endMs": 49440, - "timestampMs": 49560, - "confidence": 0.996367 - }, - { - "text": " how", - "startMs": 49440, - "endMs": 49600, - "timestampMs": 49740, - "confidence": 0.827735 - }, - { - "text": " he", - "startMs": 49600, - "endMs": 49720, - "timestampMs": 49860, - "confidence": 0.998578 - }, - { - "text": "'s", - "startMs": 49720, - "endMs": 49840, - "timestampMs": 49980, - "confidence": 0.996827 - }, - { - "text": " so", - "startMs": 49840, - "endMs": 49960, - "timestampMs": 50120, - "confidence": 0.999325 - }, - { - "text": " happy", - "startMs": 49960, - "endMs": 50270, - "timestampMs": 50480, - "confidence": 0.999703 - }, - { - "text": " I", - "startMs": 50270, - "endMs": 50330, - "timestampMs": 50680, - "confidence": 0.986278 - }, - { - "text": "'m", - "startMs": 50330, - "endMs": 50450, - "timestampMs": 50760, - "confidence": 0.99854 - }, - { - "text": " his", - "startMs": 50450, - "endMs": 50630, - "timestampMs": 50920, - "confidence": 0.998936 - }, - { - "text": " mom", - "startMs": 50630, - "endMs": 50810, - "timestampMs": 51140, - "confidence": 0.964222 - }, - { - "text": "my", - "startMs": 50810, - "endMs": 50930, - "timestampMs": 51280, - "confidence": 0.997558 - }, - { - "text": " until", - "startMs": 50930, - "endMs": 51240, - "timestampMs": 51480, - "confidence": 0.987035 - }, - { - "text": " his", - "startMs": 51240, - "endMs": 51420, - "timestampMs": 51700, - "confidence": 0.998498 - }, - { - "text": " real", - "startMs": 51420, - "endMs": 51670, - "timestampMs": 51940, - "confidence": 0.994875 - }, - { - "text": " mom", - "startMs": 51670, - "endMs": 51850, - "timestampMs": 52140, - "confidence": 0.997664 - }, - { - "text": "my", - "startMs": 51850, - "endMs": 51970, - "timestampMs": 52300, - "confidence": 0.998822 - }, - { - "text": " shows", - "startMs": 51970, - "endMs": 52280, - "timestampMs": 52500, - "confidence": 0.999497 - }, - { - "text": " up", - "startMs": 52280, - "endMs": 52400, - "timestampMs": 52840, - "confidence": 0.99947 - }, - { - "text": ",", - "startMs": 52400, - "endMs": 52510, - "timestampMs": 53060, - "confidence": 0.896784 - }, - { - "text": " and", - "startMs": 52510, - "endMs": 52740, - "timestampMs": 53300, - "confidence": 0.999474 - }, - { - "text": " it", - "startMs": 52740, - "endMs": 52810, - "timestampMs": 53400, - "confidence": 0.99709 - }, - { - "text": "'s", - "startMs": 52810, - "endMs": 53200, - "timestampMs": 53520, - "confidence": 0.999062 - }, - { - "text": " utterly", - "startMs": 53200, - "endMs": 53390, - "timestampMs": 53840, - "confidence": 0.999531 - }, - { - "text": " heartbreaking", - "startMs": 53390, - "endMs": 54190, - "timestampMs": 54460, - "confidence": 0.977025 - }, - { - "text": ".", - "startMs": 54190, - "endMs": 54480, - "timestampMs": 55160, - "confidence": 0.996961 - }, - { - "text": " I", - "startMs": 55440, - "endMs": 55670, - "timestampMs": 55760, - "confidence": 0.987777 - }, - { - "text": "'ve", - "startMs": 55670, - "endMs": 55680, - "timestampMs": 55860, - "confidence": 0.996044 - }, - { - "text": " tried", - "startMs": 55680, - "endMs": 55990, - "timestampMs": 56060, - "confidence": 0.9991 - }, - { - "text": " countless", - "startMs": 55990, - "endMs": 56580, - "timestampMs": 56440, - "confidence": 0.999619 - }, - { - "text": " times", - "startMs": 56580, - "endMs": 56860, - "timestampMs": 56820, - "confidence": 0.999264 - }, - { - "text": " to", - "startMs": 56860, - "endMs": 56980, - "timestampMs": 57020, - "confidence": 0.999763 - }, - { - "text": " break", - "startMs": 56980, - "endMs": 57290, - "timestampMs": 57180, - "confidence": 0.9995 - }, - { - "text": " this", - "startMs": 57290, - "endMs": 57540, - "timestampMs": 57400, - "confidence": 0.998041 - }, - { - "text": " habit", - "startMs": 57540, - "endMs": 57900, - "timestampMs": 57780, - "confidence": 0.999192 - }, - { - "text": ".", - "startMs": 57900, - "endMs": 58280, - "timestampMs": 58340, - "confidence": 0.756408 - }, - { - "text": " Hell", - "startMs": 58280, - "endMs": 58290, - "timestampMs": 58520, - "confidence": 0.975627 - }, - { - "text": ",", - "startMs": 58290, - "endMs": 58480, - "timestampMs": 58620, - "confidence": 0.975684 - }, - { - "text": " all", - "startMs": 58480, - "endMs": 58630, - "timestampMs": 58760, - "confidence": 0.959106 - }, - { - "text": " the", - "startMs": 58630, - "endMs": 58800, - "timestampMs": 58900, - "confidence": 0.999344 - }, - { - "text": " way", - "startMs": 58800, - "endMs": 58930, - "timestampMs": 59020, - "confidence": 0.99918 - }, - { - "text": " until", - "startMs": 58930, - "endMs": 59180, - "timestampMs": 59240, - "confidence": 0.995233 - }, - { - "text": " he", - "startMs": 59180, - "endMs": 59280, - "timestampMs": 59360, - "confidence": 0.993161 - }, - { - "text": " turned", - "startMs": 59280, - "endMs": 59750, - "timestampMs": 59640, - "confidence": 0.994719 - }, - { - "text": " four", - "startMs": 59750, - "endMs": 60090, - "timestampMs": 59980, - "confidence": 0.931569 - }, - { - "text": ",", - "startMs": 60090, - "endMs": 60240, - "timestampMs": 60420, - "confidence": 0.908158 - }, - { - "text": " I", - "startMs": 60240, - "endMs": 60440, - "timestampMs": 60560, - "confidence": 0.999794 - }, - { - "text": " had", - "startMs": 60440, - "endMs": 60490, - "timestampMs": 60720, - "confidence": 0.999047 - }, - { - "text": " him", - "startMs": 60490, - "endMs": 60680, - "timestampMs": 60860, - "confidence": 0.999256 - }, - { - "text": " lie", - "startMs": 60680, - "endMs": 60870, - "timestampMs": 61060, - "confidence": 0.98984 - }, - { - "text": " on", - "startMs": 60870, - "endMs": 60990, - "timestampMs": 61240, - "confidence": 0.999333 - }, - { - "text": " my", - "startMs": 60990, - "endMs": 61110, - "timestampMs": 61400, - "confidence": 0.999493 - }, - { - "text": " chest", - "startMs": 61110, - "endMs": 61420, - "timestampMs": 61660, - "confidence": 0.999817 - }, - { - "text": " as", - "startMs": 61420, - "endMs": 61540, - "timestampMs": 61840, - "confidence": 0.996896 - }, - { - "text": " we", - "startMs": 61540, - "endMs": 61720, - "timestampMs": 62020, - "confidence": 0.999687 - }, - { - "text": " practiced", - "startMs": 61720, - "endMs": 62230, - "timestampMs": 62400, - "confidence": 0.979858 - }, - { - "text": " skin", - "startMs": 62230, - "endMs": 62480, - "timestampMs": 62760, - "confidence": 0.983618 - }, - { - "text": " to", - "startMs": 62480, - "endMs": 62660, - "timestampMs": 62940, - "confidence": 0.826525 - }, - { - "text": " skin", - "startMs": 62660, - "endMs": 62850, - "timestampMs": 63300, - "confidence": 0.99934 - }, - { - "text": ".", - "startMs": 62850, - "endMs": 63120, - "timestampMs": 63740, - "confidence": 0.994545 - }, - { - "text": " I", - "startMs": 63120, - "endMs": 63250, - "timestampMs": 64100, - "confidence": 0.946776 - }, - { - "text": " breast", - "startMs": 63250, - "endMs": 64060, - "timestampMs": 64400, - "confidence": 0.998729 - }, - { - "text": "fed", - "startMs": 64060, - "endMs": 64460, - "timestampMs": 64620, - "confidence": 0.953936 - }, - { - "text": ".", - "startMs": 64460, - "endMs": 64750, - "timestampMs": 65080, - "confidence": 0.46568 - }, - { - "text": " I", - "startMs": 64750, - "endMs": 65090, - "timestampMs": 65220, - "confidence": 0.988561 - }, - { - "text": " taught", - "startMs": 65090, - "endMs": 65220, - "timestampMs": 65340, - "confidence": 0.998978 - }, - { - "text": " him", - "startMs": 65220, - "endMs": 65360, - "timestampMs": 65460, - "confidence": 0.998548 - }, - { - "text": " to", - "startMs": 65360, - "endMs": 65520, - "timestampMs": 65600, - "confidence": 0.988033 - }, - { - "text": " walk", - "startMs": 65520, - "endMs": 65830, - "timestampMs": 65940, - "confidence": 0.971576 - }, - { - "text": ".", - "startMs": 65830, - "endMs": 66240, - "timestampMs": 66260, - "confidence": 0.981407 - }, - { - "text": " I", - "startMs": 66240, - "endMs": 66270, - "timestampMs": 66360, - "confidence": 0.697103 - }, - { - "text": " taught", - "startMs": 66270, - "endMs": 66480, - "timestampMs": 66560, - "confidence": 0.836829 - }, - { - "text": " him", - "startMs": 66480, - "endMs": 66700, - "timestampMs": 66680, - "confidence": 0.999016 - }, - { - "text": " to", - "startMs": 66700, - "endMs": 66810, - "timestampMs": 66800, - "confidence": 0.999401 - }, - { - "text": " speak", - "startMs": 66810, - "endMs": 67150, - "timestampMs": 67160, - "confidence": 0.999863 - }, - { - "text": ".", - "startMs": 67150, - "endMs": 67550, - "timestampMs": 67620, - "confidence": 0.593019 - }, - { - "text": " And", - "startMs": 67550, - "endMs": 67600, - "timestampMs": 67740, - "confidence": 0.956634 - }, - { - "text": " yet", - "startMs": 67600, - "endMs": 67750, - "timestampMs": 67920, - "confidence": 0.989882 - }, - { - "text": ",", - "startMs": 67750, - "endMs": 67970, - "timestampMs": 68060, - "confidence": 0.707582 - }, - { - "text": " no", - "startMs": 67970, - "endMs": 68010, - "timestampMs": 68140, - "confidence": 0.998433 - }, - { - "text": " matter", - "startMs": 68010, - "endMs": 68420, - "timestampMs": 68340, - "confidence": 0.999649 - }, - { - "text": " what", - "startMs": 68420, - "endMs": 68670, - "timestampMs": 68700, - "confidence": 0.999203 - }, - { - "text": ",", - "startMs": 68670, - "endMs": 68800, - "timestampMs": 69140, - "confidence": 0.988108 - }, - { - "text": " he", - "startMs": 68800, - "endMs": 69190, - "timestampMs": 69280, - "confidence": 0.998121 - }, - { - "text": " simply", - "startMs": 69190, - "endMs": 69360, - "timestampMs": 69640, - "confidence": 0.998323 - }, - { - "text": " would", - "startMs": 69360, - "endMs": 69700, - "timestampMs": 69860, - "confidence": 0.999085 - }, - { - "text": " not", - "startMs": 69700, - "endMs": 69900, - "timestampMs": 70080, - "confidence": 0.999798 - }, - { - "text": " stop", - "startMs": 69900, - "endMs": 70160, - "timestampMs": 70380, - "confidence": 0.99955 - }, - { - "text": " acting", - "startMs": 70160, - "endMs": 70580, - "timestampMs": 70780, - "confidence": 0.999683 - }, - { - "text": " as", - "startMs": 70580, - "endMs": 70710, - "timestampMs": 70980, - "confidence": 0.997478 - }, - { - "text": " though", - "startMs": 70710, - "endMs": 71120, - "timestampMs": 71140, - "confidence": 0.998323 - }, - { - "text": " I", - "startMs": 71120, - "endMs": 71280, - "timestampMs": 71420, - "confidence": 0.996542 - }, - { - "text": " weren", - "startMs": 71280, - "endMs": 71520, - "timestampMs": 71600, - "confidence": 0.964196 - }, - { - "text": "'t", - "startMs": 71520, - "endMs": 71610, - "timestampMs": 71680, - "confidence": 0.999954 - }, - { - "text": " his", - "startMs": 71610, - "endMs": 71760, - "timestampMs": 71860, - "confidence": 0.996098 - }, - { - "text": " mother", - "startMs": 71760, - "endMs": 72160, - "timestampMs": 72200, - "confidence": 0.998795 - }, - { - "text": ".", - "startMs": 72160, - "endMs": 72350, - "timestampMs": 73020, - "confidence": 0.998357 - }, - { - "text": " One", - "startMs": 72350, - "endMs": 72560, - "timestampMs": 73300, - "confidence": 0.989629 - }, - { - "text": " night", - "startMs": 72560, - "endMs": 72890, - "timestampMs": 73540, - "confidence": 0.999527 - }, - { - "text": " at", - "startMs": 72890, - "endMs": 73130, - "timestampMs": 73700, - "confidence": 0.964137 - }, - { - "text": " bath", - "startMs": 73130, - "endMs": 73280, - "timestampMs": 73900, - "confidence": 0.996326 - }, - { - "text": " time", - "startMs": 73280, - "endMs": 73540, - "timestampMs": 74180, - "confidence": 0.85064 - }, - { - "text": ",", - "startMs": 73540, - "endMs": 73670, - "timestampMs": 74240, - "confidence": 0.626049 - }, - { - "text": " when", - "startMs": 73670, - "endMs": 73990, - "timestampMs": 74360, - "confidence": 0.995524 - }, - { - "text": " he", - "startMs": 73990, - "endMs": 74060, - "timestampMs": 74480, - "confidence": 0.999367 - }, - { - "text": " was", - "startMs": 74060, - "endMs": 74260, - "timestampMs": 74660, - "confidence": 0.999828 - }, - { - "text": " five", - "startMs": 74260, - "endMs": 74520, - "timestampMs": 74940, - "confidence": 0.993271 - }, - { - "text": ",", - "startMs": 74520, - "endMs": 74680, - "timestampMs": 75100, - "confidence": 0.994374 - }, - { - "text": " I", - "startMs": 74680, - "endMs": 74710, - "timestampMs": 75220, - "confidence": 0.999733 - }, - { - "text": " asked", - "startMs": 74710, - "endMs": 75040, - "timestampMs": 75500, - "confidence": 0.999615 - }, - { - "text": " him", - "startMs": 75040, - "endMs": 75280, - "timestampMs": 75640, - "confidence": 0.999176 - }, - { - "text": " about", - "startMs": 75280, - "endMs": 75570, - "timestampMs": 75860, - "confidence": 0.999691 - }, - { - "text": " this", - "startMs": 75570, - "endMs": 75830, - "timestampMs": 76100, - "confidence": 0.999066 - }, - { - "text": " as", - "startMs": 75830, - "endMs": 75960, - "timestampMs": 76260, - "confidence": 0.974483 - }, - { - "text": " I", - "startMs": 75960, - "endMs": 76020, - "timestampMs": 76400, - "confidence": 0.999104 - }, - { - "text": " washed", - "startMs": 76020, - "endMs": 76420, - "timestampMs": 76600, - "confidence": 0.994499 - }, - { - "text": " his", - "startMs": 76420, - "endMs": 76720, - "timestampMs": 76840, - "confidence": 0.998891 - }, - { - "text": " hair", - "startMs": 76720, - "endMs": 76850, - "timestampMs": 77100, - "confidence": 0.987888 - }, - { - "text": ".", - "startMs": 76850, - "endMs": 76960, - "timestampMs": 77920, - "confidence": 0.936193 - }, - { - "text": " \"", - "startMs": 76960, - "endMs": 77020, - "timestampMs": 78100, - "confidence": 0.989061 - }, - { - "text": "Sweet", - "startMs": 77020, - "endMs": 77330, - "timestampMs": 78180, - "confidence": 0.95542 - }, - { - "text": "ie", - "startMs": 77330, - "endMs": 77480, - "timestampMs": 78360, - "confidence": 0.999763 - }, - { - "text": ",", - "startMs": 77480, - "endMs": 77600, - "timestampMs": 78480, - "confidence": 0.990467 - }, - { - "text": " you", - "startMs": 77600, - "endMs": 77960, - "timestampMs": 78580, - "confidence": 0.997504 - }, - { - "text": " know", - "startMs": 77960, - "endMs": 78050, - "timestampMs": 78740, - "confidence": 0.999226 - }, - { - "text": " mom", - "startMs": 78050, - "endMs": 78240, - "timestampMs": 78920, - "confidence": 0.807468 - }, - { - "text": "my", - "startMs": 78240, - "endMs": 78440, - "timestampMs": 79040, - "confidence": 0.999264 - }, - { - "text": " loves", - "startMs": 78440, - "endMs": 78690, - "timestampMs": 79260, - "confidence": 0.998818 - }, - { - "text": " you", - "startMs": 78690, - "endMs": 78880, - "timestampMs": 79420, - "confidence": 0.99958 - }, - { - "text": " very", - "startMs": 78880, - "endMs": 79140, - "timestampMs": 79660, - "confidence": 0.999245 - }, - { - "text": " much", - "startMs": 79140, - "endMs": 79400, - "timestampMs": 79920, - "confidence": 0.99987 - }, - { - "text": ",", - "startMs": 79400, - "endMs": 79530, - "timestampMs": 80140, - "confidence": 0.968742 - }, - { - "text": " right", - "startMs": 79530, - "endMs": 79850, - "timestampMs": 80300, - "confidence": 0.990567 - }, - { - "text": "?\"", - "startMs": 79850, - "endMs": 80160, - "timestampMs": 80660, - "confidence": 0.992954 - }, - { - "text": " He", - "startMs": 80160, - "endMs": 81250, - "timestampMs": 81360, - "confidence": 0.519821 - }, - { - "text": " responded", - "startMs": 81250, - "endMs": 81290, - "timestampMs": 81860, - "confidence": 0.999607 - }, - { - "text": " by", - "startMs": 81290, - "endMs": 81490, - "timestampMs": 82100, - "confidence": 0.975375 - }, - { - "text": " cheer", - "startMs": 81490, - "endMs": 82010, - "timestampMs": 82360, - "confidence": 0.969425 - }, - { - "text": "fully", - "startMs": 82010, - "endMs": 82560, - "timestampMs": 82600, - "confidence": 0.999798 - }, - { - "text": " adding", - "startMs": 82560, - "endMs": 82800, - "timestampMs": 82960, - "confidence": 0.982692 - }, - { - "text": ",", - "startMs": 82800, - "endMs": 82880, - "timestampMs": 83500, - "confidence": 0.964606 - }, - { - "text": " \"", - "startMs": 83520, - "endMs": 83660, - "timestampMs": 83780, - "confidence": 0.993756 - }, - { - "text": "I", - "startMs": 83660, - "endMs": 83710, - "timestampMs": 83840, - "confidence": 0.998708 - }, - { - "text": " know", - "startMs": 83710, - "endMs": 83960, - "timestampMs": 84000, - "confidence": 0.999725 - }, - { - "text": " she", - "startMs": 83960, - "endMs": 84190, - "timestampMs": 84220, - "confidence": 0.999153 - }, - { - "text": " does", - "startMs": 84190, - "endMs": 84460, - "timestampMs": 84560, - "confidence": 0.999668 - }, - { - "text": ",", - "startMs": 84460, - "endMs": 84870, - "timestampMs": 84820, - "confidence": 0.422402 - }, - { - "text": " and", - "startMs": 84870, - "endMs": 84950, - "timestampMs": 85100, - "confidence": 0.99947 - }, - { - "text": " you", - "startMs": 84950, - "endMs": 85100, - "timestampMs": 85260, - "confidence": 0.999703 - }, - { - "text": " do", - "startMs": 85100, - "endMs": 85250, - "timestampMs": 85440, - "confidence": 0.99728 - }, - { - "text": " too", - "startMs": 85250, - "endMs": 85490, - "timestampMs": 85800, - "confidence": 0.721043 - }, - { - "text": ".", - "startMs": 85490, - "endMs": 85700, - "timestampMs": 86180, - "confidence": 0.982887 - }, - { - "text": " We", - "startMs": 85700, - "endMs": 86150, - "timestampMs": 86440, - "confidence": 0.997957 - }, - { - "text": " love", - "startMs": 86150, - "endMs": 86220, - "timestampMs": 86740, - "confidence": 0.998466 - }, - { - "text": " each", - "startMs": 86220, - "endMs": 86450, - "timestampMs": 87000, - "confidence": 0.999664 - }, - { - "text": " other", - "startMs": 86450, - "endMs": 86830, - "timestampMs": 87340, - "confidence": 0.999228 - }, - { - "text": ".\"", - "startMs": 86830, - "endMs": 87200, - "timestampMs": 87860, - "confidence": 0.964049 - }, - { - "text": " I", - "startMs": 87200, - "endMs": 87280, - "timestampMs": 88740, - "confidence": 0.999127 - }, - { - "text": " was", - "startMs": 87280, - "endMs": 88640, - "timestampMs": 88920, - "confidence": 0.999703 - }, - { - "text": " simultaneously", - "startMs": 88640, - "endMs": 88710, - "timestampMs": 89680, - "confidence": 0.998571 - }, - { - "text": " heart", - "startMs": 88710, - "endMs": 89130, - "timestampMs": 89960, - "confidence": 0.996854 - }, - { - "text": "broken", - "startMs": 89130, - "endMs": 89630, - "timestampMs": 90280, - "confidence": 0.993801 - }, - { - "text": " and", - "startMs": 89630, - "endMs": 89880, - "timestampMs": 90580, - "confidence": 0.986914 - }, - { - "text": " completely", - "startMs": 89880, - "endMs": 90870, - "timestampMs": 91100, - "confidence": 0.999455 - }, - { - "text": " pet", - "startMs": 90870, - "endMs": 90970, - "timestampMs": 91440, - "confidence": 0.999203 - }, - { - "text": "rified", - "startMs": 90970, - "endMs": 91470, - "timestampMs": 91720, - "confidence": 0.999718 - }, - { - "text": ".", - "startMs": 91470, - "endMs": 91760, - "timestampMs": 92540, - "confidence": 0.996447 - }, - { - "text": " At", - "startMs": 91760, - "endMs": 92090, - "timestampMs": 92780, - "confidence": 0.997463 - }, - { - "text": " his", - "startMs": 92090, - "endMs": 92640, - "timestampMs": 92920, - "confidence": 0.999569 - }, - { - "text": " birthday", - "startMs": 92640, - "endMs": 92670, - "timestampMs": 93200, - "confidence": 0.999481 - }, - { - "text": " party", - "startMs": 92670, - "endMs": 92980, - "timestampMs": 93560, - "confidence": 0.998079 - }, - { - "text": ",", - "startMs": 92980, - "endMs": 93130, - "timestampMs": 93660, - "confidence": 0.911998 - }, - { - "text": " I", - "startMs": 93130, - "endMs": 93180, - "timestampMs": 93760, - "confidence": 0.999317 - }, - { - "text": " found", - "startMs": 93180, - "endMs": 93520, - "timestampMs": 93940, - "confidence": 0.999176 - }, - { - "text": " him", - "startMs": 93520, - "endMs": 93720, - "timestampMs": 94120, - "confidence": 0.999661 - }, - { - "text": " p", - "startMs": 93720, - "endMs": 93800, - "timestampMs": 94340, - "confidence": 0.991501 - }, - { - "text": "outing", - "startMs": 93800, - "endMs": 94210, - "timestampMs": 94420, - "confidence": 0.998072 - }, - { - "text": " in", - "startMs": 94210, - "endMs": 94330, - "timestampMs": 94580, - "confidence": 0.998494 - }, - { - "text": " a", - "startMs": 94330, - "endMs": 94400, - "timestampMs": 94760, - "confidence": 0.997672 - }, - { - "text": " corner", - "startMs": 94400, - "endMs": 94810, - "timestampMs": 95020, - "confidence": 0.999763 - }, - { - "text": ",", - "startMs": 94810, - "endMs": 95040, - "timestampMs": 95160, - "confidence": 0.540098 - }, - { - "text": " alone", - "startMs": 95040, - "endMs": 95290, - "timestampMs": 95520, - "confidence": 0.963291 - }, - { - "text": ".", - "startMs": 95290, - "endMs": 95440, - "timestampMs": 95920, - "confidence": 0.994169 - }, - { - "text": " I", - "startMs": 95440, - "endMs": 96240, - "timestampMs": 96360, - "confidence": 0.675041 - }, - { - "text": " asked", - "startMs": 96240, - "endMs": 96480, - "timestampMs": 96580, - "confidence": 0.995328 - }, - { - "text": " him", - "startMs": 96480, - "endMs": 96600, - "timestampMs": 96700, - "confidence": 0.97293 - }, - { - "text": " what", - "startMs": 96600, - "endMs": 96750, - "timestampMs": 96800, - "confidence": 0.989227 - }, - { - "text": " was", - "startMs": 96750, - "endMs": 96880, - "timestampMs": 96960, - "confidence": 0.995585 - }, - { - "text": " wrong", - "startMs": 96880, - "endMs": 97120, - "timestampMs": 97240, - "confidence": 0.720633 - }, - { - "text": ",", - "startMs": 97120, - "endMs": 97120, - "timestampMs": 97240, - "confidence": 0.607628 - }, - { - "text": " and", - "startMs": 97120, - "endMs": 97290, - "timestampMs": 97380, - "confidence": 0.999767 - }, - { - "text": " he", - "startMs": 97290, - "endMs": 97400, - "timestampMs": 97540, - "confidence": 0.999283 - }, - { - "text": " replied", - "startMs": 97400, - "endMs": 97800, - "timestampMs": 97860, - "confidence": 0.999481 - }, - { - "text": " with", - "startMs": 97800, - "endMs": 98030, - "timestampMs": 98080, - "confidence": 0.994082 - }, - { - "text": ",", - "startMs": 98030, - "endMs": 98190, - "timestampMs": 98460, - "confidence": 0.977733 - }, - { - "text": " \"", - "startMs": 98190, - "endMs": 98240, - "timestampMs": 98460, - "confidence": 0.994602 - }, - { - "text": "I", - "startMs": 98240, - "endMs": 98240, - "timestampMs": 98740, - "confidence": 0.998597 - }, - { - "text": " wish", - "startMs": 98240, - "endMs": 98610, - "timestampMs": 98900, - "confidence": 0.999466 - }, - { - "text": " mom", - "startMs": 98610, - "endMs": 98640, - "timestampMs": 99080, - "confidence": 0.965145 - }, - { - "text": "my", - "startMs": 98640, - "endMs": 98750, - "timestampMs": 99200, - "confidence": 0.999817 - }, - { - "text": " were", - "startMs": 98750, - "endMs": 98980, - "timestampMs": 99340, - "confidence": 0.993491 - }, - { - "text": " here", - "startMs": 98980, - "endMs": 99210, - "timestampMs": 99740, - "confidence": 0.999035 - }, - { - "text": ".\"", - "startMs": 99210, - "endMs": 99520, - "timestampMs": 100080, - "confidence": 0.979114 - }, - { - "text": " \"", - "startMs": 99520, - "endMs": 100010, - "timestampMs": 100740, - "confidence": 0.850085 - }, - { - "text": "Mom", - "startMs": 100010, - "endMs": 100010, - "timestampMs": 100820, - "confidence": 0.991493 - }, - { - "text": "my", - "startMs": 100010, - "endMs": 100260, - "timestampMs": 100980, - "confidence": 0.999695 - }, - { - "text": " is", - "startMs": 100260, - "endMs": 100650, - "timestampMs": 101120, - "confidence": 0.997847 - }, - { - "text": " here", - "startMs": 100650, - "endMs": 101010, - "timestampMs": 101340, - "confidence": 0.99899 - }, - { - "text": ",", - "startMs": 101010, - "endMs": 101280, - "timestampMs": 101520, - "confidence": 0.936786 - }, - { - "text": " honey", - "startMs": 101280, - "endMs": 101480, - "timestampMs": 101680, - "confidence": 0.974944 - }, - { - "text": ".", - "startMs": 101480, - "endMs": 101600, - "timestampMs": 102180, - "confidence": 0.807449 - }, - { - "text": " See", - "startMs": 101600, - "endMs": 102290, - "timestampMs": 102540, - "confidence": 0.873712 - }, - { - "text": ",", - "startMs": 102290, - "endMs": 102560, - "timestampMs": 102720, - "confidence": 0.898431 - }, - { - "text": " I", - "startMs": 102560, - "endMs": 102640, - "timestampMs": 102820, - "confidence": 0.772708 - }, - { - "text": "'m", - "startMs": 102640, - "endMs": 102790, - "timestampMs": 102860, - "confidence": 0.997253 - }, - { - "text": " right", - "startMs": 102790, - "endMs": 103190, - "timestampMs": 103040, - "confidence": 0.991219 - }, - { - "text": " here", - "startMs": 103190, - "endMs": 103510, - "timestampMs": 103420, - "confidence": 0.990169 - }, - { - "text": ",\"", - "startMs": 103510, - "endMs": 103760, - "timestampMs": 103640, - "confidence": 0.887504 - }, - { - "text": " I", - "startMs": 103760, - "endMs": 103930, - "timestampMs": 104040, - "confidence": 0.998746 - }, - { - "text": " said", - "startMs": 103930, - "endMs": 104010, - "timestampMs": 104300, - "confidence": 0.999622 - }, - { - "text": ",", - "startMs": 104010, - "endMs": 104110, - "timestampMs": 104360, - "confidence": 0.867351 - }, - { - "text": " spinning", - "startMs": 104110, - "endMs": 104510, - "timestampMs": 104640, - "confidence": 0.998517 - }, - { - "text": " around", - "startMs": 104510, - "endMs": 104810, - "timestampMs": 104920, - "confidence": 0.998114 - }, - { - "text": " in", - "startMs": 104810, - "endMs": 104910, - "timestampMs": 105080, - "confidence": 0.998487 - }, - { - "text": " a", - "startMs": 104910, - "endMs": 104960, - "timestampMs": 105240, - "confidence": 0.998704 - }, - { - "text": " circle", - "startMs": 104960, - "endMs": 105260, - "timestampMs": 105500, - "confidence": 0.999718 - }, - { - "text": ".", - "startMs": 105260, - "endMs": 105440, - "timestampMs": 106400, - "confidence": 0.998746 - }, - { - "text": " My", - "startMs": 105440, - "endMs": 105950, - "timestampMs": 106660, - "confidence": 0.883902 - }, - { - "text": " son", - "startMs": 105950, - "endMs": 106480, - "timestampMs": 106880, - "confidence": 0.999131 - }, - { - "text": " had", - "startMs": 106480, - "endMs": 106500, - "timestampMs": 107060, - "confidence": 0.999375 - }, - { - "text": " a", - "startMs": 106500, - "endMs": 106610, - "timestampMs": 107220, - "confidence": 0.999653 - }, - { - "text": " meltdown", - "startMs": 106610, - "endMs": 107650, - "timestampMs": 107560, - "confidence": 0.995672 - }, - { - "text": ".", - "startMs": 107650, - "endMs": 108240, - "timestampMs": 108120, - "confidence": 0.996139 - }, - { - "text": " He", - "startMs": 108240, - "endMs": 108320, - "timestampMs": 108400, - "confidence": 0.904746 - }, - { - "text": " began", - "startMs": 108320, - "endMs": 108560, - "timestampMs": 108640, - "confidence": 0.986654 - }, - { - "text": " kicking", - "startMs": 108560, - "endMs": 108960, - "timestampMs": 108960, - "confidence": 0.890111 - }, - { - "text": " and", - "startMs": 108960, - "endMs": 109040, - "timestampMs": 109020, - "confidence": 0.792509 - }, - { - "text": " screaming", - "startMs": 109040, - "endMs": 109690, - "timestampMs": 109500, - "confidence": 0.999539 - }, - { - "text": " at", - "startMs": 109690, - "endMs": 109830, - "timestampMs": 109680, - "confidence": 0.999584 - }, - { - "text": " the", - "startMs": 109830, - "endMs": 110040, - "timestampMs": 109840, - "confidence": 0.999851 - }, - { - "text": " top", - "startMs": 110040, - "endMs": 110250, - "timestampMs": 109960, - "confidence": 0.999363 - }, - { - "text": " of", - "startMs": 110250, - "endMs": 110390, - "timestampMs": 110080, - "confidence": 0.999786 - }, - { - "text": " his", - "startMs": 110390, - "endMs": 110600, - "timestampMs": 110220, - "confidence": 0.999455 - }, - { - "text": " lungs", - "startMs": 110600, - "endMs": 111100, - "timestampMs": 110540, - "confidence": 0.999798 - }, - { - "text": ",", - "startMs": 111100, - "endMs": 111100, - "timestampMs": 111180, - "confidence": 0.461229 - }, - { - "text": " \"", - "startMs": 111100, - "endMs": 111170, - "timestampMs": 111400, - "confidence": 0.884522 - }, - { - "text": "No", - "startMs": 111170, - "endMs": 111310, - "timestampMs": 111400, - "confidence": 0.857966 - }, - { - "text": ",", - "startMs": 111310, - "endMs": 111450, - "timestampMs": 111620, - "confidence": 0.901724 - }, - { - "text": " no", - "startMs": 111450, - "endMs": 111590, - "timestampMs": 111980, - "confidence": 0.992449 - }, - { - "text": ",\"", - "startMs": 111590, - "endMs": 111800, - "timestampMs": 112100, - "confidence": 0.837519 - }, - { - "text": " over", - "startMs": 111800, - "endMs": 112280, - "timestampMs": 112560, - "confidence": 0.997691 - }, - { - "text": " and", - "startMs": 112280, - "endMs": 112300, - "timestampMs": 112720, - "confidence": 0.99923 - }, - { - "text": " over", - "startMs": 112300, - "endMs": 112590, - "timestampMs": 113000, - "confidence": 0.999905 - }, - { - "text": " again", - "startMs": 112590, - "endMs": 112950, - "timestampMs": 113380, - "confidence": 0.99865 - }, - { - "text": ".", - "startMs": 112950, - "endMs": 113280, - "timestampMs": 114220, - "confidence": 0.993388 - }, - { - "text": " Attend", - "startMs": 113280, - "endMs": 114220, - "timestampMs": 114480, - "confidence": 0.470726 - }, - { - "text": "ees", - "startMs": 114220, - "endMs": 114640, - "timestampMs": 114720, - "confidence": 0.999047 - }, - { - "text": " of", - "startMs": 114640, - "endMs": 114710, - "timestampMs": 114840, - "confidence": 0.924233 - }, - { - "text": " the", - "startMs": 114710, - "endMs": 114800, - "timestampMs": 115020, - "confidence": 0.912376 - }, - { - "text": " party", - "startMs": 114800, - "endMs": 115200, - "timestampMs": 115220, - "confidence": 0.901762 - }, - { - "text": " sent", - "startMs": 115200, - "endMs": 115460, - "timestampMs": 115440, - "confidence": 0.998868 - }, - { - "text": " us", - "startMs": 115460, - "endMs": 115650, - "timestampMs": 115600, - "confidence": 0.99923 - }, - { - "text": " concerned", - "startMs": 115650, - "endMs": 116180, - "timestampMs": 116080, - "confidence": 0.99854 - }, - { - "text": " looks", - "startMs": 116180, - "endMs": 116500, - "timestampMs": 116360, - "confidence": 0.999213 - }, - { - "text": " as", - "startMs": 116500, - "endMs": 116630, - "timestampMs": 116560, - "confidence": 0.997813 - }, - { - "text": " he", - "startMs": 116630, - "endMs": 116800, - "timestampMs": 116720, - "confidence": 0.999737 - }, - { - "text": " fl", - "startMs": 116800, - "endMs": 116890, - "timestampMs": 117000, - "confidence": 0.995458 - }, - { - "text": "ailed", - "startMs": 116890, - "endMs": 117210, - "timestampMs": 117140, - "confidence": 0.996675 - }, - { - "text": " and", - "startMs": 117210, - "endMs": 117400, - "timestampMs": 117380, - "confidence": 0.99795 - }, - { - "text": " scree", - "startMs": 117400, - "endMs": 117720, - "timestampMs": 117640, - "confidence": 0.987802 - }, - { - "text": "ched", - "startMs": 117720, - "endMs": 117900, - "timestampMs": 117820, - "confidence": 0.998207 - }, - { - "text": ",", - "startMs": 117900, - "endMs": 118160, - "timestampMs": 118300, - "confidence": 0.985496 - }, - { - "text": " \"", - "startMs": 118160, - "endMs": 118360, - "timestampMs": 118340, - "confidence": 0.985257 - }, - { - "text": "You", - "startMs": 118360, - "endMs": 118420, - "timestampMs": 118440, - "confidence": 0.982472 - }, - { - "text": "'re", - "startMs": 118420, - "endMs": 118650, - "timestampMs": 118500, - "confidence": 0.998372 - }, - { - "text": " not", - "startMs": 118650, - "endMs": 118820, - "timestampMs": 118620, - "confidence": 0.999142 - }, - { - "text": " my", - "startMs": 118820, - "endMs": 118950, - "timestampMs": 118820, - "confidence": 0.999462 - }, - { - "text": " mom", - "startMs": 118950, - "endMs": 119150, - "timestampMs": 119120, - "confidence": 0.99357 - }, - { - "text": ".", - "startMs": 119150, - "endMs": 119410, - "timestampMs": 119480, - "confidence": 0.519957 - }, - { - "text": " I", - "startMs": 119410, - "endMs": 119490, - "timestampMs": 119640, - "confidence": 0.998163 - }, - { - "text": " want", - "startMs": 119490, - "endMs": 119670, - "timestampMs": 119740, - "confidence": 0.995923 - }, - { - "text": " my", - "startMs": 119670, - "endMs": 119840, - "timestampMs": 119940, - "confidence": 0.997139 - }, - { - "text": " mom", - "startMs": 119840, - "endMs": 120010, - "timestampMs": 120380, - "confidence": 0.981605 - }, - { - "text": ".\"", - "startMs": 120010, - "endMs": 120240, - "timestampMs": 120660, - "confidence": 0.568155 - }, - { - "text": " I", - "startMs": 120240, - "endMs": 120320, - "timestampMs": 121500, - "confidence": 0.999436 - }, - { - "text": " was", - "startMs": 120320, - "endMs": 120590, - "timestampMs": 121660, - "confidence": 0.999916 - }, - { - "text": " utterly", - "startMs": 120590, - "endMs": 121410, - "timestampMs": 122100, - "confidence": 0.99963 - }, - { - "text": " humiliated", - "startMs": 121410, - "endMs": 122030, - "timestampMs": 122780, - "confidence": 0.998917 - }, - { - "text": " and", - "startMs": 122030, - "endMs": 122280, - "timestampMs": 123000, - "confidence": 0.999375 - }, - { - "text": " distraught", - "startMs": 122280, - "endMs": 123140, - "timestampMs": 123480, - "confidence": 0.999275 - }, - { - "text": ".", - "startMs": 123140, - "endMs": 123440, - "timestampMs": 124340, - "confidence": 0.998986 - }, - { - "text": " His", - "startMs": 123440, - "endMs": 124100, - "timestampMs": 124520, - "confidence": 0.975779 - }, - { - "text": " tant", - "startMs": 124100, - "endMs": 124370, - "timestampMs": 124880, - "confidence": 0.999274 - }, - { - "text": "rum", - "startMs": 124370, - "endMs": 124380, - "timestampMs": 125000, - "confidence": 0.999638 - }, - { - "text": " lasted", - "startMs": 124380, - "endMs": 124940, - "timestampMs": 125320, - "confidence": 0.998155 - }, - { - "text": " the", - "startMs": 124940, - "endMs": 125220, - "timestampMs": 125540, - "confidence": 0.998872 - }, - { - "text": " entire", - "startMs": 125220, - "endMs": 125780, - "timestampMs": 126020, - "confidence": 0.999173 - }, - { - "text": " car", - "startMs": 125780, - "endMs": 126130, - "timestampMs": 126280, - "confidence": 0.996951 - }, - { - "text": " ride", - "startMs": 126130, - "endMs": 126480, - "timestampMs": 126500, - "confidence": 0.963201 - }, - { - "text": " home", - "startMs": 126480, - "endMs": 126970, - "timestampMs": 126880, - "confidence": 0.97247 - }, - { - "text": ",", - "startMs": 126970, - "endMs": 127120, - "timestampMs": 127140, - "confidence": 0.957956 - }, - { - "text": " and", - "startMs": 127120, - "endMs": 127310, - "timestampMs": 127420, - "confidence": 0.999844 - }, - { - "text": " he", - "startMs": 127310, - "endMs": 127370, - "timestampMs": 127540, - "confidence": 0.999851 - }, - { - "text": " fought", - "startMs": 127370, - "endMs": 127680, - "timestampMs": 127740, - "confidence": 0.999491 - }, - { - "text": " with", - "startMs": 127680, - "endMs": 127940, - "timestampMs": 127940, - "confidence": 0.996196 - }, - { - "text": " me", - "startMs": 127940, - "endMs": 127980, - "timestampMs": 128100, - "confidence": 0.998833 - }, - { - "text": " tooth", - "startMs": 127980, - "endMs": 128240, - "timestampMs": 128320, - "confidence": 0.995459 - }, - { - "text": " and", - "startMs": 128240, - "endMs": 128390, - "timestampMs": 128560, - "confidence": 0.978547 - }, - { - "text": " nail", - "startMs": 128390, - "endMs": 128590, - "timestampMs": 128740, - "confidence": 0.999664 - }, - { - "text": " as", - "startMs": 128590, - "endMs": 128690, - "timestampMs": 128900, - "confidence": 0.999767 - }, - { - "text": " I", - "startMs": 128690, - "endMs": 128740, - "timestampMs": 129080, - "confidence": 0.999417 - }, - { - "text": " tried", - "startMs": 128740, - "endMs": 129100, - "timestampMs": 129240, - "confidence": 0.999546 - }, - { - "text": " putting", - "startMs": 129100, - "endMs": 129360, - "timestampMs": 129500, - "confidence": 0.998083 - }, - { - "text": " him", - "startMs": 129360, - "endMs": 129510, - "timestampMs": 129660, - "confidence": 0.999798 - }, - { - "text": " to", - "startMs": 129510, - "endMs": 129610, - "timestampMs": 129820, - "confidence": 0.999439 - }, - { - "text": " bed", - "startMs": 129610, - "endMs": 129760, - "timestampMs": 130060, - "confidence": 0.998464 - }, - { - "text": ".", - "startMs": 129760, - "endMs": 130000, - "timestampMs": 130900, - "confidence": 0.999394 - }, - { - "text": " All", - "startMs": 130000, - "endMs": 130190, - "timestampMs": 131240, - "confidence": 0.996166 - }, - { - "text": " night", - "startMs": 130190, - "endMs": 131080, - "timestampMs": 131480, - "confidence": 0.999554 - }, - { - "text": " long", - "startMs": 131080, - "endMs": 131090, - "timestampMs": 131840, - "confidence": 0.999577 - }, - { - "text": ",", - "startMs": 131090, - "endMs": 131260, - "timestampMs": 132040, - "confidence": 0.944685 - }, - { - "text": " he", - "startMs": 131260, - "endMs": 131430, - "timestampMs": 132240, - "confidence": 0.999626 - }, - { - "text": " repeated", - "startMs": 131430, - "endMs": 132170, - "timestampMs": 132600, - "confidence": 0.999295 - }, - { - "text": " his", - "startMs": 132170, - "endMs": 132440, - "timestampMs": 132840, - "confidence": 0.99926 - }, - { - "text": " chant", - "startMs": 132440, - "endMs": 132890, - "timestampMs": 133180, - "confidence": 0.999367 - }, - { - "text": ",", - "startMs": 132890, - "endMs": 133120, - "timestampMs": 133620, - "confidence": 0.900026 - }, - { - "text": " \"", - "startMs": 133120, - "endMs": 133250, - "timestampMs": 134040, - "confidence": 0.972945 - }, - { - "text": "I", - "startMs": 133250, - "endMs": 133970, - "timestampMs": 134200, - "confidence": 0.99867 - }, - { - "text": " want", - "startMs": 133970, - "endMs": 134030, - "timestampMs": 134340, - "confidence": 0.998075 - }, - { - "text": " my", - "startMs": 134030, - "endMs": 134250, - "timestampMs": 134520, - "confidence": 0.999645 - }, - { - "text": " mom", - "startMs": 134250, - "endMs": 134670, - "timestampMs": 134860, - "confidence": 0.997543 - }, - { - "text": ".", - "startMs": 134670, - "endMs": 135210, - "timestampMs": 135260, - "confidence": 0.647014 - }, - { - "text": " I", - "startMs": 135210, - "endMs": 135290, - "timestampMs": 135400, - "confidence": 0.980065 - }, - { - "text": " want", - "startMs": 135290, - "endMs": 135600, - "timestampMs": 135540, - "confidence": 0.999527 - }, - { - "text": " my", - "startMs": 135600, - "endMs": 135790, - "timestampMs": 135760, - "confidence": 0.999344 - }, - { - "text": " mom", - "startMs": 135790, - "endMs": 136080, - "timestampMs": 136160, - "confidence": 0.996094 - }, - { - "text": ",\"", - "startMs": 136080, - "endMs": 136550, - "timestampMs": 136400, - "confidence": 0.750831 - }, - { - "text": " over", - "startMs": 136550, - "endMs": 136800, - "timestampMs": 136820, - "confidence": 0.956935 - }, - { - "text": " and", - "startMs": 136800, - "endMs": 136960, - "timestampMs": 137020, - "confidence": 0.989068 - }, - { - "text": " over", - "startMs": 136960, - "endMs": 137280, - "timestampMs": 137300, - "confidence": 0.957258 - }, - { - "text": " for", - "startMs": 137280, - "endMs": 137520, - "timestampMs": 137560, - "confidence": 0.835676 - }, - { - "text": " hours", - "startMs": 137520, - "endMs": 137770, - "timestampMs": 138000, - "confidence": 0.957183 - }, - { - "text": ".", - "startMs": 137770, - "endMs": 137920, - "timestampMs": 138620, - "confidence": 0.991575 - }, - { - "text": " Nothing", - "startMs": 138740, - "endMs": 139070, - "timestampMs": 139020, - "confidence": 0.999607 - }, - { - "text": " I", - "startMs": 139070, - "endMs": 139130, - "timestampMs": 139220, - "confidence": 0.999558 - }, - { - "text": " did", - "startMs": 139130, - "endMs": 139310, - "timestampMs": 139400, - "confidence": 0.999836 - }, - { - "text": " would", - "startMs": 139310, - "endMs": 139620, - "timestampMs": 139600, - "confidence": 0.999298 - }, - { - "text": " make", - "startMs": 139620, - "endMs": 139870, - "timestampMs": 139780, - "confidence": 0.999542 - }, - { - "text": " him", - "startMs": 139870, - "endMs": 140160, - "timestampMs": 139900, - "confidence": 0.999798 - }, - { - "text": " be", - "startMs": 140160, - "endMs": 140170, - "timestampMs": 140100, - "confidence": 0.998955 - }, - { - "text": " quiet", - "startMs": 140170, - "endMs": 140520, - "timestampMs": 140480, - "confidence": 0.998053 - }, - { - "text": ",", - "startMs": 140520, - "endMs": 140810, - "timestampMs": 140740, - "confidence": 0.948889 - }, - { - "text": " and", - "startMs": 140810, - "endMs": 140860, - "timestampMs": 140980, - "confidence": 0.98119 - }, - { - "text": " eventually", - "startMs": 140860, - "endMs": 141400, - "timestampMs": 141340, - "confidence": 0.996394 - }, - { - "text": " I", - "startMs": 141400, - "endMs": 141450, - "timestampMs": 141520, - "confidence": 0.990093 - }, - { - "text": " surrendered", - "startMs": 141450, - "endMs": 142240, - "timestampMs": 142000, - "confidence": 0.995397 - }, - { - "text": ",", - "startMs": 142240, - "endMs": 142240, - "timestampMs": 142360, - "confidence": 0.997598 - }, - { - "text": " falling", - "startMs": 142240, - "endMs": 142580, - "timestampMs": 142620, - "confidence": 0.999127 - }, - { - "text": " asleep", - "startMs": 142580, - "endMs": 142870, - "timestampMs": 143000, - "confidence": 0.999249 - }, - { - "text": " to", - "startMs": 142870, - "endMs": 142960, - "timestampMs": 143160, - "confidence": 0.999809 - }, - { - "text": " his", - "startMs": 142960, - "endMs": 143100, - "timestampMs": 143300, - "confidence": 0.9996 - }, - { - "text": " rhyth", - "startMs": 143100, - "endMs": 143340, - "timestampMs": 143500, - "confidence": 0.999306 - }, - { - "text": "mic", - "startMs": 143340, - "endMs": 143480, - "timestampMs": 143660, - "confidence": 0.999865 - }, - { - "text": " shouting", - "startMs": 143480, - "endMs": 143870, - "timestampMs": 144040, - "confidence": 0.999518 - }, - { - "text": ".", - "startMs": 143870, - "endMs": 144070, - "timestampMs": 144500, - "confidence": 0.999378 - }, - { - "text": " I", - "startMs": 144070, - "endMs": 144750, - "timestampMs": 145000, - "confidence": 0.785974 - }, - { - "text": " awoke", - "startMs": 144750, - "endMs": 144910, - "timestampMs": 145220, - "confidence": 0.991367 - }, - { - "text": " to", - "startMs": 144910, - "endMs": 144970, - "timestampMs": 145420, - "confidence": 0.999535 - }, - { - "text": " find", - "startMs": 144970, - "endMs": 145450, - "timestampMs": 145580, - "confidence": 0.999455 - }, - { - "text": " my", - "startMs": 145450, - "endMs": 145640, - "timestampMs": 145780, - "confidence": 0.999352 - }, - { - "text": " boy", - "startMs": 145640, - "endMs": 146000, - "timestampMs": 146000, - "confidence": 0.999098 - }, - { - "text": " le", - "startMs": 146000, - "endMs": 146110, - "timestampMs": 146300, - "confidence": 0.551164 - }, - { - "text": "ering", - "startMs": 146110, - "endMs": 146380, - "timestampMs": 146400, - "confidence": 0.999073 - }, - { - "text": " over", - "startMs": 146380, - "endMs": 146600, - "timestampMs": 146640, - "confidence": 0.998064 - }, - { - "text": " me", - "startMs": 146600, - "endMs": 146720, - "timestampMs": 146820, - "confidence": 0.995311 - }, - { - "text": " as", - "startMs": 146720, - "endMs": 146870, - "timestampMs": 146940, - "confidence": 0.934586 - }, - { - "text": " I", - "startMs": 146870, - "endMs": 146960, - "timestampMs": 147100, - "confidence": 0.828056 - }, - { - "text": " slept", - "startMs": 146960, - "endMs": 147410, - "timestampMs": 147420, - "confidence": 0.899743 - }, - { - "text": ".", - "startMs": 147410, - "endMs": 147760, - "timestampMs": 147920, - "confidence": 0.954196 - }, - { - "text": " His", - "startMs": 147760, - "endMs": 147950, - "timestampMs": 148080, - "confidence": 0.999005 - }, - { - "text": " eyes", - "startMs": 147950, - "endMs": 148200, - "timestampMs": 148300, - "confidence": 0.99979 - }, - { - "text": " were", - "startMs": 148200, - "endMs": 148450, - "timestampMs": 148520, - "confidence": 0.999645 - }, - { - "text": " dead", - "startMs": 148450, - "endMs": 148760, - "timestampMs": 148700, - "confidence": 0.999314 - }, - { - "text": "pan", - "startMs": 148760, - "endMs": 148880, - "timestampMs": 148940, - "confidence": 0.993316 - }, - { - "text": " and", - "startMs": 148880, - "endMs": 149070, - "timestampMs": 149160, - "confidence": 0.999478 - }, - { - "text": " hollow", - "startMs": 149070, - "endMs": 149450, - "timestampMs": 149480, - "confidence": 0.99939 - }, - { - "text": ",", - "startMs": 149450, - "endMs": 149570, - "timestampMs": 149680, - "confidence": 0.661242 - }, - { - "text": " and", - "startMs": 149570, - "endMs": 149760, - "timestampMs": 149760, - "confidence": 0.99787 - }, - { - "text": " his", - "startMs": 149760, - "endMs": 149950, - "timestampMs": 149900, - "confidence": 0.999748 - }, - { - "text": " arms", - "startMs": 149950, - "endMs": 150200, - "timestampMs": 150200, - "confidence": 0.999203 - }, - { - "text": " d", - "startMs": 150200, - "endMs": 150280, - "timestampMs": 150520, - "confidence": 0.999174 - }, - { - "text": "angled", - "startMs": 150280, - "endMs": 150630, - "timestampMs": 150520, - "confidence": 0.994552 - }, - { - "text": " to", - "startMs": 150630, - "endMs": 150750, - "timestampMs": 150720, - "confidence": 0.999748 - }, - { - "text": " the", - "startMs": 150750, - "endMs": 150940, - "timestampMs": 150880, - "confidence": 0.999539 - }, - { - "text": " sides", - "startMs": 150940, - "endMs": 151310, - "timestampMs": 151200, - "confidence": 0.997383 - }, - { - "text": ",", - "startMs": 151310, - "endMs": 151440, - "timestampMs": 151580, - "confidence": 0.987065 - }, - { - "text": " almost", - "startMs": 151440, - "endMs": 151890, - "timestampMs": 151840, - "confidence": 0.996535 - }, - { - "text": " lifeless", - "startMs": 151890, - "endMs": 152410, - "timestampMs": 152260, - "confidence": 0.999207 - }, - { - "text": ".", - "startMs": 152410, - "endMs": 152550, - "timestampMs": 152940, - "confidence": 0.998765 - }, - { - "text": " He", - "startMs": 152550, - "endMs": 153300, - "timestampMs": 153420, - "confidence": 0.99593 - }, - { - "text": " whispered", - "startMs": 153300, - "endMs": 153400, - "timestampMs": 153700, - "confidence": 0.999563 - }, - { - "text": " one", - "startMs": 153400, - "endMs": 153640, - "timestampMs": 153940, - "confidence": 0.99774 - }, - { - "text": " more", - "startMs": 153640, - "endMs": 153890, - "timestampMs": 154100, - "confidence": 0.998433 - }, - { - "text": " time", - "startMs": 153890, - "endMs": 154180, - "timestampMs": 154440, - "confidence": 0.998334 - }, - { - "text": ",", - "startMs": 154180, - "endMs": 154320, - "timestampMs": 154480, - "confidence": 0.746023 - }, - { - "text": " an", - "startMs": 154320, - "endMs": 154540, - "timestampMs": 154620, - "confidence": 0.769055 - }, - { - "text": " icy", - "startMs": 154540, - "endMs": 154880, - "timestampMs": 154900, - "confidence": 0.991244 - }, - { - "text": " heart", - "startMs": 154880, - "endMs": 155130, - "timestampMs": 155140, - "confidence": 0.937827 - }, - { - "text": " shattering", - "startMs": 155130, - "endMs": 155760, - "timestampMs": 155540, - "confidence": 0.644503 - }, - { - "text": ",", - "startMs": 155760, - "endMs": 155760, - "timestampMs": 155880, - "confidence": 0.956357 - }, - { - "text": " \"", - "startMs": 155760, - "endMs": 155990, - "timestampMs": 155980, - "confidence": 0.635941 - }, - { - "text": "You", - "startMs": 155990, - "endMs": 156040, - "timestampMs": 156080, - "confidence": 0.99156 - }, - { - "text": "'re", - "startMs": 156040, - "endMs": 156290, - "timestampMs": 156120, - "confidence": 0.996599 - }, - { - "text": " not", - "startMs": 156290, - "endMs": 156460, - "timestampMs": 156260, - "confidence": 0.990029 - }, - { - "text": " my", - "startMs": 156460, - "endMs": 156600, - "timestampMs": 156480, - "confidence": 0.996987 - }, - { - "text": " mom", - "startMs": 156600, - "endMs": 156800, - "timestampMs": 156760, - "confidence": 0.993411 - }, - { - "text": ".", - "startMs": 156800, - "endMs": 157200, - "timestampMs": 156960, - "confidence": 0.773297 - }, - { - "text": " I", - "startMs": 157200, - "endMs": 157220, - "timestampMs": 157340, - "confidence": 0.713903 - }, - { - "text": " want", - "startMs": 157220, - "endMs": 157360, - "timestampMs": 157340, - "confidence": 0.911936 - } -] diff --git a/remotion/captions/captions-1769673372841.json b/remotion/captions/captions-1769673372841.json new file mode 100644 index 0000000..8fc436e --- /dev/null +++ b/remotion/captions/captions-1769673372841.json @@ -0,0 +1,842 @@ +[ + { + "text": "My", + "startMs": 30, + "endMs": 120, + "timestampMs": 180, + "confidence": 0.908703 + }, + { + "text": " sister", + "startMs": 120, + "endMs": 490, + "timestampMs": 500, + "confidence": 0.9983 + }, + { + "text": " stole", + "startMs": 490, + "endMs": 800, + "timestampMs": 820, + "confidence": 0.99803 + }, + { + "text": " my", + "startMs": 800, + "endMs": 920, + "timestampMs": 1060, + "confidence": 0.999195 + }, + { + "text": " wedding", + "startMs": 920, + "endMs": 1340, + "timestampMs": 1280, + "confidence": 0.999157 + }, + { + "text": " dress", + "startMs": 1340, + "endMs": 1660, + "timestampMs": 1720, + "confidence": 0.999253 + }, + { + "text": ".", + "startMs": 1660, + "endMs": 1880, + "timestampMs": 4600, + "confidence": 0.972292 + }, + { + "text": " I", + "startMs": 1880, + "endMs": 2170, + "timestampMs": 4740, + "confidence": 0.970458 + }, + { + "text": " am", + "startMs": 2170, + "endMs": 4630, + "timestampMs": 4920, + "confidence": 0.992888 + }, + { + "text": " furious", + "startMs": 4630, + "endMs": 4770, + "timestampMs": 5400, + "confidence": 0.995949 + }, + { + "text": ".", + "startMs": 4770, + "endMs": 5640, + "timestampMs": 5780, + "confidence": 0.748954 + }, + { + "text": " My", + "startMs": 5640, + "endMs": 5770, + "timestampMs": 5860, + "confidence": 0.999054 + }, + { + "text": " younger", + "startMs": 5770, + "endMs": 6230, + "timestampMs": 6100, + "confidence": 0.999592 + }, + { + "text": " sister", + "startMs": 6230, + "endMs": 6630, + "timestampMs": 6600, + "confidence": 0.999607 + }, + { + "text": ",", + "startMs": 6630, + "endMs": 6840, + "timestampMs": 6900, + "confidence": 0.743727 + }, + { + "text": " always", + "startMs": 6840, + "endMs": 7180, + "timestampMs": 7100, + "confidence": 0.937627 + }, + { + "text": " competing", + "startMs": 7180, + "endMs": 7800, + "timestampMs": 7580, + "confidence": 0.997687 + }, + { + "text": ",", + "startMs": 7800, + "endMs": 7800, + "timestampMs": 7920, + "confidence": 0.960686 + }, + { + "text": " just", + "startMs": 7800, + "endMs": 8060, + "timestampMs": 8040, + "confidence": 0.999485 + }, + { + "text": " announced", + "startMs": 8060, + "endMs": 8630, + "timestampMs": 8400, + "confidence": 0.999169 + }, + { + "text": " her", + "startMs": 8630, + "endMs": 8810, + "timestampMs": 8580, + "confidence": 0.998708 + }, + { + "text": " engagement", + "startMs": 8810, + "endMs": 9680, + "timestampMs": 9000, + "confidence": 0.999794 + }, + { + "text": ".", + "startMs": 9680, + "endMs": 9680, + "timestampMs": 9740, + "confidence": 0.988576 + }, + { + "text": " Her", + "startMs": 9680, + "endMs": 9910, + "timestampMs": 9860, + "confidence": 0.998471 + }, + { + "text": " dream", + "startMs": 9910, + "endMs": 10290, + "timestampMs": 10200, + "confidence": 0.995372 + }, + { + "text": " wedding", + "startMs": 10290, + "endMs": 10830, + "timestampMs": 10440, + "confidence": 0.998186 + }, + { + "text": " dress", + "startMs": 10830, + "endMs": 11210, + "timestampMs": 10760, + "confidence": 0.999622 + }, + { + "text": " is", + "startMs": 11210, + "endMs": 11360, + "timestampMs": 10940, + "confidence": 0.986109 + }, + { + "text": " my", + "startMs": 11360, + "endMs": 11510, + "timestampMs": 11120, + "confidence": 0.999546 + }, + { + "text": " exact", + "startMs": 11510, + "endMs": 11890, + "timestampMs": 11440, + "confidence": 0.999729 + }, + { + "text": " design", + "startMs": 11890, + "endMs": 12640, + "timestampMs": 11880, + "confidence": 0.999813 + }, + { + "text": ".", + "startMs": 12640, + "endMs": 12640, + "timestampMs": 12680, + "confidence": 0.997687 + }, + { + "text": " For", + "startMs": 12640, + "endMs": 12890, + "timestampMs": 12820, + "confidence": 0.999722 + }, + { + "text": " years", + "startMs": 12890, + "endMs": 13310, + "timestampMs": 13160, + "confidence": 0.99976 + }, + { + "text": ",", + "startMs": 13310, + "endMs": 13480, + "timestampMs": 13280, + "confidence": 0.816827 + }, + { + "text": " I", + "startMs": 13480, + "endMs": 13490, + "timestampMs": 13360, + "confidence": 0.955837 + }, + { + "text": " shared", + "startMs": 13490, + "endMs": 13620, + "timestampMs": 13600, + "confidence": 0.995984 + }, + { + "text": " my", + "startMs": 13620, + "endMs": 13710, + "timestampMs": 13760, + "confidence": 0.984639 + }, + { + "text": " perfect", + "startMs": 13710, + "endMs": 14180, + "timestampMs": 14140, + "confidence": 0.996219 + }, + { + "text": " gown", + "startMs": 14180, + "endMs": 14310, + "timestampMs": 14380, + "confidence": 0.995889 + }, + { + "text": " sketches", + "startMs": 14310, + "endMs": 14810, + "timestampMs": 14680, + "confidence": 0.991673 + }, + { + "text": " with", + "startMs": 14810, + "endMs": 15120, + "timestampMs": 14920, + "confidence": 0.91811 + }, + { + "text": " her", + "startMs": 15120, + "endMs": 15400, + "timestampMs": 15160, + "confidence": 0.9995 + }, + { + "text": ",", + "startMs": 15400, + "endMs": 15400, + "timestampMs": 15540, + "confidence": 0.915926 + }, + { + "text": " trusting", + "startMs": 15400, + "endMs": 16090, + "timestampMs": 15780, + "confidence": 0.998091 + }, + { + "text": " her", + "startMs": 16090, + "endMs": 16880, + "timestampMs": 16100, + "confidence": 0.999718 + }, + { + "text": ".", + "startMs": 16880, + "endMs": 16880, + "timestampMs": 16880, + "confidence": 0.977969 + }, + { + "text": " I", + "startMs": 16880, + "endMs": 16950, + "timestampMs": 17020, + "confidence": 0.999928 + }, + { + "text": " described", + "startMs": 16950, + "endMs": 17600, + "timestampMs": 17380, + "confidence": 0.998452 + }, + { + "text": " its", + "startMs": 17600, + "endMs": 17870, + "timestampMs": 17540, + "confidence": 0.957233 + }, + { + "text": " unique", + "startMs": 17870, + "endMs": 18240, + "timestampMs": 17820, + "confidence": 0.999588 + }, + { + "text": " lace", + "startMs": 18240, + "endMs": 18520, + "timestampMs": 18140, + "confidence": 0.998108 + }, + { + "text": " and", + "startMs": 18520, + "endMs": 18730, + "timestampMs": 18400, + "confidence": 0.989383 + }, + { + "text": " silhouette", + "startMs": 18730, + "endMs": 19700, + "timestampMs": 18760, + "confidence": 0.999382 + }, + { + "text": ".", + "startMs": 19700, + "endMs": 19700, + "timestampMs": 19660, + "confidence": 0.994731 + }, + { + "text": " Now", + "startMs": 19700, + "endMs": 19950, + "timestampMs": 19900, + "confidence": 0.999661 + }, + { + "text": " she", + "startMs": 19950, + "endMs": 20200, + "timestampMs": 20080, + "confidence": 0.876849 + }, + { + "text": " claims", + "startMs": 20200, + "endMs": 20710, + "timestampMs": 20380, + "confidence": 0.99883 + }, + { + "text": " the", + "startMs": 20710, + "endMs": 20950, + "timestampMs": 20560, + "confidence": 0.997406 + }, + { + "text": " idea", + "startMs": 20950, + "endMs": 21300, + "timestampMs": 20800, + "confidence": 0.99958 + }, + { + "text": " is", + "startMs": 21300, + "endMs": 21460, + "timestampMs": 21040, + "confidence": 0.99899 + }, + { + "text": " hers", + "startMs": 21460, + "endMs": 22100, + "timestampMs": 21360, + "confidence": 0.998304 + }, + { + "text": ".", + "startMs": 22100, + "endMs": 22100, + "timestampMs": 22060, + "confidence": 0.991696 + }, + { + "text": " She", + "startMs": 22100, + "endMs": 22300, + "timestampMs": 22300, + "confidence": 0.999554 + }, + { + "text": " denies", + "startMs": 22300, + "endMs": 22820, + "timestampMs": 22600, + "confidence": 0.999192 + }, + { + "text": " seeing", + "startMs": 22820, + "endMs": 23120, + "timestampMs": 22940, + "confidence": 0.999207 + }, + { + "text": " my", + "startMs": 23120, + "endMs": 23270, + "timestampMs": 23160, + "confidence": 0.999744 + }, + { + "text": " designs", + "startMs": 23270, + "endMs": 23760, + "timestampMs": 23640, + "confidence": 0.999611 + }, + { + "text": ",", + "startMs": 23760, + "endMs": 23760, + "timestampMs": 23700, + "confidence": 0.807808 + }, + { + "text": " even", + "startMs": 23760, + "endMs": 24010, + "timestampMs": 24000, + "confidence": 0.999386 + }, + { + "text": " when", + "startMs": 24010, + "endMs": 24260, + "timestampMs": 24160, + "confidence": 0.999413 + }, + { + "text": " our", + "startMs": 24260, + "endMs": 24440, + "timestampMs": 24320, + "confidence": 0.992559 + }, + { + "text": " mother", + "startMs": 24440, + "endMs": 24800, + "timestampMs": 24500, + "confidence": 0.997995 + }, + { + "text": " reminded", + "startMs": 24800, + "endMs": 25490, + "timestampMs": 24860, + "confidence": 0.999542 + }, + { + "text": " her", + "startMs": 25490, + "endMs": 25720, + "timestampMs": 25180, + "confidence": 0.999703 + }, + { + "text": ".", + "startMs": 25720, + "endMs": 25720, + "timestampMs": 25800, + "confidence": 0.860285 + }, + { + "text": " Mom", + "startMs": 25720, + "endMs": 26020, + "timestampMs": 25960, + "confidence": 0.995287 + }, + { + "text": " wants", + "startMs": 26020, + "endMs": 26520, + "timestampMs": 26200, + "confidence": 0.999153 + }, + { + "text": " peace", + "startMs": 26520, + "endMs": 27320, + "timestampMs": 26660, + "confidence": 0.995148 + }, + { + "text": ".", + "startMs": 27320, + "endMs": 27320, + "timestampMs": 27320, + "confidence": 0.969518 + }, + { + "text": " This", + "startMs": 27320, + "endMs": 27620, + "timestampMs": 27540, + "confidence": 0.996333 + }, + { + "text": " betrayal", + "startMs": 27620, + "endMs": 28210, + "timestampMs": 27840, + "confidence": 0.963931 + }, + { + "text": " is", + "startMs": 28210, + "endMs": 28360, + "timestampMs": 28080, + "confidence": 0.99955 + }, + { + "text": " painful", + "startMs": 28360, + "endMs": 29120, + "timestampMs": 28460, + "confidence": 0.999844 + }, + { + "text": ".", + "startMs": 29120, + "endMs": 29120, + "timestampMs": 29080, + "confidence": 0.990705 + }, + { + "text": " It", + "startMs": 29160, + "endMs": 29370, + "timestampMs": 29280, + "confidence": 0.999077 + }, + { + "text": " symbol", + "startMs": 29370, + "endMs": 29660, + "timestampMs": 29580, + "confidence": 0.99951 + }, + { + "text": "izes", + "startMs": 29660, + "endMs": 29940, + "timestampMs": 29840, + "confidence": 0.9895 + }, + { + "text": " her", + "startMs": 29940, + "endMs": 30130, + "timestampMs": 30040, + "confidence": 0.999329 + }, + { + "text": " need", + "startMs": 30130, + "endMs": 30400, + "timestampMs": 30260, + "confidence": 0.999203 + }, + { + "text": " to", + "startMs": 30400, + "endMs": 30530, + "timestampMs": 30460, + "confidence": 0.993995 + }, + { + "text": " diminish", + "startMs": 30530, + "endMs": 31080, + "timestampMs": 30740, + "confidence": 0.999291 + }, + { + "text": " me", + "startMs": 31080, + "endMs": 31400, + "timestampMs": 31140, + "confidence": 0.998224 + }, + { + "text": ",", + "startMs": 31400, + "endMs": 31400, + "timestampMs": 31440, + "confidence": 0.926698 + }, + { + "text": " stealing", + "startMs": 31400, + "endMs": 32140, + "timestampMs": 31740, + "confidence": 0.996668 + }, + { + "text": " my", + "startMs": 32140, + "endMs": 32320, + "timestampMs": 31960, + "confidence": 0.999752 + }, + { + "text": " future", + "startMs": 32320, + "endMs": 33160, + "timestampMs": 32300, + "confidence": 0.999912 + }, + { + "text": ".", + "startMs": 33160, + "endMs": 33160, + "timestampMs": 33160, + "confidence": 0.996953 + }, + { + "text": " I", + "startMs": 33160, + "endMs": 33230, + "timestampMs": 33280, + "confidence": 0.99992 + }, + { + "text": " want", + "startMs": 33230, + "endMs": 33550, + "timestampMs": 33400, + "confidence": 0.849308 + }, + { + "text": " to", + "startMs": 33550, + "endMs": 33690, + "timestampMs": 33520, + "confidence": 0.999588 + }, + { + "text": " expose", + "startMs": 33690, + "endMs": 34170, + "timestampMs": 33800, + "confidence": 0.999744 + }, + { + "text": " her", + "startMs": 34170, + "endMs": 34380, + "timestampMs": 34020, + "confidence": 0.999455 + }, + { + "text": " publicly", + "startMs": 34380, + "endMs": 35260, + "timestampMs": 34420, + "confidence": 0.998289 + }, + { + "text": ".", + "startMs": 35260, + "endMs": 35260, + "timestampMs": 35260, + "confidence": 0.996729 + }, + { + "text": " Should", + "startMs": 35260, + "endMs": 35670, + "timestampMs": 35400, + "confidence": 0.999058 + }, + { + "text": " I", + "startMs": 35670, + "endMs": 35780, + "timestampMs": 35540, + "confidence": 0.99958 + }, + { + "text": " let", + "startMs": 35780, + "endMs": 35930, + "timestampMs": 35640, + "confidence": 0.999432 + }, + { + "text": " it", + "startMs": 35930, + "endMs": 36060, + "timestampMs": 35760, + "confidence": 0.999096 + }, + { + "text": " go", + "startMs": 36060, + "endMs": 36240, + "timestampMs": 36060, + "confidence": 0.999851 + }, + { + "text": " or", + "startMs": 36240, + "endMs": 36320, + "timestampMs": 36360, + "confidence": 0.250181 + }, + { + "text": " would", + "startMs": 36320, + "endMs": 36570, + "timestampMs": 36500, + "confidence": 0.991151 + }, + { + "text": " I", + "startMs": 36570, + "endMs": 36620, + "timestampMs": 36600, + "confidence": 0.997554 + }, + { + "text": " be", + "startMs": 36620, + "endMs": 36740, + "timestampMs": 36740, + "confidence": 0.997995 + }, + { + "text": " the", + "startMs": 36740, + "endMs": 36910, + "timestampMs": 36920, + "confidence": 0.983558 + }, + { + "text": " asshole", + "startMs": 36910, + "endMs": 37320, + "timestampMs": 37180, + "confidence": 0.975612 + }, + { + "text": " for", + "startMs": 37320, + "endMs": 37520, + "timestampMs": 37400, + "confidence": 0.991212 + }, + { + "text": " a", + "startMs": 37520, + "endMs": 37540, + "timestampMs": 37560, + "confidence": 0.998605 + }, + { + "text": " scene", + "startMs": 37540, + "endMs": 37830, + "timestampMs": 37760, + "confidence": 0.999066 + }, + { + "text": "?", + "startMs": 37830, + "endMs": 38040, + "timestampMs": 38020, + "confidence": 0.987321 + } +] \ No newline at end of file diff --git a/remotion/captions/captions-1769865347049.json b/remotion/captions/captions-1769865347049.json new file mode 100644 index 0000000..8fc436e --- /dev/null +++ b/remotion/captions/captions-1769865347049.json @@ -0,0 +1,842 @@ +[ + { + "text": "My", + "startMs": 30, + "endMs": 120, + "timestampMs": 180, + "confidence": 0.908703 + }, + { + "text": " sister", + "startMs": 120, + "endMs": 490, + "timestampMs": 500, + "confidence": 0.9983 + }, + { + "text": " stole", + "startMs": 490, + "endMs": 800, + "timestampMs": 820, + "confidence": 0.99803 + }, + { + "text": " my", + "startMs": 800, + "endMs": 920, + "timestampMs": 1060, + "confidence": 0.999195 + }, + { + "text": " wedding", + "startMs": 920, + "endMs": 1340, + "timestampMs": 1280, + "confidence": 0.999157 + }, + { + "text": " dress", + "startMs": 1340, + "endMs": 1660, + "timestampMs": 1720, + "confidence": 0.999253 + }, + { + "text": ".", + "startMs": 1660, + "endMs": 1880, + "timestampMs": 4600, + "confidence": 0.972292 + }, + { + "text": " I", + "startMs": 1880, + "endMs": 2170, + "timestampMs": 4740, + "confidence": 0.970458 + }, + { + "text": " am", + "startMs": 2170, + "endMs": 4630, + "timestampMs": 4920, + "confidence": 0.992888 + }, + { + "text": " furious", + "startMs": 4630, + "endMs": 4770, + "timestampMs": 5400, + "confidence": 0.995949 + }, + { + "text": ".", + "startMs": 4770, + "endMs": 5640, + "timestampMs": 5780, + "confidence": 0.748954 + }, + { + "text": " My", + "startMs": 5640, + "endMs": 5770, + "timestampMs": 5860, + "confidence": 0.999054 + }, + { + "text": " younger", + "startMs": 5770, + "endMs": 6230, + "timestampMs": 6100, + "confidence": 0.999592 + }, + { + "text": " sister", + "startMs": 6230, + "endMs": 6630, + "timestampMs": 6600, + "confidence": 0.999607 + }, + { + "text": ",", + "startMs": 6630, + "endMs": 6840, + "timestampMs": 6900, + "confidence": 0.743727 + }, + { + "text": " always", + "startMs": 6840, + "endMs": 7180, + "timestampMs": 7100, + "confidence": 0.937627 + }, + { + "text": " competing", + "startMs": 7180, + "endMs": 7800, + "timestampMs": 7580, + "confidence": 0.997687 + }, + { + "text": ",", + "startMs": 7800, + "endMs": 7800, + "timestampMs": 7920, + "confidence": 0.960686 + }, + { + "text": " just", + "startMs": 7800, + "endMs": 8060, + "timestampMs": 8040, + "confidence": 0.999485 + }, + { + "text": " announced", + "startMs": 8060, + "endMs": 8630, + "timestampMs": 8400, + "confidence": 0.999169 + }, + { + "text": " her", + "startMs": 8630, + "endMs": 8810, + "timestampMs": 8580, + "confidence": 0.998708 + }, + { + "text": " engagement", + "startMs": 8810, + "endMs": 9680, + "timestampMs": 9000, + "confidence": 0.999794 + }, + { + "text": ".", + "startMs": 9680, + "endMs": 9680, + "timestampMs": 9740, + "confidence": 0.988576 + }, + { + "text": " Her", + "startMs": 9680, + "endMs": 9910, + "timestampMs": 9860, + "confidence": 0.998471 + }, + { + "text": " dream", + "startMs": 9910, + "endMs": 10290, + "timestampMs": 10200, + "confidence": 0.995372 + }, + { + "text": " wedding", + "startMs": 10290, + "endMs": 10830, + "timestampMs": 10440, + "confidence": 0.998186 + }, + { + "text": " dress", + "startMs": 10830, + "endMs": 11210, + "timestampMs": 10760, + "confidence": 0.999622 + }, + { + "text": " is", + "startMs": 11210, + "endMs": 11360, + "timestampMs": 10940, + "confidence": 0.986109 + }, + { + "text": " my", + "startMs": 11360, + "endMs": 11510, + "timestampMs": 11120, + "confidence": 0.999546 + }, + { + "text": " exact", + "startMs": 11510, + "endMs": 11890, + "timestampMs": 11440, + "confidence": 0.999729 + }, + { + "text": " design", + "startMs": 11890, + "endMs": 12640, + "timestampMs": 11880, + "confidence": 0.999813 + }, + { + "text": ".", + "startMs": 12640, + "endMs": 12640, + "timestampMs": 12680, + "confidence": 0.997687 + }, + { + "text": " For", + "startMs": 12640, + "endMs": 12890, + "timestampMs": 12820, + "confidence": 0.999722 + }, + { + "text": " years", + "startMs": 12890, + "endMs": 13310, + "timestampMs": 13160, + "confidence": 0.99976 + }, + { + "text": ",", + "startMs": 13310, + "endMs": 13480, + "timestampMs": 13280, + "confidence": 0.816827 + }, + { + "text": " I", + "startMs": 13480, + "endMs": 13490, + "timestampMs": 13360, + "confidence": 0.955837 + }, + { + "text": " shared", + "startMs": 13490, + "endMs": 13620, + "timestampMs": 13600, + "confidence": 0.995984 + }, + { + "text": " my", + "startMs": 13620, + "endMs": 13710, + "timestampMs": 13760, + "confidence": 0.984639 + }, + { + "text": " perfect", + "startMs": 13710, + "endMs": 14180, + "timestampMs": 14140, + "confidence": 0.996219 + }, + { + "text": " gown", + "startMs": 14180, + "endMs": 14310, + "timestampMs": 14380, + "confidence": 0.995889 + }, + { + "text": " sketches", + "startMs": 14310, + "endMs": 14810, + "timestampMs": 14680, + "confidence": 0.991673 + }, + { + "text": " with", + "startMs": 14810, + "endMs": 15120, + "timestampMs": 14920, + "confidence": 0.91811 + }, + { + "text": " her", + "startMs": 15120, + "endMs": 15400, + "timestampMs": 15160, + "confidence": 0.9995 + }, + { + "text": ",", + "startMs": 15400, + "endMs": 15400, + "timestampMs": 15540, + "confidence": 0.915926 + }, + { + "text": " trusting", + "startMs": 15400, + "endMs": 16090, + "timestampMs": 15780, + "confidence": 0.998091 + }, + { + "text": " her", + "startMs": 16090, + "endMs": 16880, + "timestampMs": 16100, + "confidence": 0.999718 + }, + { + "text": ".", + "startMs": 16880, + "endMs": 16880, + "timestampMs": 16880, + "confidence": 0.977969 + }, + { + "text": " I", + "startMs": 16880, + "endMs": 16950, + "timestampMs": 17020, + "confidence": 0.999928 + }, + { + "text": " described", + "startMs": 16950, + "endMs": 17600, + "timestampMs": 17380, + "confidence": 0.998452 + }, + { + "text": " its", + "startMs": 17600, + "endMs": 17870, + "timestampMs": 17540, + "confidence": 0.957233 + }, + { + "text": " unique", + "startMs": 17870, + "endMs": 18240, + "timestampMs": 17820, + "confidence": 0.999588 + }, + { + "text": " lace", + "startMs": 18240, + "endMs": 18520, + "timestampMs": 18140, + "confidence": 0.998108 + }, + { + "text": " and", + "startMs": 18520, + "endMs": 18730, + "timestampMs": 18400, + "confidence": 0.989383 + }, + { + "text": " silhouette", + "startMs": 18730, + "endMs": 19700, + "timestampMs": 18760, + "confidence": 0.999382 + }, + { + "text": ".", + "startMs": 19700, + "endMs": 19700, + "timestampMs": 19660, + "confidence": 0.994731 + }, + { + "text": " Now", + "startMs": 19700, + "endMs": 19950, + "timestampMs": 19900, + "confidence": 0.999661 + }, + { + "text": " she", + "startMs": 19950, + "endMs": 20200, + "timestampMs": 20080, + "confidence": 0.876849 + }, + { + "text": " claims", + "startMs": 20200, + "endMs": 20710, + "timestampMs": 20380, + "confidence": 0.99883 + }, + { + "text": " the", + "startMs": 20710, + "endMs": 20950, + "timestampMs": 20560, + "confidence": 0.997406 + }, + { + "text": " idea", + "startMs": 20950, + "endMs": 21300, + "timestampMs": 20800, + "confidence": 0.99958 + }, + { + "text": " is", + "startMs": 21300, + "endMs": 21460, + "timestampMs": 21040, + "confidence": 0.99899 + }, + { + "text": " hers", + "startMs": 21460, + "endMs": 22100, + "timestampMs": 21360, + "confidence": 0.998304 + }, + { + "text": ".", + "startMs": 22100, + "endMs": 22100, + "timestampMs": 22060, + "confidence": 0.991696 + }, + { + "text": " She", + "startMs": 22100, + "endMs": 22300, + "timestampMs": 22300, + "confidence": 0.999554 + }, + { + "text": " denies", + "startMs": 22300, + "endMs": 22820, + "timestampMs": 22600, + "confidence": 0.999192 + }, + { + "text": " seeing", + "startMs": 22820, + "endMs": 23120, + "timestampMs": 22940, + "confidence": 0.999207 + }, + { + "text": " my", + "startMs": 23120, + "endMs": 23270, + "timestampMs": 23160, + "confidence": 0.999744 + }, + { + "text": " designs", + "startMs": 23270, + "endMs": 23760, + "timestampMs": 23640, + "confidence": 0.999611 + }, + { + "text": ",", + "startMs": 23760, + "endMs": 23760, + "timestampMs": 23700, + "confidence": 0.807808 + }, + { + "text": " even", + "startMs": 23760, + "endMs": 24010, + "timestampMs": 24000, + "confidence": 0.999386 + }, + { + "text": " when", + "startMs": 24010, + "endMs": 24260, + "timestampMs": 24160, + "confidence": 0.999413 + }, + { + "text": " our", + "startMs": 24260, + "endMs": 24440, + "timestampMs": 24320, + "confidence": 0.992559 + }, + { + "text": " mother", + "startMs": 24440, + "endMs": 24800, + "timestampMs": 24500, + "confidence": 0.997995 + }, + { + "text": " reminded", + "startMs": 24800, + "endMs": 25490, + "timestampMs": 24860, + "confidence": 0.999542 + }, + { + "text": " her", + "startMs": 25490, + "endMs": 25720, + "timestampMs": 25180, + "confidence": 0.999703 + }, + { + "text": ".", + "startMs": 25720, + "endMs": 25720, + "timestampMs": 25800, + "confidence": 0.860285 + }, + { + "text": " Mom", + "startMs": 25720, + "endMs": 26020, + "timestampMs": 25960, + "confidence": 0.995287 + }, + { + "text": " wants", + "startMs": 26020, + "endMs": 26520, + "timestampMs": 26200, + "confidence": 0.999153 + }, + { + "text": " peace", + "startMs": 26520, + "endMs": 27320, + "timestampMs": 26660, + "confidence": 0.995148 + }, + { + "text": ".", + "startMs": 27320, + "endMs": 27320, + "timestampMs": 27320, + "confidence": 0.969518 + }, + { + "text": " This", + "startMs": 27320, + "endMs": 27620, + "timestampMs": 27540, + "confidence": 0.996333 + }, + { + "text": " betrayal", + "startMs": 27620, + "endMs": 28210, + "timestampMs": 27840, + "confidence": 0.963931 + }, + { + "text": " is", + "startMs": 28210, + "endMs": 28360, + "timestampMs": 28080, + "confidence": 0.99955 + }, + { + "text": " painful", + "startMs": 28360, + "endMs": 29120, + "timestampMs": 28460, + "confidence": 0.999844 + }, + { + "text": ".", + "startMs": 29120, + "endMs": 29120, + "timestampMs": 29080, + "confidence": 0.990705 + }, + { + "text": " It", + "startMs": 29160, + "endMs": 29370, + "timestampMs": 29280, + "confidence": 0.999077 + }, + { + "text": " symbol", + "startMs": 29370, + "endMs": 29660, + "timestampMs": 29580, + "confidence": 0.99951 + }, + { + "text": "izes", + "startMs": 29660, + "endMs": 29940, + "timestampMs": 29840, + "confidence": 0.9895 + }, + { + "text": " her", + "startMs": 29940, + "endMs": 30130, + "timestampMs": 30040, + "confidence": 0.999329 + }, + { + "text": " need", + "startMs": 30130, + "endMs": 30400, + "timestampMs": 30260, + "confidence": 0.999203 + }, + { + "text": " to", + "startMs": 30400, + "endMs": 30530, + "timestampMs": 30460, + "confidence": 0.993995 + }, + { + "text": " diminish", + "startMs": 30530, + "endMs": 31080, + "timestampMs": 30740, + "confidence": 0.999291 + }, + { + "text": " me", + "startMs": 31080, + "endMs": 31400, + "timestampMs": 31140, + "confidence": 0.998224 + }, + { + "text": ",", + "startMs": 31400, + "endMs": 31400, + "timestampMs": 31440, + "confidence": 0.926698 + }, + { + "text": " stealing", + "startMs": 31400, + "endMs": 32140, + "timestampMs": 31740, + "confidence": 0.996668 + }, + { + "text": " my", + "startMs": 32140, + "endMs": 32320, + "timestampMs": 31960, + "confidence": 0.999752 + }, + { + "text": " future", + "startMs": 32320, + "endMs": 33160, + "timestampMs": 32300, + "confidence": 0.999912 + }, + { + "text": ".", + "startMs": 33160, + "endMs": 33160, + "timestampMs": 33160, + "confidence": 0.996953 + }, + { + "text": " I", + "startMs": 33160, + "endMs": 33230, + "timestampMs": 33280, + "confidence": 0.99992 + }, + { + "text": " want", + "startMs": 33230, + "endMs": 33550, + "timestampMs": 33400, + "confidence": 0.849308 + }, + { + "text": " to", + "startMs": 33550, + "endMs": 33690, + "timestampMs": 33520, + "confidence": 0.999588 + }, + { + "text": " expose", + "startMs": 33690, + "endMs": 34170, + "timestampMs": 33800, + "confidence": 0.999744 + }, + { + "text": " her", + "startMs": 34170, + "endMs": 34380, + "timestampMs": 34020, + "confidence": 0.999455 + }, + { + "text": " publicly", + "startMs": 34380, + "endMs": 35260, + "timestampMs": 34420, + "confidence": 0.998289 + }, + { + "text": ".", + "startMs": 35260, + "endMs": 35260, + "timestampMs": 35260, + "confidence": 0.996729 + }, + { + "text": " Should", + "startMs": 35260, + "endMs": 35670, + "timestampMs": 35400, + "confidence": 0.999058 + }, + { + "text": " I", + "startMs": 35670, + "endMs": 35780, + "timestampMs": 35540, + "confidence": 0.99958 + }, + { + "text": " let", + "startMs": 35780, + "endMs": 35930, + "timestampMs": 35640, + "confidence": 0.999432 + }, + { + "text": " it", + "startMs": 35930, + "endMs": 36060, + "timestampMs": 35760, + "confidence": 0.999096 + }, + { + "text": " go", + "startMs": 36060, + "endMs": 36240, + "timestampMs": 36060, + "confidence": 0.999851 + }, + { + "text": " or", + "startMs": 36240, + "endMs": 36320, + "timestampMs": 36360, + "confidence": 0.250181 + }, + { + "text": " would", + "startMs": 36320, + "endMs": 36570, + "timestampMs": 36500, + "confidence": 0.991151 + }, + { + "text": " I", + "startMs": 36570, + "endMs": 36620, + "timestampMs": 36600, + "confidence": 0.997554 + }, + { + "text": " be", + "startMs": 36620, + "endMs": 36740, + "timestampMs": 36740, + "confidence": 0.997995 + }, + { + "text": " the", + "startMs": 36740, + "endMs": 36910, + "timestampMs": 36920, + "confidence": 0.983558 + }, + { + "text": " asshole", + "startMs": 36910, + "endMs": 37320, + "timestampMs": 37180, + "confidence": 0.975612 + }, + { + "text": " for", + "startMs": 37320, + "endMs": 37520, + "timestampMs": 37400, + "confidence": 0.991212 + }, + { + "text": " a", + "startMs": 37520, + "endMs": 37540, + "timestampMs": 37560, + "confidence": 0.998605 + }, + { + "text": " scene", + "startMs": 37540, + "endMs": 37830, + "timestampMs": 37760, + "confidence": 0.999066 + }, + { + "text": "?", + "startMs": 37830, + "endMs": 38040, + "timestampMs": 38020, + "confidence": 0.987321 + } +] \ No newline at end of file diff --git a/remotion/scripts/download-whisper.mjs b/remotion/scripts/download-whisper.mjs index 4b2ec8f..7b7b661 100644 --- a/remotion/scripts/download-whisper.mjs +++ b/remotion/scripts/download-whisper.mjs @@ -1,7 +1,7 @@ import path from 'path'; -import {downloadWhisperModel} from '@remotion/install-whisper-cpp'; - -const {alreadyExisted} = await downloadWhisperModel({ - model: 'medium.en', +import { downloadWhisperModel } from '@remotion/install-whisper-cpp'; + +const { alreadyExisted } = await downloadWhisperModel({ + model: 'tiny.en', folder: path.join(process.cwd(), 'whisper.cpp'), }); \ No newline at end of file diff --git a/remotion/scripts/generate-captions.ts b/remotion/scripts/generate-captions.ts index 0ca2b21..f86f85b 100644 --- a/remotion/scripts/generate-captions.ts +++ b/remotion/scripts/generate-captions.ts @@ -1,24 +1,7 @@ -// import { toCaptions, transcribe } from "@remotion/install-whisper-cpp" -// import path from "path" +"use server"; -// const whisperCppOutput = await transcribe({ -// inputPath: path.join(process.cwd(), 'public/audios/audio_16k.wav'), -// whisperPath: path.join(process.cwd(), 'whisper.cpp'), -// whisperCppVersion: '1.5.5', -// model: 'medium.en', -// tokenLevelTimestamps: true, -// }) +import { getCaptions } from "@/lib/getCaptions"; -// const { captions } = toCaptions({ -// whisperCppOutput, -// }); - -// console.log(captions); - -import { getCaptions } from "../../lib/getCaptions"; -import fs from "fs"; - -(async () => { - const captions = await getCaptions(); - fs.writeFileSync("remotion/captions.json", JSON.stringify(captions, null, 2)); -})(); +export async function generateCaptions(audioUrl: string) { + return await getCaptions(audioUrl); // { captionsPath } +} \ No newline at end of file diff --git a/remotion/scripts/whisper-worker.ts b/remotion/scripts/whisper-worker.ts new file mode 100644 index 0000000..a315291 --- /dev/null +++ b/remotion/scripts/whisper-worker.ts @@ -0,0 +1,31 @@ +// remotion/scripts/whisper-worker.ts +import { transcribe, toCaptions } from "@remotion/install-whisper-cpp"; +import path from "path"; +import fs from "fs"; + +const audioPath = path.join(process.cwd(), "public", process.argv[2]); +if (!fs.existsSync(audioPath)) { + console.error("File not found:", audioPath); + process.exit(1); +} + +(async () => { + const whisperCppOutput = await transcribe({ + inputPath: path.resolve(audioPath), + whisperPath: path.resolve("whisper.cpp"), + whisperCppVersion: "1.5.5", + model: "tiny.en", + tokenLevelTimestamps: true, + }); + + const { captions } = toCaptions({ whisperCppOutput }); + + const captionsDir = path.resolve("remotion/captions"); + if (!fs.existsSync(captionsDir)) fs.mkdirSync(captionsDir, { recursive: true }); + + const captionsFileName = path.basename(audioPath, path.extname(audioPath)) + "-captions.json"; + const captionsPath = path.join(captionsDir, captionsFileName); + + fs.writeFileSync(captionsPath, JSON.stringify(captions, null, 2)); + console.log(captionsPath); // only output path for Node parent to read +})(); diff --git a/remotion/uyils/serializeStoreForRender.ts b/remotion/uyils/serializeStoreForRender.ts new file mode 100644 index 0000000..7e59ab4 --- /dev/null +++ b/remotion/uyils/serializeStoreForRender.ts @@ -0,0 +1,31 @@ +import { useVideoStoryStore } from "../../store/useVideoStoryStore"; + +export const serializeStoreForRender = () => { + const store = useVideoStoryStore.getState(); + + return { + hook: store.hook, + story: store.story, + audioUrl: store.audioUrl, + videoUrl: store.videoUrl?.url, + highlightColor: store.highlightColor || "#FF4500", + captionsPath: store.captionsPath, + }; +}; + +// For CLI rendering - extracts data and creates props object +export const createRenderProps = async (captionsPath: string) => { + const fs = await import("fs"); + const path = await import("path"); + + const absolutePath = path.resolve(process.cwd(), captionsPath); + const captions = JSON.parse(fs.readFileSync(absolutePath, "utf-8")); + + // You can either read from a JSON file or pass this data directly + return { + captions, + audioUrl: "/audios/story-1769672701663_16k.wav", + hook: "My sister is getting married in a dress I designed for myself and I don't know what to do", + highlightColor: "#FF4500", + }; +}; \ No newline at end of file diff --git a/store/useVideoStoryStore.ts b/store/useVideoStoryStore.ts index 801ffbc..c452dbf 100644 --- a/store/useVideoStoryStore.ts +++ b/store/useVideoStoryStore.ts @@ -1,5 +1,17 @@ import { create } from "zustand"; import { BackgroundVideo } from "@/types/bg-video"; +import { persist } from "zustand/middleware"; +// REMOVED: import fs from "fs" +// REMOVED: import { Caption } from "@remotion/captions"; + +interface RenderFinalVideoProps { + hook: string; + story: string; + audioUrl: string; + videoUrl: string; + highlightColor: string; + captionsPath: string; +} type VideoStoryState = { hook: string; @@ -7,34 +19,60 @@ type VideoStoryState = { audioUrl: string; videoUrl: BackgroundVideo | null; highlightColor: string; + captionsPath: string; setHook: (hook: string) => void; setStory: (story: string) => void; setAudioUrl: (url: string) => void; setVideoUrl: (video: BackgroundVideo | null) => void; setHighlightColor: (color: string) => void; + setCaptionsPath: (path: string) => void; + getRenderData: () => RenderFinalVideoProps; reset: () => void; }; -export const useVideoStoryStore = create((set) => ({ - hook: "", - story: "", - audioUrl: "", - videoUrl: null, - highlightColor: "", - - setHook: (hook) => set({ hook }), - setStory: (story) => set({ story }), - setAudioUrl: (audioUrl) => set({ audioUrl }), - setVideoUrl: (videoUrl) => set({ videoUrl }), - setHighlightColor: (highlightColor) => set({ highlightColor }), - - reset: () => - set({ +export const useVideoStoryStore = create()( + persist( + (set, get) => ({ hook: "", story: "", audioUrl: "", videoUrl: null, highlightColor: "", + captionsPath: "", + + setHook: (hook) => set({ hook }), + setStory: (story) => set({ story }), + setAudioUrl: (audioUrl) => set({ audioUrl }), + setVideoUrl: (videoUrl) => set({ videoUrl }), + setHighlightColor: (highlightColor) => set({ highlightColor }), + setCaptionsPath: (path) => set({ captionsPath: path }), + + getRenderData: (): RenderFinalVideoProps => { + const state = get(); + + return { + hook: state.hook, + story: state.story, + audioUrl: state.audioUrl, + videoUrl: state.videoUrl?.url || "", + highlightColor: state.highlightColor, + captionsPath: state.captionsPath, + }; + }, + + reset: () => + set({ + hook: "", + story: "", + audioUrl: "", + videoUrl: null, + highlightColor: "", + captionsPath: "", + }), }), -})); + { + name: "final-render-data", + } + ) +); \ No newline at end of file