From 92f38184fb26d858e165e3235138d9e30f4a69f3 Mon Sep 17 00:00:00 2001 From: hoelee Date: Tue, 20 Oct 2026 22:09:34 +0800 Subject: [PATCH] post: generating subtitles for songs that ship without timestamps Tutorial on turning untimed AI-generated audio into LRC + SRT: align ASR word timestamps against the KNOWN lyrics (SequenceMatcher) instead of trusting a transcript, then a governor that rejects impossible anchors, refills runs by unit-proportional duration, and enforces a 1.2 s minimum line gap. Ships 18 English songs (342 subtitle lines, mean anchor coverage 0.96, 9/18 fully anchored) with synced lyrics plus downloadable .srt per track. Documents both player bugs and the headless-Chrome numeric probe that finally caught them. --- public/subs/bells-of-the-winter-star.srt | 71 ++ public/subs/captain-marshmallow.srt | 87 +++ public/subs/clockwork-starlight.srt | 83 ++ public/subs/green-train-to-the-sea.srt | 67 ++ public/subs/lanterns-on-the-lotus-pond.srt | 75 ++ public/subs/look-upon-your-path.srt | 67 ++ public/subs/mist-over-skellig.srt | 71 ++ public/subs/paper-airplane-in-september.srt | 71 ++ public/subs/porridge-and-evening-smoke.srt | 67 ++ public/subs/puddle-jumping-parade.srt | 83 ++ public/subs/sanctuary-of-the-dawn.srt | 75 ++ public/subs/strawberry-cloud-bakery.srt | 75 ++ public/subs/the-puppeteer-s-thread.srt | 75 ++ public/subs/tiny-borrowed-shoes.srt | 83 ++ public/subs/waltz-of-the-dandelion.srt | 71 ++ public/subs/whale-in-the-milky-way.srt | 79 ++ public/subs/willow-by-the-silver-stream.srt | 75 ++ public/subs/wings-of-the-kunpeng.srt | 75 ++ ...-subtitles-for-songs-without-timestamps.md | 723 ++++++++++++++++++ ...-subtitles-for-songs-without-timestamps.md | 664 ++++++++++++++++ 20 files changed, 2737 insertions(+) create mode 100644 public/subs/bells-of-the-winter-star.srt create mode 100644 public/subs/captain-marshmallow.srt create mode 100644 public/subs/clockwork-starlight.srt create mode 100644 public/subs/green-train-to-the-sea.srt create mode 100644 public/subs/lanterns-on-the-lotus-pond.srt create mode 100644 public/subs/look-upon-your-path.srt create mode 100644 public/subs/mist-over-skellig.srt create mode 100644 public/subs/paper-airplane-in-september.srt create mode 100644 public/subs/porridge-and-evening-smoke.srt create mode 100644 public/subs/puddle-jumping-parade.srt create mode 100644 public/subs/sanctuary-of-the-dawn.srt create mode 100644 public/subs/strawberry-cloud-bakery.srt create mode 100644 public/subs/the-puppeteer-s-thread.srt create mode 100644 public/subs/tiny-borrowed-shoes.srt create mode 100644 public/subs/waltz-of-the-dandelion.srt create mode 100644 public/subs/whale-in-the-milky-way.srt create mode 100644 public/subs/willow-by-the-silver-stream.srt create mode 100644 public/subs/wings-of-the-kunpeng.srt create mode 100644 src/content/posts/generating-subtitles-for-songs-without-timestamps.md create mode 100644 src/content/posts/zh/generating-subtitles-for-songs-without-timestamps.md diff --git a/public/subs/bells-of-the-winter-star.srt b/public/subs/bells-of-the-winter-star.srt new file mode 100644 index 0000000..ad5872c --- /dev/null +++ b/public/subs/bells-of-the-winter-star.srt @@ -0,0 +1,71 @@ +1 +00:00:08,499 --> 00:00:14,380 +Ding-dong, ding-dong, ring out the bells... + +2 +00:00:18,199 --> 00:00:25,440 +Snowflakes falling from the sky in silence pure and white + +3 +00:00:25,440 --> 00:00:34,560 +Dressing every cedar bough in robes of silver light + +4 +00:00:34,560 --> 00:00:43,420 +Listen to the steeple bells across the frozen square + +5 +00:00:43,420 --> 00:00:52,920 +Sending out a melody upon the midnight air + +6 +00:00:52,920 --> 00:01:01,299 +Ring, silver bells, across the winter snow + +7 +00:01:01,299 --> 00:01:10,200 +Tell all the world the star has begun to glow + +8 +00:01:11,759 --> 00:01:19,280 +Gloria, gloria, hear the angels sing + +9 +00:01:19,280 --> 00:01:28,260 +Peace on the earth this holy night will bring + +10 +00:01:32,119 --> 00:01:39,340 +Candles in the frosted glass are shining warm and clear + +11 +00:01:40,420 --> 00:01:48,260 +Guiding every traveler home at the end of year + +12 +00:01:49,680 --> 00:01:57,400 +Every chime is like a prayer ascending to the sky + +13 +00:01:58,260 --> 00:02:07,219 +Watched by all the quiet stars that never pass us by + +14 +00:02:09,620 --> 00:02:17,439 +Ring, silver bells, across the winter snow + +15 +00:02:18,219 --> 00:02:26,500 +Tell all the world the star has begun to glow + +16 +00:02:28,000 --> 00:02:35,680 +Gloria, gloria, hear the angels sing + +17 +00:02:37,139 --> 00:02:44,620 +Peace on the earth this holy night will bring + +18 +00:02:49,300 --> 00:02:54,020 +Gloria... peace on the earth. diff --git a/public/subs/captain-marshmallow.srt b/public/subs/captain-marshmallow.srt new file mode 100644 index 0000000..8f22d63 --- /dev/null +++ b/public/subs/captain-marshmallow.srt @@ -0,0 +1,87 @@ +1 +00:00:08,059 --> 00:00:10,640 +Attention please! Captain on the deck! + +2 +00:00:10,640 --> 00:00:13,919 +Sofa is my pirate ship, the carpet is the sea + +3 +00:00:13,919 --> 00:00:17,519 +Pillow fort is waiting there for teddy bear and me + +4 +00:00:17,519 --> 00:00:20,960 +Put a paper triangle upon my curly head + +5 +00:00:20,960 --> 00:00:25,339 +No one has to take a nap or go to sleep in bed! + +6 +00:00:25,679 --> 00:00:31,079 +Left turn! Right turn! Watch out for the shark! + +7 +00:00:31,079 --> 00:00:35,880 +Wait—that's just the fluffy dog barking in the dark! + +8 +00:00:36,780 --> 00:00:38,420 +Aye, aye, Captain Marshmallow! + +9 +00:00:38,420 --> 00:00:42,039 +Sailing where the candy breezes blow! + +10 +00:00:42,039 --> 00:00:45,560 +Cookies in the treasure chest, chocolate on the map + +11 +00:00:45,560 --> 00:00:50,740 +Give a little salute and a double-double clap! (Clap-clap!) + +12 +00:00:50,740 --> 00:00:53,380 +We rule the living room today! + +13 +00:00:56,340 --> 00:00:59,600 +Homework is forbidden by the royal pirate law + +14 +00:00:59,600 --> 00:01:03,119 +Every single citizen must draw a dinosaur! + +15 +00:01:03,119 --> 00:01:07,280 +More pudding for the afternoon, and juice inside the cup + +16 +00:01:07,280 --> 00:01:12,780 +When the clock strikes dinner time, we'll eat the treasure up! + +17 +00:01:13,799 --> 00:01:15,280 +Aye, aye, Captain Marshmallow! + +18 +00:01:15,280 --> 00:01:19,000 +Sailing where the candy breezes blow! + +19 +00:01:19,000 --> 00:01:22,459 +Cookies in the treasure chest, chocolate on the map + +20 +00:01:22,459 --> 00:01:26,819 +Give a little salute and a double-double clap! (Clap-clap!) + +21 +00:01:26,819 --> 00:01:30,260 +We rule the living room today! + +22 +00:01:33,000 --> 00:01:34,859 +Mission accomplished! Yay! diff --git a/public/subs/clockwork-starlight.srt b/public/subs/clockwork-starlight.srt new file mode 100644 index 0000000..a3a4d60 --- /dev/null +++ b/public/subs/clockwork-starlight.srt @@ -0,0 +1,83 @@ +1 +00:00:19,300 --> 00:00:23,440 +Ticking in the quiet tower made of porcelain and glass + +2 +00:00:23,440 --> 00:00:28,600 +I can see the painted clouds and paper swallows pass + +3 +00:00:32,359 --> 00:00:36,719 +Every gear is turning slow beneath the velvet sky + +4 +00:00:36,719 --> 00:00:42,200 +Counting all the shooting stars that never say goodbye + +5 +00:00:46,119 --> 00:00:49,579 +Someone left a silver key beside the windowpane + +6 +00:00:50,520 --> 00:00:56,719 +Unlocking all the memories hidden in the rain + +7 +00:00:59,859 --> 00:01:04,659 +Sing for the dawn across the endless night + +8 +00:01:04,659 --> 00:01:09,200 +Spinning the threads of shadow into light + +9 +00:01:09,200 --> 00:01:13,700 +Even if the clock should stop and time fades away + +10 +00:01:13,700 --> 00:01:20,459 +I will keep this little wish until the break of day + +11 +00:01:22,280 --> 00:01:30,000 +La-la-lu-la, hear the distant bell + +12 +00:01:31,340 --> 00:01:34,540 +Breaking the silent spell + +13 +00:01:38,140 --> 00:01:42,500 +Pages of an ancient book are fluttering like wings + +14 +00:01:42,500 --> 00:01:48,400 +Telling me of emerald seas and forgotten kings + +15 +00:01:52,160 --> 00:01:56,379 +With my small and trembling hands I open up the door + +16 +00:01:56,379 --> 00:02:01,980 +Stepping out into a world I've never seen before + +17 +00:02:05,700 --> 00:02:09,360 +Sing for the dawn across the endless night + +18 +00:02:10,560 --> 00:02:15,020 +Spinning the threads of shadow into light + +19 +00:02:15,020 --> 00:02:19,560 +Even if the clock should stop and time fades away + +20 +00:02:21,120 --> 00:02:27,360 +I will keep this little wish until the break of day + +21 +00:02:33,639 --> 00:02:36,740 +Until the break of day... diff --git a/public/subs/green-train-to-the-sea.srt b/public/subs/green-train-to-the-sea.srt new file mode 100644 index 0000000..f5d67cf --- /dev/null +++ b/public/subs/green-train-to-the-sea.srt @@ -0,0 +1,67 @@ +1 +00:00:28,220 --> 00:00:29,980 +Clickety-clack upon the track, the green train starts to roll + +2 +00:00:29,420 --> 00:00:30,620 +Leaving all the city gray behind the tunnel hole + +3 +00:00:30,620 --> 00:00:31,820 +Forehead pressed against the glass, I watch the fields go by + +4 +00:00:31,820 --> 00:00:33,020 +Golden wheat and windmills waving underneath the sky + +5 +00:00:33,020 --> 00:00:34,220 +Take me where the spring wind blows across the open blue + +6 +00:00:34,220 --> 00:00:38,359 +Ten miles of wildflowers blooming just for me and you + +7 +00:00:38,359 --> 00:00:42,679 +Every station has a name I've never heard before + +8 +00:00:42,679 --> 00:00:47,600 +Soon the scent of salty air will meet us at the shore + +9 +00:00:57,620 --> 00:01:01,479 +Strangers sharing oranges and stories in the seat + +10 +00:01:01,920 --> 00:01:06,680 +Sunlight dancing in the aisle around my dangling feet + +11 +00:01:06,680 --> 00:01:11,500 +Postcards in my backpack waiting for a stamp and pen + +12 +00:01:11,500 --> 00:01:16,239 +To tell the people back at home I'm coming back again + +13 +00:01:16,239 --> 00:01:21,140 +Take me where the spring wind blows across the open blue + +14 +00:01:21,140 --> 00:01:26,340 +Ten miles of wildflowers blooming just for me and you + +15 +00:01:26,340 --> 00:01:30,659 +Every station has a name I've never heard before + +16 +00:01:30,659 --> 00:01:35,599 +Soon the scent of salty air will meet us at the shore + +17 +00:01:46,820 --> 00:01:48,359 +Look, there is the sea... diff --git a/public/subs/lanterns-on-the-lotus-pond.srt b/public/subs/lanterns-on-the-lotus-pond.srt new file mode 100644 index 0000000..be2f5e8 --- /dev/null +++ b/public/subs/lanterns-on-the-lotus-pond.srt @@ -0,0 +1,75 @@ +1 +00:00:10,691 --> 00:00:15,291 +Patter goes the summer rain upon the lotus leaf + +2 +00:00:15,291 --> 00:00:19,891 +Washing all the dusty world and bringing cool relief + +3 +00:00:19,891 --> 00:00:24,491 +Stepping on the wet bluestone beside the willow bridge + +4 +00:00:24,491 --> 00:00:28,579 +Dragonflies are resting on the painted wooden ridge + +5 +00:00:28,579 --> 00:00:31,899 +Fold a little paper boat and light a candlewick + +6 +00:00:33,159 --> 00:00:37,840 +Make a wish before the current carries it so quick + +7 +00:00:40,460 --> 00:00:44,840 +Floating down the lotus pond, a hundred lanterns glow + +8 +00:00:46,380 --> 00:00:49,619 +Mirrored in the ripples where the silver fishes go + +9 +00:00:49,619 --> 00:00:54,219 +Listen to the bamboo flute across the misty stream + +10 +00:00:54,219 --> 00:01:00,460 +In the courtyard of the moon, we share a summer dream + +11 +00:01:03,960 --> 00:01:08,719 +Silk fan in my little hand to chase the fireflies + +12 +00:01:08,719 --> 00:01:13,359 +Red string braided in my hair beneath the lantern skies + +13 +00:01:13,359 --> 00:01:18,219 +Grandma tells a fairy tale of rabbits in the moon + +14 +00:01:18,219 --> 00:01:22,959 +While the sweet osmanthus flowers blossom in the June + +15 +00:01:25,539 --> 00:01:30,019 +Floating down the lotus pond, a hundred lanterns glow + +16 +00:01:30,019 --> 00:01:34,620 +Mirrored in the ripples where the silver fishes go + +17 +00:01:34,620 --> 00:01:39,359 +Listen to the bamboo flute across the misty stream + +18 +00:01:39,359 --> 00:01:45,359 +In the courtyard of the moon, we share a summer dream + +19 +00:02:06,760 --> 00:02:09,360 +Red lanterns drifting far away... diff --git a/public/subs/look-upon-your-path.srt b/public/subs/look-upon-your-path.srt new file mode 100644 index 0000000..18c86bf --- /dev/null +++ b/public/subs/look-upon-your-path.srt @@ -0,0 +1,67 @@ +1 +00:00:09,640 --> 00:00:14,640 +Look upon the winding path where fallen leaves are blown + +2 +00:00:14,640 --> 00:00:19,640 +Children walking hand in hand so no one is alone + +3 +00:00:19,640 --> 00:00:25,039 +Even when the winter wind is cold against your face + +4 +00:00:25,039 --> 00:00:30,660 +Every step you take today is leading to a place + +5 +00:00:31,520 --> 00:00:36,600 +Shine your light into the dark, let your voice be heard + +6 +00:00:36,600 --> 00:00:41,600 +Rising like the morning lark, a brave and little bird + +7 +00:00:41,600 --> 00:00:46,679 +Though the night is long and deep, the stars are watching still + +8 +00:00:46,679 --> 00:00:53,000 +Spring will wake the seeds asleep upon the quiet hill + +9 +00:00:57,000 --> 00:01:02,159 +Write a song upon the wind for everyone who strays + +10 +00:01:02,159 --> 00:01:07,480 +Hope is like a tiny spark that sets the sky ablaze + +11 +00:01:07,480 --> 00:01:11,879 +Hold the hand beside you tight and never look below + +12 +00:01:11,879 --> 00:01:17,159 +There are gardens waiting where the wildest rivers flow + +13 +00:01:21,299 --> 00:01:26,359 +Shine your light into the dark, let your voice be heard + +14 +00:01:26,359 --> 00:01:31,340 +Rising like the morning lark, a brave and little bird + +15 +00:01:31,340 --> 00:01:36,439 +Though the night is long and deep, the stars are watching still + +16 +00:01:36,439 --> 00:01:45,980 +Spring will wake the seeds asleep upon the quiet hill + +17 +00:01:45,980 --> 00:01:49,980 +Look upon your path... the dawn is near. diff --git a/public/subs/mist-over-skellig.srt b/public/subs/mist-over-skellig.srt new file mode 100644 index 0000000..51e6562 --- /dev/null +++ b/public/subs/mist-over-skellig.srt @@ -0,0 +1,71 @@ +1 +00:00:21,729 --> 00:00:28,559 +Where the gray Atlantic meets the abbey stone + +2 +00:00:28,559 --> 00:00:29,960 +White birds circle high above the cliff alone + +3 +00:00:33,560 --> 00:00:40,479 +Carved into the stairway of a thousand years + +4 +00:00:42,160 --> 00:00:49,159 +Every drop of ocean rain whispers in my ears + +5 +00:00:49,159 --> 00:00:57,960 +Sail into the silver mist, beyond the western sea + +6 +00:00:57,960 --> 00:01:06,319 +Where the ancient lanterns glow for you and me + +7 +00:01:06,319 --> 00:01:14,739 +Hush now, hear the harp strings ring across the foam + +8 +00:01:14,739 --> 00:01:25,359 +Through the fog and falling stars, the tide will bring us home + +9 +00:01:25,359 --> 00:01:33,043 +Candles in the chapel window flicker in the gale + +10 +00:01:33,043 --> 00:01:39,874 +Ink upon the parchment tells a forgotten tale + +11 +00:01:57,479 --> 00:02:05,180 +Little hands upon the rock, looking at the sky + +12 +00:02:05,180 --> 00:02:12,939 +Watching all the centuries gently passing by + +13 +00:02:16,979 --> 00:02:22,180 +Sail into the silver mist, beyond the western sea + +14 +00:02:22,939 --> 00:02:30,460 +Where the ancient lanterns glow for you and me + +15 +00:02:30,460 --> 00:02:37,780 +Hush now, hear the harp strings ring across the foam + +16 +00:02:38,979 --> 00:02:49,479 +Through the fog and falling stars, the tide will bring us home + +17 +00:02:57,019 --> 00:03:00,819 +Oceans rise and oceans fall... + +18 +00:03:04,340 --> 00:03:08,539 +The tide will bring us home. diff --git a/public/subs/paper-airplane-in-september.srt b/public/subs/paper-airplane-in-september.srt new file mode 100644 index 0000000..f2e0118 --- /dev/null +++ b/public/subs/paper-airplane-in-september.srt @@ -0,0 +1,71 @@ +1 +00:00:10,420 --> 00:00:15,099 +Sunlight on the wooden desk is moving inch by inch + +2 +00:00:15,099 --> 00:00:20,399 +Sparrows on the telegraph wire never seem to flinch + +3 +00:00:20,880 --> 00:00:25,600 +I fold a page of notebook paper creases nice and neat + +4 +00:00:25,600 --> 00:00:30,879 +And throw it out the window to the quiet autumn street + +5 +00:00:30,879 --> 00:00:36,359 +Fly away, paper plane, into the golden air + +6 +00:00:36,359 --> 00:00:41,640 +Carry all the little words I didn't dare to share + +7 +00:00:41,640 --> 00:00:48,719 +Goodbye to the summer clouds, hello to the breeze + +8 +00:00:48,719 --> 00:00:53,600 +Floating past the bicycles and underneath the trees + +9 +00:01:03,299 --> 00:01:08,379 +Chalk dust on the blackboard fades as afternoon goes by + +10 +00:01:08,379 --> 00:01:13,760 +Clouds like cotton candy drift across the September sky + +11 +00:01:13,760 --> 00:01:18,900 +Every simple little thing we took for granted then + +12 +00:01:18,900 --> 00:01:24,299 +Stays inside a photograph we'll look at once again + +13 +00:01:24,299 --> 00:01:29,659 +Fly away, paper plane, into the golden air + +14 +00:01:29,659 --> 00:01:34,900 +Carry all the little words I didn't dare to share + +15 +00:01:34,900 --> 00:01:41,680 +Goodbye to the summer clouds, hello to the breeze + +16 +00:01:41,680 --> 00:01:46,939 +Floating past the bicycles and underneath the trees + +17 +00:01:57,780 --> 00:02:02,000 +Underneath the autumn trees... + +18 +00:02:02,180 --> 00:02:06,219 +Goodbye, summer days. diff --git a/public/subs/porridge-and-evening-smoke.srt b/public/subs/porridge-and-evening-smoke.srt new file mode 100644 index 0000000..1b13d0f --- /dev/null +++ b/public/subs/porridge-and-evening-smoke.srt @@ -0,0 +1,67 @@ +1 +00:00:11,539 --> 00:00:17,039 +Smoke is rising from the roof into the purple sky + +2 +00:00:17,039 --> 00:00:22,839 +While the evening swallows call and hurry on up high + +3 +00:00:22,839 --> 00:00:28,480 +Steam upon the kitchen glass is blurring out the view + +4 +00:00:28,480 --> 00:00:34,020 +Sitting on a wooden stool, I wait for dinner too + +5 +00:00:34,020 --> 00:00:39,520 +One bowl of warm white rice, a dish of tender greens + +6 +00:00:39,520 --> 00:00:45,420 +The simplest kind of happiness is what the evening means + +7 +00:00:45,420 --> 00:00:50,439 +No matter how the outside world is noisy, cold, and wide + +8 +00:00:50,979 --> 00:00:58,100 +The lamp upon the dining table keeps us warm inside + +9 +00:01:09,840 --> 00:01:14,879 +Wrinkles on a gentle hand that smooths my messy hair + +10 +00:01:14,879 --> 00:01:20,480 +Telling me to eat it all and sit up in my chair + +11 +00:01:20,480 --> 00:01:26,260 +Years will pass like river water flowing to the sea + +12 +00:01:26,260 --> 00:01:33,040 +But this quiet kitchen light will always stay with me + +13 +00:01:33,040 --> 00:01:38,760 +One bowl of warm white rice, a dish of tender greens + +14 +00:01:38,760 --> 00:01:43,780 +The simplest kind of happiness is what the evening means + +15 +00:01:44,599 --> 00:01:49,680 +No matter how the outside world is noisy, cold, and wide + +16 +00:01:50,140 --> 00:01:57,400 +The lamp upon the dining table keeps us warm inside + +17 +00:01:57,400 --> 00:02:14,439 +The lamp is always on for you... diff --git a/public/subs/puddle-jumping-parade.srt b/public/subs/puddle-jumping-parade.srt new file mode 100644 index 0000000..5e9d59c --- /dev/null +++ b/public/subs/puddle-jumping-parade.srt @@ -0,0 +1,83 @@ +1 +00:00:06,760 --> 00:00:08,680 +One, two! Ready, go! + +2 +00:00:08,680 --> 00:00:12,300 +Put on my yellow boots and grab my red umbrella too + +3 +00:00:12,300 --> 00:00:16,079 +The rain has stopped and left the sky a shiny, happy blue! + +4 +00:00:16,079 --> 00:00:20,079 +A giant puddle in the street is looking back at me + +5 +00:00:20,079 --> 00:00:23,859 +I take a giant running leap—one, two, and three! + +6 +00:00:23,859 --> 00:00:27,660 +Splash! Goes the water, jumping to the sky + +7 +00:00:27,660 --> 00:00:32,140 +Even little sparrows stop to watch us marching by! + +8 +00:00:32,659 --> 00:00:36,200 +Hooray, hooray! Join the happy parade! + +9 +00:00:36,200 --> 00:00:40,159 +Dancing in the sunshine that the morning made! + +10 +00:00:40,159 --> 00:00:43,859 +Clap your hands together, stomp your little feet + +11 +00:00:44,439 --> 00:00:49,299 +Every single puddle makes the melody complete! + +12 +00:00:49,299 --> 00:00:54,099 +La-la-la, step in time, smiling ear to ear! + +13 +00:00:56,420 --> 00:01:00,100 +A snail upon the garden wall is waving with its horn + +14 +00:01:00,100 --> 00:01:03,899 +The brightest, biggest rainbow in the neighborhood is born! + +15 +00:01:03,899 --> 00:01:07,719 +We'll share a pocketful of sweets and sing a silly tune + +16 +00:01:07,719 --> 00:01:11,439 +And march around the playground till we reach the afternoon! + +17 +00:01:13,060 --> 00:01:16,239 +Hooray, hooray! Join the happy parade! + +18 +00:01:16,239 --> 00:01:20,120 +Dancing in the sunshine that the morning made! + +19 +00:01:20,120 --> 00:01:23,900 +Clap your hands together, stomp your little feet + +20 +00:01:23,900 --> 00:01:29,200 +Every single puddle makes the melody complete! + +21 +00:01:29,200 --> 00:01:31,280 +Jump! Splash! Hooray! diff --git a/public/subs/sanctuary-of-the-dawn.srt b/public/subs/sanctuary-of-the-dawn.srt new file mode 100644 index 0000000..c09bbee --- /dev/null +++ b/public/subs/sanctuary-of-the-dawn.srt @@ -0,0 +1,75 @@ +1 +00:00:22,822 --> 00:00:25,640 +Ahh-ahh, sanctus, ahh... + +2 +00:00:25,640 --> 00:00:31,739 +Shadows fade before the light that rises in the east + +3 +00:00:31,739 --> 00:00:37,759 +Every troubled storm is stilled and every sorrow ceased + +4 +00:00:37,759 --> 00:00:44,119 +Through the tall stained-glass windows morning beams descend + +5 +00:00:44,119 --> 00:00:50,560 +Shining on a quiet road where broken hearts can mend + +6 +00:00:50,560 --> 00:00:58,740 +Peace be with you, weary soul, lay your burden down + +7 +00:00:58,740 --> 00:01:05,079 +Where the silver rivers flow beyond the sleeping town + +8 +00:01:05,079 --> 00:01:11,459 +Lift your eyes unto the hills where golden angels sing + +9 +00:01:11,459 --> 00:01:18,579 +Rest beneath the gentle shelter of a shining wing + +10 +00:01:21,159 --> 00:01:27,180 +Like a bell across the valley ringing clear and true + +11 +00:01:27,180 --> 00:01:33,439 +Every dawn is bringing back a promise made anew + +12 +00:01:34,180 --> 00:01:40,060 +Walk into the quiet light and leave the dark behind + +13 +00:01:40,060 --> 00:01:46,439 +There is grace in every breath for all of humankind + +14 +00:01:48,400 --> 00:01:54,640 +Peace be with you, weary soul, lay your burden down + +15 +00:01:54,640 --> 00:02:01,019 +Where the silver rivers flow beyond the sleeping town + +16 +00:02:01,019 --> 00:02:07,480 +Lift your eyes unto the hills where golden angels sing + +17 +00:02:07,480 --> 00:02:15,300 +Rest beneath the gentle shelter of a shining wing + +18 +00:02:15,300 --> 00:02:25,520 +Peace be with you... forevermore. + +19 +00:02:26,479 --> 00:02:27,879 +Amen, ahh... diff --git a/public/subs/strawberry-cloud-bakery.srt b/public/subs/strawberry-cloud-bakery.srt new file mode 100644 index 0000000..00d2aa7 --- /dev/null +++ b/public/subs/strawberry-cloud-bakery.srt @@ -0,0 +1,75 @@ +1 +00:00:08,320 --> 00:00:12,740 +Ding-dong rings the little bell above the bakery door + +2 +00:00:13,480 --> 00:00:16,539 +Flour on the apron and confetti on the floor + +3 +00:00:16,539 --> 00:00:20,339 +Butter in the mixing bowl and sugar in the pan + +4 +00:00:20,339 --> 00:00:24,199 +Baking up the fluffiest creations that I can! + +5 +00:00:24,199 --> 00:00:29,120 +Wait a little minute as the oven starts to glow + +6 +00:00:29,120 --> 00:00:33,100 +Watch the little loaves of bread begin to rise and grow! + +7 +00:00:34,039 --> 00:00:38,640 +Welcome to the bakery upon the strawberry cloud! + +8 +00:00:39,240 --> 00:00:42,460 +Where singing in the kitchen is definitely allowed! + +9 +00:00:42,759 --> 00:00:46,200 +A croissant for the puppy and a muffin for the cat + +10 +00:00:46,200 --> 00:00:51,159 +With a dollop of vanilla cream upon a beret hat! + +11 +00:00:57,820 --> 00:01:01,679 +Pour a cup of warm milk tea and sit beside the window + +12 +00:01:01,679 --> 00:01:05,980 +Wave hello to everyone walking down below + +13 +00:01:05,980 --> 00:01:09,780 +If your day is sour like a lemon on a tree + +14 +00:01:09,780 --> 00:01:13,900 +Take a bite of honey toast and share a smile with me! + +15 +00:01:13,900 --> 00:01:18,579 +Welcome to the bakery upon the strawberry cloud! + +16 +00:01:19,260 --> 00:01:22,480 +Where singing in the kitchen is definitely allowed! + +17 +00:01:22,480 --> 00:01:26,200 +A croissant for the puppy and a muffin for the cat + +18 +00:01:26,200 --> 00:01:31,099 +With a dollop of vanilla cream upon a beret hat! + +19 +00:01:33,579 --> 00:01:37,599 +Fresh out of the oven! Yum, yum! diff --git a/public/subs/the-puppeteer-s-thread.srt b/public/subs/the-puppeteer-s-thread.srt new file mode 100644 index 0000000..8497f42 --- /dev/null +++ b/public/subs/the-puppeteer-s-thread.srt @@ -0,0 +1,75 @@ +1 +00:00:24,120 --> 00:00:31,039 +Carved from a willow branch, painted with a smile + +2 +00:00:34,160 --> 00:00:42,439 +Dressed in tiny embroidered silk, traveling mile by mile + +3 +00:00:46,000 --> 00:00:51,719 +Ten thin threads of crimson silk tied upon my hands + +4 +00:00:55,500 --> 00:01:02,259 +Dancing in the market square across the distant lands + +5 +00:01:07,799 --> 00:01:13,120 +Crowds will gather when the gong begins to softly ring + +6 +00:01:13,120 --> 00:01:18,760 +Laughing at the little doll that cannot speak or sing + +7 +00:01:21,659 --> 00:01:26,700 +Dance in the lantern light, spin around the stage + +8 +00:01:26,700 --> 00:01:32,420 +Telling all the legends of a long-forgotten age + +9 +00:01:32,420 --> 00:01:37,659 +Though my heart is made of wood and cannot feel the rain + +10 +00:01:37,659 --> 00:01:44,420 +Every pull upon the thread remembers joy and pain + +11 +00:02:10,679 --> 00:02:15,819 +Autumn leaves are falling down upon the empty street + +12 +00:02:15,819 --> 00:02:21,360 +Only echoes remain of the applause so sweet + +13 +00:02:21,360 --> 00:02:26,979 +Keep me in the wooden box beside your warm fireplace + +14 +00:02:26,979 --> 00:02:35,219 +Even when the paint fades off my little smiling face + +15 +00:02:36,740 --> 00:02:42,860 +Dance in the lantern light, spin around the stage + +16 +00:02:42,860 --> 00:02:48,560 +Telling all the legends of a long-forgotten age + +17 +00:02:48,560 --> 00:02:54,020 +Though my heart is made of wood and cannot feel the rain + +18 +00:02:54,020 --> 00:03:01,060 +Every pull upon the thread remembers joy and pain + +19 +00:03:05,039 --> 00:03:07,719 +Ten thin threads of crimson silk... diff --git a/public/subs/tiny-borrowed-shoes.srt b/public/subs/tiny-borrowed-shoes.srt new file mode 100644 index 0000000..8b92a0a --- /dev/null +++ b/public/subs/tiny-borrowed-shoes.srt @@ -0,0 +1,83 @@ +1 +00:00:11,560 --> 00:00:14,599 +Underneath the floorboards where the shadows play + +2 +00:00:14,599 --> 00:00:18,320 +I tied a little ribbon at the break of day + +3 +00:00:18,320 --> 00:00:22,019 +A button for a table, a thimble for a cup + +4 +00:00:22,019 --> 00:00:26,140 +I climbs the ivy ladder when the sun comes up + +5 +00:00:27,760 --> 00:00:31,420 +Sugar on the windowsill, a feather in my hand + +6 +00:00:31,420 --> 00:00:35,219 +The garden is a jungle and a wonderland + +7 +00:00:35,219 --> 00:00:38,840 +Careful not to wake the cat sleeping by the door + +8 +00:00:40,000 --> 00:00:43,020 +Tip-toe in my borrowed shoes across the wooden floor + +9 +00:00:44,460 --> 00:00:48,100 +Fly away, little breeze, carry me along + +10 +00:00:48,100 --> 00:00:51,899 +Through the clover and the leaves, singing my own song + +11 +00:00:51,899 --> 00:00:56,100 +Though the world is wide and tall, and I am very small + +12 +00:00:57,579 --> 00:01:02,520 +In the secret morning light, I can have it all + +13 +00:01:09,620 --> 00:01:12,239 +Dewdrops on the dandelion shining like a crown + +14 +00:01:12,239 --> 00:01:15,980 +I catch a floating parachute and spin around and down + +15 +00:01:15,980 --> 00:01:19,620 +If you hear a tiny laugh hiding in the wall + +16 +00:01:19,620 --> 00:01:25,159 +That is just my secret song, answering your call + +17 +00:01:27,260 --> 00:01:30,719 +Fly away, little breeze, carry me along + +18 +00:01:30,719 --> 00:01:34,579 +Through the clover and the leaves, singing my own song + +19 +00:01:34,579 --> 00:01:38,420 +Though the world is wide and tall, and I am very small + +20 +00:01:40,319 --> 00:01:44,980 +In the secret morning light, I can have it all + +21 +00:01:51,980 --> 00:01:55,159 +La-la-la, in the morning light... diff --git a/public/subs/waltz-of-the-dandelion.srt b/public/subs/waltz-of-the-dandelion.srt new file mode 100644 index 0000000..a6b72f0 --- /dev/null +++ b/public/subs/waltz-of-the-dandelion.srt @@ -0,0 +1,71 @@ +1 +00:00:17,620 --> 00:00:22,559 +One, two, three, the summer breeze is knocking at my door + +2 +00:00:22,559 --> 00:00:30,620 +Dancing with the sunlit dust upon the wooden floor + +3 +00:00:30,620 --> 00:00:38,399 +Out across the grassy hill the dandelions grow + +4 +00:00:38,399 --> 00:00:46,520 +Waiting for a little breath to tell them where to go + +5 +00:00:48,079 --> 00:00:53,280 +La-la-la, wherever you may fly + +6 +00:00:53,280 --> 00:00:57,280 +Underneath the big and gentle sky + +7 +00:00:57,280 --> 00:01:04,379 +Even when the seasons change and winter turns to spring + +8 +00:01:06,060 --> 00:01:12,480 +I will still remember every little song we sing + +9 +00:01:27,359 --> 00:01:34,620 +Drops of rain upon a leaf are rolling into one + +10 +00:01:34,620 --> 00:01:42,459 +Shining like a diamond in the afternoon sun + +11 +00:01:42,459 --> 00:01:50,260 +If you ever lose your way or feel a little sad + +12 +00:01:50,260 --> 00:01:58,540 +Think about the quiet days and all the smiles we had + +13 +00:02:00,179 --> 00:02:05,280 +La-la-la, wherever you may fly + +14 +00:02:05,280 --> 00:02:09,139 +Underneath the big and gentle sky + +15 +00:02:09,139 --> 00:02:16,340 +Even when the seasons change and winter turns to spring + +16 +00:02:17,899 --> 00:02:24,479 +I will still remember every little song we sing + +17 +00:02:25,959 --> 00:02:28,080 +La-la-la, la-la-la... + +18 +00:02:29,460 --> 00:02:34,439 +See you again someday. diff --git a/public/subs/whale-in-the-milky-way.srt b/public/subs/whale-in-the-milky-way.srt new file mode 100644 index 0000000..6123448 --- /dev/null +++ b/public/subs/whale-in-the-milky-way.srt @@ -0,0 +1,79 @@ +1 +00:00:12,099 --> 00:00:15,700 +Ah-ah-ah, ooh-ooh... + +2 +00:00:15,700 --> 00:00:21,859 +Up above the sleeping town where all the rooftops end + +3 +00:00:21,859 --> 00:00:27,940 +Swims a giant silver whale that wants to be my friend + +4 +00:00:27,940 --> 00:00:34,340 +Ripples in the Milky Way are washing on the shore + +5 +00:00:34,340 --> 00:00:40,979 +Leaving little seashells by my bedroom door + +6 +00:00:40,979 --> 00:00:47,280 +Can you hear the quiet song echoing in space? + +7 +00:00:47,280 --> 00:00:58,439 +Every lonely little star has found a hiding place + +8 +00:00:59,600 --> 00:01:06,260 +Float away, float away, into the velvet blue + +9 +00:01:06,260 --> 00:01:12,739 +I am sending all my gentle lullabies to you + +10 +00:01:12,739 --> 00:01:19,099 +Through the clouds of stardust and the galaxies afar + +11 +00:01:19,589 --> 00:01:26,079 +You are never lost because I see how bright you are + +12 +00:01:38,820 --> 00:01:44,560 +Paper boats upon the sea of infinite delight + +13 +00:01:44,560 --> 00:01:51,079 +Carrying our tiny dreams across the quiet night + +14 +00:01:51,079 --> 00:01:57,420 +Hold my hand and do not fear the deep and silent sky + +15 +00:01:57,420 --> 00:02:04,140 +We can ride the silver whale and watch the world go by + +16 +00:02:04,140 --> 00:02:10,259 +Float away, float away, into the velvet blue + +17 +00:02:10,259 --> 00:02:16,740 +I am sending all my gentle lullabies to you + +18 +00:02:16,740 --> 00:02:23,020 +Through the clouds of stardust and the galaxies afar + +19 +00:02:23,520 --> 00:02:30,060 +You are never lost because I see how bright you are + +20 +00:02:32,739 --> 00:02:38,099 +Goodnight, little star... diff --git a/public/subs/willow-by-the-silver-stream.srt b/public/subs/willow-by-the-silver-stream.srt new file mode 100644 index 0000000..360d6ed --- /dev/null +++ b/public/subs/willow-by-the-silver-stream.srt @@ -0,0 +1,75 @@ +1 +00:00:23,828 --> 00:00:26,699 +Mmm-mmm, ahh-ahh... + +2 +00:00:26,699 --> 00:00:32,859 +Silver runs the quiet stream beneath the willow tree + +3 +00:00:33,640 --> 00:00:39,700 +Golden is the evening star shining down on me + +4 +00:00:40,540 --> 00:00:46,359 +All the little meadow flowers fold their petals tight + +5 +00:00:46,359 --> 00:00:53,020 +Waiting for the moon to weave a blanket of the night + +6 +00:00:53,020 --> 00:00:59,759 +May the wind be gentle on your weary wings + +7 +00:00:59,759 --> 00:01:06,280 +May you hear the lullaby the river softly sings + +8 +00:01:06,280 --> 00:01:13,519 +Close your eyes and drift away where the shadows gleam + +9 +00:01:13,519 --> 00:01:21,120 +Peace will walk beside you in the valley of a dream + +10 +00:01:27,319 --> 00:01:31,439 +Fireflies are dancing slow among the reeds and moss + +11 +00:01:33,140 --> 00:01:39,459 +Showing every wandering heart the stepping stones to cross + +12 +00:01:39,459 --> 00:01:46,659 +Nothing in the dark can harm the light inside your chest + +13 +00:01:46,659 --> 00:01:53,620 +Lay your head upon the grass and let the world rest + +14 +00:01:53,620 --> 00:01:59,760 +May the wind be gentle on your weary wings + +15 +00:01:59,760 --> 00:02:06,299 +May you hear the lullaby the river softly sings + +16 +00:02:06,299 --> 00:02:13,419 +Close your eyes and drift away where the shadows gleam + +17 +00:02:13,419 --> 00:02:21,259 +Peace will walk beside you in the valley of a dream + +18 +00:02:50,859 --> 00:02:54,719 +In the valley of a dream... + +19 +00:02:56,539 --> 00:03:00,680 +Sleep in peace tonight. diff --git a/public/subs/wings-of-the-kunpeng.srt b/public/subs/wings-of-the-kunpeng.srt new file mode 100644 index 0000000..765ff3f --- /dev/null +++ b/public/subs/wings-of-the-kunpeng.srt @@ -0,0 +1,75 @@ +1 +00:00:25,179 --> 00:00:31,600 +Deep beneath the silent waves where no one ever sees + +2 +00:00:31,600 --> 00:00:38,159 +Sleeps a tiny silver fish dreaming of the breeze + +3 +00:00:38,159 --> 00:00:44,500 +Counting every falling tear that drops into the tide + +4 +00:00:44,500 --> 00:00:49,859 +Waiting for the heavy gates of heaven to divide + +5 +00:00:51,159 --> 00:00:57,240 +Do not fear the rising storm or shadows in the deep + +6 +00:00:57,240 --> 00:01:04,340 +There is still a ancient promise that the ocean keeps + +7 +00:01:06,339 --> 00:01:13,180 +Spread your wings and rise above the sea of clouds and rain + +8 +00:01:13,180 --> 00:01:19,739 +Never let the mortal world bind you with a chain + +9 +00:01:19,739 --> 00:01:25,959 +Fly across the mountain peaks where immortal rivers flow + +10 +00:01:25,959 --> 00:01:34,140 +I will watch you turn to wind and let your spirit go + +11 +00:01:49,099 --> 00:01:54,959 +Cycles of a thousand years are written in the stars + +12 +00:01:54,959 --> 00:02:01,319 +Time will heal the broken shells and wash away the scars + +13 +00:02:01,319 --> 00:02:07,579 +When the red camellia blooms upon the snowy shore + +14 +00:02:07,579 --> 00:02:14,319 +We will meet beyond the sky and part ways nevermore + +15 +00:02:16,860 --> 00:02:23,520 +Spread your wings and rise above the sea of clouds and rain + +16 +00:02:23,520 --> 00:02:30,180 +Never let the mortal world bind you with a chain + +17 +00:02:30,180 --> 00:02:36,259 +Fly across the mountain peaks where immortal rivers flow + +18 +00:02:36,259 --> 00:02:44,300 +I will watch you turn to wind and let your spirit go + +19 +00:02:48,839 --> 00:03:26,300 +Ah-ah-ah, fly into the wind... diff --git a/src/content/posts/generating-subtitles-for-songs-without-timestamps.md b/src/content/posts/generating-subtitles-for-songs-without-timestamps.md new file mode 100644 index 0000000..ebfe7b0 --- /dev/null +++ b/src/content/posts/generating-subtitles-for-songs-without-timestamps.md @@ -0,0 +1,723 @@ +--- +title: "Generating Subtitles for Songs That Ship Without Timestamps" +description: "AI music tools give you audio and nothing else — no line timings, no karaoke. Here is the pipeline I use to produce LRC and SRT subtitles for 18 songs, why plain transcription fails, and the two bugs that made the lyrics box scroll to the bottom." +pubDate: 2026-10-20 +category: tutorials +tags: ["subtitles", "lrc", "srt", "whisper", "forced-alignment", "ai-music", "python"] +draft: false +--- +Every AI music tool I have tried returns the same shape of output: an audio +file. Not one of them tells you *when* each line is sung. That is fine if you +only want to listen, and useless the moment you want lyrics on screen — a +karaoke line, a video caption, a scrolling block under a player. + +Timing is the whole problem. The audio is the easy part. + +This is the pipeline I ended up with, running on 18 English songs generated +locally, plus the two places it broke in the browser. Everything below is +reproducible: the only thing it needs from you is the **lyrics you already +wrote**. + +## What you actually need + +Two subtitle formats, one shared data structure: + +| Format | Used by | Shape | +|---|---|---| +| **LRC** | music players, karaoke blocks, `