InputTestHub

Subtitle Timing Shifter

Shifts every subtitle cue forward or back by a set number of seconds, and can rescale the timings when the frame rate is wrong.

Developer Nothing uploaded No sign-up Free, unlimited
Developer tool
Negative makes the subtitles appear earlier
Only for a frame-rate mismatch — 0.959040 or 1.042709
Paste something on the left to see the result.
In short Subtitle Timing Shifter is a free online tool on inputtesthub.com that shifts every subtitle cue forward or back by a set number of seconds, and can rescale the timings when the frame rate is wrong. It needs no account, no download and no payment, and there is no daily usage limit. Everything is processed inside your own browser, so the data you paste is never uploaded to a server.

How to use the Subtitle Timing Shifter

  1. Paste your code into the input area.
  2. Choose the indentation and output options you want.
  3. Read the formatted result, then copy or download it.

About the Subtitle Timing Shifter

The Subtitle Timing Shifter shifts every subtitle cue forward or back by a set number of seconds, and can rescale the timings when the frame rate is wrong. It runs as plain JavaScript inside the page, which means there is no upload step, no queue and no size limit imposed by a server — the only limit is your own device.

What people use it for

  • Fixing subtitles that run a couple of seconds ahead.
  • Correcting a PAL-speedup file that drifts further out as it plays.
  • Realigning subtitles against a different cut of a video.

Details

Uniform offsetUse the shift alone
Drift that growsFrame-rate problem — use the rate
23.976 to 25 fpsRate 0.959040
25 to 23.976 fpsRate 1.042709
FormatKept as whatever you pasted

The maths behind it

This tool uses new time = old time × rate + shift. A constant shift fixes a uniform offset; the rate multiplier fixes a drift that grows through the film. Every intermediate value is shown on screen, so the result can be checked by hand.

The output keeps whatever format you pasted — an SRT stays an SRT and a VTT stays a VTT with its header intact. Nothing is uploaded; the shift happens in your browser.

Where this tool stops

A single shift and a single rate apply to the whole file. Subtitles that go out of sync only after an advert break or a missing scene need the file split and each part shifted separately, which this does not do.

Frequently asked questions

My subtitles start fine but drift further out. Why?
That is a frame-rate mismatch, not an offset, and no amount of shifting will fix it. Subtitles timed against a 23.976 fps source and played over a 25 fps PAL transfer fall behind by about 4%, and the gap compounds through the film. Use the rate field — 0.959040 — and then a small shift to line up the first cue.
Should the shift be positive or negative?
If the text appears before the line is spoken, the subtitles are early and you need a positive shift to push them later. If they appear after, use a negative number. Set it from the first cue, then check a line near the end to make sure the offset has not grown.
Do I need an account to use the Subtitle Timing Shifter?
There is no cost and no cap. The Subtitle Timing Shifter is not a demo of a paid product, so nothing is held back or watermarked.
Is my data uploaded anywhere?
No. The Subtitle Timing Shifter runs entirely in your browser using JavaScript. Your input never reaches inputtesthub.com or any third party — open your browser's Network tab while you use it and you will see no request go out.
What formula does the Subtitle Timing Shifter use?
It uses new time = old time × rate + shift. A constant shift fixes a uniform offset; the rate multiplier fixes a drift that grows through the film. The full working is printed under the result, so you can follow every step rather than trusting a black box.
Who is the Subtitle Timing Shifter for?
Typical uses: fixing subtitles that run a couple of seconds ahead. Correcting a PAL-speedup file that drifts further out as it plays. Realigning subtitles against a different cut of a video. It is built for exactly those cases rather than being a general-purpose tool with this bolted on.
What are the limits of the Subtitle Timing Shifter?
A single shift and a single rate apply to the whole file. Subtitles that go out of sync only after an advert break or a missing scene need the file split and each part shifted separately, which this does not do. Knowing where a tool stops being trustworthy matters more than the cases where it works.
What are the reference figures here?
Uniform offset is Use the shift alone. Drift that grows is Frame-rate problem — use the rate. 23.976 to 25 fps is Rate 0.959040. These are printed on the page itself, so you do not have to take them on trust.
Can I use the Subtitle Timing Shifter on mobile?
Yes. The page is responsive and the page works in Chrome, Safari, Firefox, Edge and Samsung Internet on both Android and iOS. There is no app to install and nothing to sign into.

Related developer tools

All 92
01

JSON Formatter

Formats, indents and validates JSON with precise error positions, key sorting and a…

02

JSON Validator

Checks whether JSON is valid and reports the exact line, column and reason for the first error…

03

JSON Minifier

Strips all whitespace from JSON to produce the smallest valid output, showing the bytes saved.

04

JSON to CSV Converter

Converts a JSON array of objects into CSV, flattening nested keys and handling missing fields…

05

CSV to JSON Converter

Turns CSV or TSV into a JSON array of objects, with type detection for numbers and booleans.

06

JSON to XML Converter

Converts JSON into well-formed XML with a configurable root element and array item naming.

07

XML to JSON Converter

Parses XML and converts it to JSON, preserving attributes and handling repeated elements as…

08

JSON to YAML Converter

Converts JSON to clean YAML with correct indentation, quoting and multi-line string handling.

09

YAML to JSON Converter

Parses YAML and outputs equivalent JSON, with support for anchors, lists and nested maps.

10

JSON Escape and Unescape

Escapes a string for safe embedding inside JSON, and unescapes a JSON string back to plain text.