Splice
Merge chunked Whisper transcripts into one clean transcript, then render it as documents and subtitles
Joins chunked Whisper transcripts into one clean transcript, keeps speaker labels consistent across chunks, and renders DOCX, PDF, SRT, VTT and CSV straight to Google Cloud Storage or S3.
- Status
- Available on request
- Built for
- Media, broadcast, research and transcription teams running Whisper on long recordings.
- Category
- Transcript merging & subtitles
The problem
Whisper works on short windows of audio, so long recordings get split into chunks, usually with some overlap so no word is cut in half. Afterwards the chunks have to be joined back into one transcript.
Joining them end to end duplicates the overlap. Cutting by timestamp drops or splits words, because the two chunks heard the overlap slightly differently. With diarization it gets worse: SPEAKER_00 in one chunk can be SPEAKER_01 in the next.
Then the result still has to become something people use: a readable document with timestamps, or subtitles that follow broadcast rules on line length, duration and reading speed. Splice does that whole step, and gives the same output for the same input every time.
How it works
- 01
Point it at the chunks
Send a list of chunk URIs in gs:// or s3://, mixed in one request if you like. Splice reads openai-whisper, faster-whisper, whisper-timestamped, WhisperX and OpenAI API verbose_json output.
- 02
Merge
Each seam is aligned word by word, duplicates from the overlap are removed, and speaker labels are mapped across chunks so one person keeps one label.
- 03
Render
Choose any of DOCX, PDF, TXT, SRT, VTT, CSV and JSON, each with its own options: timestamp style, paragraph rules, subtitle line length, reading speed, speaker labels.
- 04
Collect
Files are written to your output prefix, next to a task report that describes every seam: how it was joined, how many words were dropped from each side and how speakers were mapped.
What it does
- Overlap-aware merging that tolerates misheard and missing words
- Speaker label reconciliation across chunks
- DOCX, PDF, TXT, SRT, VTT, CSV and canonical JSON output
- Subtitle rules: characters per line, line count, min and max duration, minimum gap, reading speed
- Balanced, punctuation-aware line breaks and VTT voice tags
- Timestamps in hh:mm:ss, mm:ss, milliseconds or SMPTE timecode, with display offsets
- Google Cloud Storage and Amazon S3, including S3-compatible storage
- Sync or async API with idempotent task IDs
- A per-seam report in every task, for audits
How we built it
Splicing at the middle of the overlap
At each seam, Splice runs a local sequence alignment (Smith-Waterman) of the end of the transcript so far against the start of the next chunk, on normalized words with a time-proximity limit. It splices at the middle matched word. Words near a chunk edge are the least reliable, so each chunk keeps the half of the overlap it heard in context. When too few words match, it falls back to a time cut at the overlap midpoint and says so in the report.
Speaker labels that survive the seam
Diarization labels are arbitrary per chunk. Splice maps them across each seam by majority vote over the aligned word pairs. Speakers who were silent during the overlap are matched by elimination when the counts line up. When they don't, the speaker gets a distinct label, so two different people are never merged into one.
Failing loudly instead of guessing
A large overlap with no matching words almost always means a wrong chunk offset. Splice rejects that merge with a clear error rather than producing a transcript that reads fine and is quietly wrong.
Fast enough not to matter
Parsing, merging and rendering run in a worker thread pool, and the API returns 503 when its queue is full so Cloud Run adds instances instead of piling up work. A 40,000 word transcript, about 5.4 hours of speech in 35 overlapping chunks, renders to all seven formats in about 1.6 seconds on one core.
Splice: common questions
Does Splice transcribe audio?
No. Splice starts from Whisper output. Run Whisper, faster-whisper or WhisperX the way you already do, and Splice joins and renders the result.
Does Splice use AI to merge transcripts?
No. The merge is a deterministic alignment. The same chunks and options always produce the same transcript, and every seam is described in the task report.
Where does Splice run?
As a container in your own cloud, next to your buckets. Cloud Run is the recommended target, and it also runs on GKE, ECS, Fargate or anywhere Docker runs. Your transcripts stay in your storage.
Which Whisper output formats does it accept?
openai-whisper, faster-whisper, whisper-timestamped, WhisperX with diarization, and OpenAI API verbose_json with word timestamps, including the same shapes wrapped in a result or data field.