Find an SRT timestamp error without losing a cue
Read a SubRip block, separate formatting from timing problems, and make the smallest safe correction.
Read one block before changing anything
An SRT file contains numbered subtitle blocks. A typical block has a cue number, a start and end time, subtitle text, and a blank line before the next block. SRT is widely used but not completely standardized, so players can be more or less permissive. Subtitle Workbench uses a stated compatibility format; it does not claim to predict every player. Save a copy before editing. The tool blocks export while a format error remains, which prevents an export of only readable blocks from looking clean after dialogue was lost.
1 00:01:02,500 --> 00:01:05,000 The next train leaves at noon.
Separate an SRT timestamp from a WebVTT timestamp
In the example, the cue starts 62.5 seconds into the video and ends at 65 seconds, so it lasts 2.5 seconds. The comma separates whole seconds from three digits of milliseconds. The arrow is two hyphens followed by a greater-than sign, with whitespace on either side.
A period instead of a comma may work in some software, but this tool reports it for review as incompatible syntax. Check that the file is actually SRT before changing it. WebVTT normally uses periods and has a different file header; renaming a .vtt file to .srt does not convert it.
| Part | Value in the example | Meaning |
|---|---|---|
| Start | 00:01:02,500 | 62.5 seconds |
| End | 00:01:05,000 | 65 seconds |
| Duration | 65 − 62.5 | 2.5 seconds |
Try a two-cue repair without dropping dialogue
This invented practice file contains one valid cue and one malformed timestamp. Paste both blocks into the checker. The second block uses a period in its start time. The checker can read the first cue, but that does not mean the whole file is safe to export. Keep the second line of dialogue in the source while you repair its timestamp.
1 00:00:01,000 --> 00:00:03,000 The door is open. 2 00:00:04.000 --> 00:00:06,000 Please come inside.
| Check | Before repair | After repair |
|---|---|---|
| Second cue start | 00:00:04.000 | 00:00:04,000 |
| Readable cues | 1 | 2 |
| Second cue duration | Cannot be checked | 2.000 seconds |
| Gap after first cue | Cannot be checked | 1.000 second |
| Dialogue to preserve | Both sentences in the source | Both sentences in the export |
- Change only the period in 00:00:04.000 to a comma. Keep the cue number, end time and sentence.
- Check again: both cues should be readable with no findings under the default review settings. A custom threshold may still produce an editorial warning.
- Leave the time shift at zero for this exercise. Compare the exported text against both original sentences before downloading.
- Do not delete the second block to make the error disappear. That would remove dialogue rather than repair it. A passing syntax check still cannot establish whether the timestamps match a real video.
Do not copy frame numbers into milliseconds
An editor may show hours:minutes:seconds:frames. The final field in 00:00:01:12 can mean 12 frames, not 12 milliseconds. Confirm the display format, frame rate and timeline origin before converting it to SRT. Changing the last colon to a comma and padding the number can produce valid syntax at the wrong time.
For this invented example, assume a constant 25 fps timeline starts at 00:00:00:00 and its zero matches the video used by the SRT. Twelve frames take 12 ÷ 25 = 0.480 seconds. The interval 00:00:01:12 to 00:00:03:12 therefore becomes 00:00:01,480 to 00:00:03,480. Writing ,012 instead makes both endpoints 468 milliseconds early while leaving the two-second duration unchanged.
1 00:00:01,480 --> 00:00:03,480 The door is open.
| Interpretation | SRT start → end | What the checker sees |
|---|---|---|
| 12 copied as milliseconds | 00:00:01,012 → 00:00:03,012 | Valid syntax; wrong for this 25 fps example |
| 12 frames converted at 25 fps | 00:00:01,480 → 00:00:03,480 | Valid syntax; matches the stated calculation |
- Paste this cue at zero Time shift. Under the default settings it has no findings. Replace both ,480 fields with ,012: it still has no findings. The checker cannot know which timing matches your audio.
- A frame-style line such as 00:00:01:12 --> 00:00:03:12 is rejected as SRT syntax. Keep the dialogue and convert using the source project; do not remove the block.
- This is a 25 fps calculation, not a general timecode converter. Fractional frame rates, drop-frame numbering and different timeline origins need their actual settings. Export SRT from the source editor when possible, then check it against the intended video.
Use the audio to choose the correction
A value such as 00:00:65,000 has an out-of-range seconds field. If 65 seconds was intended, write 00:01:05,000. If the source meant 6.5 seconds, write 00:00:06,500. The audio or source project is needed to choose between them.
- If the end equals or precedes the start, enter the intended time from the video. A formatter cannot infer the duration.
- If text is missing, recover it from the original captions or transcript. Do not add speech merely to remove an error.
Check the boundary before you export
Blank lines separate blocks. A blank line inside a subtitle can leave its remaining text looking like a new malformed block. Reconnect the intended text, then leave a blank line only at the block boundary.
After format errors are resolved, inspect the export preview. Subtitle Workbench numbers cues from one in their current order, writes consistent line endings, and preserves subtitle text. It does not sort cues or infer missing timestamps. Watch the export in the intended player before replacing a delivered version.