CSV to SRT Converter
Convert CSV subtitle files to SRT format online. Supports multiple time formats, auto-detects columns, and generates valid SubRip files instantly.
About
Subtitle synchronization errors propagate through entire video timelines. A single malformed timestamp in an SRT file causes players like VLC, Premiere Pro, and YouTube to drop all subsequent cues. This converter parses raw CSV data containing subtitle index, start time (tstart), end time (tend), and dialogue text, then assembles spec-compliant SubRip (.srt) output with sequential indexing and HH:MM:SS,mmm timestamp formatting. It auto-detects column mapping and normalizes fractional seconds, colon-separated, and raw-second time formats into the SRT-mandated comma-delimited millisecond notation.
The tool handles edge cases that break naive converters: quoted fields containing commas, multi-line dialogue within a single CSV cell, BOM characters in UTF-8 files, and semicolon or tab delimiters common in European locale exports. Note: this tool assumes well-ordered, non-overlapping subtitle cues. Overlapping timestamps are preserved as-is since certain players render them as simultaneous on-screen text. Pro Tip: if your CSV originates from Excel, export as "CSV UTF-8" to avoid encoding artifacts in accented characters.
Formulas
The SRT specification mandates each subtitle cue follow a strict three-part block structure separated by blank lines:
The timestamp line uses the format:
Time normalization from raw seconds to SRT format uses integer division and modulo:
Where s is the time value in total seconds (float), HH is hours (zero-padded to 2 digits), MM is minutes, SS is whole seconds, and mmm is milliseconds (zero-padded to 3 digits). The critical distinction from WebVTT is the comma (,) separator before milliseconds rather than a period (.).
Reference Data
| Format | Extension | Time Format | Supports Styling | Common Players | Max Lines per Cue | Encoding |
|---|---|---|---|---|---|---|
| SubRip | .srt | HH:MM:SS,mmm | Basic HTML tags | VLC, MPC, YouTube, Premiere | Unlimited (2 recommended) | UTF-8 |
| WebVTT | .vtt | HH:MM:SS.mmm | CSS cue styling | Browsers, HTML5 video | Unlimited | UTF-8 |
| SubStation Alpha | .ass/.ssa | H:MM:SS.cc | Full (fonts, colors, position) | VLC, Aegisub, MPC | Unlimited | UTF-8 / ANSI |
| MicroDVD | .sub | Frame-based | Basic tags | MicroDVD, VLC | 2 | ANSI |
| SAMI | .smi | Milliseconds | HTML/CSS | Windows Media Player | Unlimited | UTF-8 |
| LRC | .lrc | [MM:SS.xx] | None | Music players | 1 | UTF-8 |
| TTML/DFXP | .ttml/.xml | HH:MM:SS.mmm | Full XML styling | Netflix, broadcast | Unlimited | UTF-8 |
| SBV | .sbv | H:MM:SS.mmm | None | YouTube (legacy) | Unlimited | UTF-8 |
| STL (EBU) | .stl | Timecode (fps-based) | Teletext styling | Broadcast systems | 2 | ISO 6937 |
| CSV (Generic) | .csv | Varies | None | Spreadsheet apps | 1 per cell | Varies |
| JSON Subtitles | .json | Seconds (float) | None | Custom players, APIs | Unlimited | UTF-8 |
| Transcript (Plain) | .txt | None | None | Text editors | N/A | Varies |