Captions Fit the Old Cut. Shift Them, Rescale Them, or Rebuild Their Timing?
Captions Fit the Old Cut. Shift Them, Rescale Them, or Rebuild Their Timing?
Do not move the first caption into place and assume the rest of the file has followed. First identify the pattern: a constant displacement calls for an offset; a confirmed uniform change in timing calls for a scale-and-offset mapping; a recut usually needs local reconstruction and a fresh check of the words.
The important comparison is between the old and new positions of the same surviving speech, not between filenames, frame-rate labels, or the first visible subtitle. Use anchors near the beginning, middle, and end, then examine both sides of any suspected edit.
This article includes original synthetic media and caption files for all three cases. Their timing calculations and media decoding were checked, and selected caption frames were rendered. Final caption-track playback in the intended browser could not be completed, so the example remains provisional at that step. A timestamp calculation or rendered still is not a substitute for watching and listening to the delivered video with its captions.
Establish which files you are comparing
Preserve the original captions before editing. Identify the old video they fitted and the new video the recipient will receive. Give the repaired captions a name that identifies the new media version rather than overwriting the old file in place.
Check whether the opening slate, leader, or starting reference changed. Confirm that the speech you have chosen as an anchor is actually the same passage. A repeated phrase can appear more than once; “thank you” is a poor anchor when three speakers say it.
Also distinguish the time of the spoken event from the old caption's entrance. If the original caption appeared a little before the word, do not mistake that intentional lead for evidence that the new media is offset. Compare like with like: the same recognizable sound onset in each video, then the caption boundary in relation to it.
Record times in seconds or another consistently defined time basis. A frame number needs the corresponding frame-time interpretation; it is not self-explanatory. A changed frame-rate label alone does not establish that the soundtrack now runs faster or slower. The question is where the same content falls on the new playback timeline.
This is a diagnostic task, not an invitation to alter the approved video to suit the old caption file. Unless the video export itself is wrong and you are authorized to replace it, repair the captions against the intended final master.
Read the pattern across several anchors
The original teaching clip is 80 seconds long. It contains clearly separated synthesized phrases, a generated bell, and long silences so the timing differences are easy to inspect. There is no human participant or client footage, and the sparse layout is not a recommendation for caption pacing.
Its three main speech markers begin at 10, 40, and 70 seconds. Three independently constructed variants change the timeline:
| Surviving marker | Original | Offset variant | Rate variant | Recut variant |
|---|---|---|---|---|
| First | 10.0 s | 12.0 s | 10.4 s | 10.0 s |
| Middle | 40.0 s | 42.0 s | 41.6 s | 30.0 s |
| Last | 70.0 s | 72.0 s | 72.8 s | 60.0 s |
Subtract the original time from the new time. The offset variant gives +2, +2, +2 seconds. The rate variant gives +0.4, +1.6, +2.8. The recut gives 0, −10, −10.
Those patterns suggest different explanations. In the controlled fixture, we know the causes because we made the changes: two seconds added at the start; playback time multiplied by 1.04; or the old interval from 20 to 30 seconds removed.
With somebody else's export, the pattern is evidence to investigate, not proof of the edit history. Several local edits could happen to imitate a gradual drift at three sampled points. A rate change and an offset could coexist. A replaced passage could leave the total duration unchanged while invalidating its captions.
Keep a fourth anchor out of the initial fit. Here, an additional spoken marker at 55 seconds should appear at 57 seconds in the offset variant, 57.2 in the rate variant, and 45 in the recut. It gives the proposed repair a test beyond the anchors used to choose it.
Shift a confirmed offset without changing durations
For the offset variant, every surviving event moves two seconds later. A cue beginning at 10 seconds and ending at 11.5 should become 12–13.5, not 12–11.5 or 10–13.5. Move both endpoints by the same amount to preserve its duration.
In Aegisub, the documented Timing → Shift Times tool separates the shift amount and direction from the affected rows and endpoint selection. You can apply a change to all rows, selected rows, or the selection onward. Its “Start and End times” option moves both boundaries; start-only or end-only changes alter duration. Negative timestamps are clamped to zero, which can also change the resulting interval.[^1]
For a verified two-second opening offset affecting the whole file, the intended operation is therefore a forward shift of two seconds on all relevant rows, affecting both endpoints. These are documented controls, not a native Aegisub session executed for this example.
Before applying that operation to everything, check for material that did not move. A newly added opening caption may already be correctly timed. A local selection can be appropriate, but its scope must correspond to the edit, not merely to the rows currently visible in the grid.
After the shift, check the first and last cues, the unused anchor, and any cues near time zero. Look for accidental overlaps or clipped starts. A positive-duration cue can be damaged by an inappropriate boundary selection even if its first word now appears at the right moment.
Do not use the shift dialog as a way to guess at progressive drift. A constant addition cannot make a changing error constant. In the rate fixture, a +0.4 second shift makes the first marker correct, but moves the last marker to 70.4 seconds when it belongs at 72.8. It is still 2.4 seconds early.
Rescale only when the timing relationship supports it
A uniform timing transformation can be written:
new_time = a × old_time + b
Here, a is the duration scale and b is the offset. The caption time scale should describe the relationship between the two media timelines. It is not a guessed percentage based on how wrong the last cue feels.
Use two widely separated, confidently matched anchors to calculate it:
a = (new_second − new_first) / (old_second − old_first)
b = new_first − a × old_first
For the rate fixture's first and last markers:
a = (72.8 − 10.4) / (70 − 10) = 1.04
b = 10.4 − 1.04 × 10 = 0
Apply that mapping to both the start and end of each applicable cue. A one-second interval becomes 1.04 seconds long. That differs from a shift, which leaves its duration unchanged.
Be careful with the direction of the ratio. Multiplying timestamps by 1.04 places events later and makes the timeline longer. It does not mean “play 4% faster.” The synthetic rate variant is deliberately longer than the original: 83.2 seconds rather than 80.
Now test the middle marker, which should map to 41.6 seconds, and the withheld 55-second marker, which should map to 57.2. If either misses its surviving speech, stop before applying the relationship indiscriminately. Recheck the anchors, the source versions, and whether one transformation describes the whole clip.
The supplied fixture code implements the mapping directly rather than claiming that Aegisub's shift command performs rescaling. Its operation is small:
new_start = a * old_start + b
new_end = a * old_end + b
The accompanying implementation rejects a nonpositive scale, nonfinite values, negative output times, and invalid intervals. It writes separate SRT and WebVTT files from a controlled cue list. It is not a general subtitle parser and should not be pointed at an arbitrary production subtitle format.
Those safeguards still do not decide whether the mapping is appropriate. Code can apply the wrong ratio perfectly. The evidence for the ratio comes from the relationship between the media versions and the independent checks, not from the absence of a program error.
The fixture's audio was slowed by a controlled sample-time transformation, which also changes pitch. That is how this test case was made, not a recommendation to change a pitch video's sound. A caption repair should follow the final media; it should not change the media to make the arithmetic convenient.
A recut has surviving intervals, not one global percentage
The recut variant removes the old interval [20, 30): everything from 20 seconds up to, but not including, 30 seconds. Before the deletion, surviving material stays where it was. After it, surviving material moves ten seconds earlier. Material inside the removed interval has no surviving destination.
For untouched content, the relationship is therefore:
Before old 20 s: new_time = old_time
From old 20 to 30 s: deleted; inspect affected cues
At or after old 30 s: new_time = old_time − 10
The middle and last anchors consequently move from 40 and 70 to 30 and 60. The first remains at 10. The unused marker moves from 55 to 45.
Trying to fit a global scale through the first and last anchors creates a persuasive mistake. Both endpoints can be made correct: the fitted scale is 5/6, with an offset of roughly 1.667 seconds. But that mapping puts the old 40-second marker at 35 seconds, five seconds later than its actual position in the recut.
That counterexample is why an additional anchor matters. Two points can determine a line even when the edit does not follow one line.
For a simple deletion, shift wholly surviving later cues by the removed duration. Remove cues wholly attached to deleted speech. Then handle cues that touch the cut as content edits, not just timestamp edits.
If several passages were removed, inserted, or reordered, create a correspondence between surviving sections before retiming them. A later section may need a different offset from an earlier one. Reordered material requires identifying its new location; subtracting the cumulative duration of deleted footage is not enough.
Do not use a single ratio merely because rebuilding the relationships takes longer. A global operation that makes two anchors look correct while distorting every intervening cue is not a shortcut to a repaired file.
Rebuild the boundary cue and account for changed words
The synthetic source contains a compound cue beginning at 18.8 seconds:
East door open. West door shut.
The first phrase occurs before the deletion. The second occurs inside it. The original caption spans both phrases, so deleting 20–30 seconds removes only part of the caption's spoken content.
Keeping the entire text and clipping its duration at the cut leaves words on screen that are no longer spoken. Subtracting ten seconds from its end can produce a nonsensical interval. Moving the whole cue earlier would damage the surviving first phrase.
The repaired cue needs a content decision: retain “East door open.” and time it to the surviving phrase. Drop “West door shut.” because that speech has been removed. The fixture makes this change explicitly; it does not pretend to infer deleted words from cue boundaries alone.
A separate line wholly inside the removed interval is deleted with its caption. The generated bell originally at 32 seconds survives at 22, so its cue moves with it. That cue is not dispensable merely because it is not speech: captions communicate relevant nonspeech audio as well as spoken words.[^2]
There is one further change. At new time 25 seconds, the recut replaces a stretch of silence with a synthesized sentence:
A new line replaces silence.
The total duration does not change again, and the three main speech anchors remain where the deletion placed them. Yet the old caption file contains no text for this new line. No shift, scale, or anchor match can manufacture its caption.
Add and time the new cue against the new sound. This is why a version's total length and a handful of matching anchors are insufficient evidence that its caption content is complete. In this example, the repaired file even has the same number of cues as the original: one whole cue disappears and another is added. A matching cue count proves little.
For an actual recut, listen around joins as well as through the unchanged passages. A sentence may now end sooner, a speaker may enter without their previous introduction, or an important sound may be replaced. Treat those as changes in what the captions must communicate, not just where they sit.
Check the exported captions with the delivered media
Keep the repair connected to an actual pair of files: the final video and the subtitle file intended for that version. Do not finish by inspecting timestamps in a text editor alone.
Start with the anchors and edited boundaries, then play the whole clip at normal speed. Check that cues enter and leave in useful relation to the sound, that deleted words are gone, and that new words and relevant sounds are represented. Inspect overlaps, unintended gaps, speaker context, and captions that obscure important visual information.
Use the intended player or delivery route. An SRT render in one tool does not demonstrate that a separate WebVTT track loaded successfully in a browser. Likewise, a visible cue in a screenshot does not establish readable pacing or an accurate account of everything audible.
W3C's guidance defines captions in relation to the audio they communicate and warns that automatically generated output needs accuracy checking.[^2] The same caution applies to automated retiming. Correct arithmetic does not verify the words, and successful file loading does not establish accessibility compliance.
The remaining check is specific: load each corrected pair in the intended player, review every cue with the sound at normal speed, and compare the old captions against the recut to confirm the predicted failures. The example should not be treated as release-ready captioned media until that work is done.
For your own pitch clip, leave the reviewer with the preserved old file, the repaired file named for the final video, and a short change note. State which intervals moved, which speech was removed or added, and which player was actually checked. That is a handoff another person can verify. “Fixed the subtitles” is not.
Sources
[^1]: Aegisub, “Shift times”, “Shift by,” “Affect,” and “Times.” Consulted for the shift tool's documented scope, endpoint behavior, and negative-time handling. No native Aegisub session was executed. Inspected September 19, 2026 (UTC).
[^2]: W3C Web Accessibility Initiative, “Captions/Subtitles”, “Introduction,” “Automatic Captions are Not Sufficient,” and “Creating Captions.” Supports synchronized speech/nonspeech information and accuracy review; does not certify the supplied exercise or an unseen pitch video. Inspected September 19, 2026 (UTC).
Frequently asked questions
How do I tell whether a caption problem is a constant offset or a timing rescale?
Compare the old and new positions of the same surviving speech using anchors near the beginning, middle, and end, then check both sides of any suspected edit. Constant differences suggest an offset; a confirmed uniform timing relationship may support a scale-and-offset mapping. Do not decide from filenames, frame-rate labels, or the first visible subtitle alone.
What is the difference between shifting and rescaling captions?
A shift moves both the start and end of a cue by the same amount, preserving its duration. A rescale applies new_time = a × old_time + b to both endpoints, so a one-second interval becomes 1.04 seconds in the rate example. Multiplying timestamps by 1.04 places events later and makes the timeline longer; it does not mean the video plays 4 percent faster.
How should a recut be repaired?
A recut usually needs local reconstruction, not one global percentage. If the old interval from 20 to 30 seconds was removed, material before old 20 seconds stays put, material at or after old 30 shifts ten seconds earlier, and material inside the removed interval has no surviving destination. A compound cue that crosses the cut needs a content decision: in the example, keep East door open and drop West door shut. Newly inserted speech also needs a new cue.
What should final verification include?
Load each corrected pair in the intended player or delivery route, then play the whole clip at normal speed. Check anchors and edited boundaries, confirm deleted words are gone, and ensure new words and relevant nonspeech sounds are represented. Inspect overlaps, unintended gaps, speaker context, and captions that obscure important visual information. An SRT render in one tool does not prove a separate WebVTT track loads correctly in a browser, and correct arithmetic does not verify the words or establish accessibility compliance.