Shift Subtitles by Frames
Or paste subtitle text
Options
Whole frames to move by, converted through the frame rate below. Use this when the source is a MicroDVD .sub, or when the note you are working from counts frames rather than seconds.
Which frame rate the timings are counted in. On the format pages this is what MicroDVD needs, because it stores timing as frame numbers. On the frame rate pages it is the rate the file was timed against — the version the subtitles were made for — and the page's second box takes the rate of the video you are going to use them with. 23.976, 24, 25, 29.97, 30, 50, 59.94 and 60 are the common ones. Getting it wrong shifts the whole timeline, and on the frame rate pages it shifts it by a ratio rather than by a fixed amount.
This page shifts a subtitle file by a number of frames. Give it twelve frames and a frame rate, and every cue moves by exactly that much — both edges together, so no cue changes length. It is the page to reach for when the number you have is a frame number rather than a time: a position read off an editing timeline, a note from a quality check, or a MicroDVD .sub file, which counts in frames and nothing else.
The frame rate is not a detail on this page, it is half of the sum. Frames become milliseconds by dividing by the rate and multiplying by a thousand, so the rate you give is used on every cue in the output whatever the format is. Twelve frames is 480 ms at 25 fps, 500 ms at 24, and 500.5 ms at 23.976 — which is why the box is required and why the common rates are listed next to it. A wrong rate does not fail loudly; it slides the whole timeline by a proportion, and on an hour-long file that can be minutes.
A frame offset that does not land on a whole millisecond is rounded once, before anything else happens, because no subtitle format stores a fraction of a millisecond. Everything downstream then works on integer milliseconds, which is what makes the preview and the downloaded file describe the same timeline.
The offset is applied to the timeline as a whole. A cue pushed before the start of the file has its start pinned to 00:00:00 and its end still moves, so that cue comes out shorter; a cue whose end lands at or before zero is dropped. SRT, WebVTT, ASS, SSA, SBV, SAMI, MicroDVD, TTML, JSON and CSV files are all accepted and read as what they actually are. Nothing is uploaded, and the queue takes a whole season in one pass.
Examples
Twelve frames at 25 fps
Input
1
00:00:01,000 --> 00:00:03,000
Hello there.
2
00:00:05,500 --> 00:00:08,000
Second line.
Output
1
00:00:01,480 --> 00:00:03,480
Hello there.
2
00:00:05,980 --> 00:00:08,480
Second line.
Twelve frames at 25 fps is 480 ms. A whole-number frame rate gives a whole-number result, which makes this the easy case to check against the timeline you read the frames off.
The same twelve frames at 23.976 fps
Input
1
00:00:01,000 --> 00:00:03,000
Twenty-three point nine seven six.
Output
1
00:00:01,501 --> 00:00:03,501
Twenty-three point nine seven six.
500.5 ms rounds to 501, once, before the offset is applied. Nothing is left half a millisecond out.
A negative frame count
Input
1
00:00:00,200 --> 00:00:02,000
Starts almost immediately.
2
00:00:05,000 --> 00:00:06,000
Later.
Output
1
00:00:00,000 --> 00:00:01,600
Starts almost immediately.
2
00:00:04,600 --> 00:00:05,600
Later.
Minus ten frames at 25 fps is 400 ms earlier. Cue 1 would start 200 ms before zero, so its start is pinned there while its end moves the full 400 ms.
Frequently asked questions
Why does this page need a frame rate when the others do not?
Because here the frame rate is part of the arithmetic rather than a property of the file. Frames are only a length of time once you know how many of them pass per second, so the number in that box is used to compute the offset for every format. On the millisecond page a frame rate is only needed to read and write MicroDVD files, which is why it can be left alone there.
What frame rate should I choose for a 23.976 fps film?
23.976, not 24. The two are close enough that a short offset hides the difference, but twelve frames comes out 500 ms at one and 500.5 ms at the other, and across a full-length film the drift accumulates into something you can see. If the file is a MicroDVD .sub it may declare its own rate, and that declaration is what a file read for its own timing uses.
Can a frame offset land between two milliseconds?
The conversion can, and the result is rounded to the nearest millisecond before the offset is applied to anything. No subtitle format stores a fraction of a millisecond, so rounding once at the start keeps the timeline in whole numbers rather than leaving a fraction that gets rounded differently at each timestamp.
Does the offset have to be a whole number of frames?
Yes, and the field only accepts whole numbers. Half a frame is not a position any player can seek to, and accepting one would mean silently rounding it for you — better to make the value you typed and the value that is used the same thing.
What happens if the frame rate box is left empty?
The page will not run until it is filled in. That is deliberate rather than defensive: without a rate the frame count cannot become a length of time, and the only alternatives would be to guess one or to quietly do nothing, and both of those produce a file that looks processed and is not what you asked for.