Creator tool / 13

CSV to SRT Converter

Turn a spreadsheet of start times, end times, and lines back into a SubRip subtitle file.

CSV to SRT Converter: TOEA finds the start, end, text, and translation columns by their header names, or by position when there is no header, reads the times in any common format, and writes SubRip cues sorted by start time and numbered from 1. Runs 100% locally in your browser with zero server file uploads.

Runs
In your browser
Cost
Free · no sign-up
Availability
Ready to use
Spreadsheet → subtitle deskLocal processing

Runs entirely in your browser

↥
Choose a subtitle file

CSV or TSV · up to 5 MB, or paste below

Sheets from other sources

Any sheet with a start, an end, and a line of text works, which makes this a quick way to turn a transcription service's export, a script with timings, or a list of on-screen captions into subtitles. Rows do not need to be in order: cues are sorted by start time and numbered from 1, and rows that share a start keep their sheet order. Overlapping rows are kept as they are and players stack them, so check that each end comes before the next start. If the sheet came from Excel, save it as CSV UTF-8 so accented letters come through correctly.

Checking the result

Load the SRT with the video and watch a few minutes at the start, the middle, and the end. A steady offset means the times in the sheet were measured from a different starting point, which the timing shifter corrects in one step. For a translated sheet, also run the file through the reading speed checker, since new text rarely fits the original timings exactly.

How to use it

  1. Choose a CSV or TSV file, or paste the cells.
  2. Check how the columns were read.
  3. Download the .srt file.

Privacy & limitations

The file is read and rewritten in your browser and never uploaded. A filled translation column replaces the text, which is how a translated sheet becomes a translated subtitle file.

Related tools

Frequently asked questions

What does the sheet need to contain?

A start time, an end time, and the text, in that order if there is no header. With a header row, the columns can be in any order and are matched by names such as start, end, text, and translation.

Which time formats are read?

00:01:02,500 and 00:01:02.500, m:ss and h:mm:ss with or without a fraction, and plain seconds such as 62.5.

Some rows were skipped. Why?

A row is skipped when its start or end cannot be read as a time. The count is shown above the result; blank rows are ignored silently.

Can I get a VTT file instead?

Download the SRT and run it through the SRT to VTT converter; the timings carry across unchanged.

Free tool · runs in your browser · no account required