IGTranscript

How do I get an Instagram transcript with timestamps?

Tick the box marked “With timestamps” — it is already ticked — and every line of the transcript begins with a timecode in square brackets, 15 characters before the first word. That is the screen view and the .txt file, and both carry a start time only. The two subtitle files carry more: an .srt and a .vtt each hold a start and an end for every cue, written in a fixed 12-character format, which is what a video editor or a web player reads. What none of the four does is make the timecode clickable. The transcript is a <pre> element filled with plain text, index.html contains 0 <video> elements, and the 22,349 bytes of app.js contain currentTime 0 times and seek 0 times — so there is no player on this page to jump into. A timestamp here is a locator you type into Instagram’s own scrubber, not a link.

InVideo WW

What follows is the part that decides whether the timestamps are any use to you: which of the four outputs carries which field, why the panel can report more cues than the file contains, what the 12 characters are made of and what they cannot resolve, where a cue boundary comes from, and what the three pages that outrank this one say about timestamps in their own words — which, across 20,433 characters of their Instagram copy, is 12 uses of the word on one site and 1 on another.

What each of the four outputs actually carries

There are four things you can leave with: the panel on screen, the clipboard, a .txt file, and one of two subtitle files. Three of them are generated from the same array of segments, so the words never disagree; what differs is which timestamps survive the trip. The screen and the .txt keep the start of each cue and throw the end away. The subtitle files keep both, because a subtitle without an end time is not a subtitle.

Five outputs by three questions. On screen, on the clipboard and in the .txt file the start time is carried and the end time is dropped. In the .srt and .vtt both times are carried. In the third column, click to jump, every row is empty: none of the five makes the timecode a control. What each output keeps of the same cue All five are built from the same segments. What differs is which time survives the trip. start end click to jump on screen carried dropped no player copy to clipboard carried dropped no player .txt download carried dropped no player .srt download carried carried no player .vtt download carried carried no player The last column is empty on every row: a timecode here is a locator you type into Instagram, not a link.
The split is not between file formats but between what each output was built to carry. The screen, the clipboard and the .txt all come from the panel’s text content, so each line is a bracket, a 12-character stamp, a bracket and a space — 15 characters of prefix before the first word — and the end of the cue is discarded on the way, which on a 300-line transcript is 4,500 characters of prefix that either exist or do not. The two subtitle files keep both times, because a subtitle without an end is not a subtitle: a .srt cue is an index plus a 29-character timing line, which across 100 cues is 3,492 bytes of scaffolding before a word is counted, and the .vtt is the same with a dot instead of a comma plus the 8-byte header, for 3,500. The third column is empty for a structural reason rather than an oversight: index.html contains 0 <video> elements and the 22,349 bytes of app.js contain currentTime 0 times and seek 0 times, so there is no playback position for a click to change.
The same spoken cue as it appears in the three text outputs. On screen it is one line: a bracketed start time, then the words. In the SubRip file it becomes three lines: an index, a timing line holding a start and an end separated by an arrow, then the words. In the WebVTT file it is the same three lines with a dot instead of a comma, under a two-line header that names the format. on screen — start only [ start ] the words, one line .srt — start and end, comma index timing text the arrow separates the two times .vtt — same times, dot, plus a header WEBVTT header first
The screen line is 15 characters of prefix before the words — a bracket, a 12-character stamp, a bracket and a space. The .srt cue adds an index and a 29-character timing line, which is 3,492 bytes of scaffolding across 100 cues; the .vtt cue is the same with a dot instead of a comma, plus the 8 byte header, for 3,500. The red marks sit where the two times are separated: on screen there is only the left one, so a screen line and a .txt line can never tell you where a cue ends.

Why nothing on the page is clickable

Because there is no video on the page to click through to. The tool reads the audio track, resamples it to 16,000 samples a second, and never draws a frame: index.html has 0 <video> elements and the panel that holds the transcript is a <pre> whose content is set as text. A timecode printed inside a <pre> is characters, not a control, and clicking it selects a word the way clicking any other word in a paragraph does.

The 12 characters, and the rounding they were written around

A stamp is HH:MM:SS.mmm in the subtitle files and HH:MM:SS.mmm with a dot on screen, always 12 characters for anything shorter than 100 hours. The part worth knowing is the order of the arithmetic: the seconds are converted to whole milliseconds first, and the hours, minutes, seconds and milliseconds are cut out of that single integer afterwards. Rounding the fraction on its own is the obvious way to write it and it produces 00:00:12,1000 — 13 characters, a four-digit milliseconds field, and a cue that no subtitle parser will read.

Why the .srt can hold fewer cues than the panel counts

The meta line under the title counts segments, and the subtitle files are built from a filtered copy of the same list. A cue whose end is not after its start is dropped before either file is written, because a WebVTT parser discards a cue that ends where it begins and a SubRip cue with two identical times is junk that some players hang on. So the number in the panel and the number of cues in the file are two different numbers, and the panel’s is the larger one whenever the model returns a span it could not close.

Where a cue boundary comes from

Not from punctuation, and not from the length of a sentence. The audio is cut into 30-second windows with a 5-second stride, so consecutive windows overlap and each one advances 20 seconds; the model returns sentence-ish spans inside the window it was given, and those spans are what become cues. A sentence that crosses a window boundary is therefore split at the boundary, and the two halves arrive as two cues with two sets of times — which is a property of the chunking, not a mistake in the timestamps.

What the three pages that outrank this one say about timestamps

The counts below are over the visible body text of the four Instagram transcript pages the three sites publish, fetched on 22 October 2026 and held in this site’s benchmark directory: 20,433 characters in total, with the heading lists and the scraper’s own metadata excluded, because those are not sentences a reader sees.

What a timestamp is good for once you have one

Four uses, in the order people tend to need them. None of them requires the timecode to be a link, and all four get better as the recording gets longer, because the value of a locator is proportional to the length of the thing it locates.

Can I click a timestamp to jump to that moment?

No. The transcript is plain text inside a <pre> element, index.html has 0 <video> elements, and app.js contains currentTime 0 times and seek 0 times across its 22,349 bytes, so there is no playback position for a click to change. Type the timecode into Instagram’s own scrubber instead; the panel gives you the start of the cue in HH:MM:SS.mmm, and the minutes and seconds are the part the app wants.

Does the .txt file have timestamps in it?

It has whatever is on screen when you press the button, because the .txt and Copy text both read the panel’s text content. With the box ticked each line carries a 15-character prefix, and a 300-line transcript is 4,500 characters longer than the same transcript with the box cleared; you can toggle the box after the run, at 0 seconds of model cost, and download again.

Are the timestamps word-level?

No, they are cue-level. The transcription call asks for timestamps with a flag set to true, not to the word setting the library also offers, so what comes back is one span per sentence-ish chunk and not a time for each word. The spans land inside 30-second windows that advance 20 seconds at a time, which is why a sentence crossing a boundary arrives as two cues with two sets of times.

Why does my .srt have fewer lines than the panel says?

Because the panel counts segments and the file is written from a filtered copy of them: a cue whose end is not after its start is dropped before either subtitle file is built, and the count in the meta line is taken before that filter. A missing end is filled from the next cue’s start rather than dropped, so the gap between the two numbers comes from backwards or zero-length spans, not from unclosed ones.

Which file should I give a video editor?

The .srt, because it is the format editors and most players expect and it needs no header. Its timing line is 29 characters with a comma before the milliseconds, and across 100 cues the whole scaffolding is 3,492 bytes. Take the .vtt when the destination is a web page: it is the same cues with a dot instead of a comma under an 8-byte header, and it escapes ampersands and angle brackets, which the .srt deliberately does not.

How precise are the times, really?

To the millisecond in print and to the window in origin. The stamp is 12 characters with a three-digit milliseconds field that cannot reach 1000, but the times come from spans the model placed inside a 30-second window, so the last three digits describe a rounding of the span rather than a measurement at that resolution. One millisecond is 16 samples of 16 kHz audio, which is the finest step the text can express.

Last checked: 23 October 2026. The character counts and byte figures are arithmetic on this site’s own source, re-checked by printing them on this machine before they were written down: the stamp format is 12 characters, the on-screen prefix is 15, the timing line is 29, and 100 cues of scaffolding come to 3,492 bytes in .srt against 3,500 in .vtt with its 8-byte header — built by running the same string construction the page uses, not by estimating. The audio figures derive from RATE = 16000 on line 236 of app.js and a decoded sample being 32 bits: 16,000 × 1 × 4 = 64,000 bytes a second, so 43 seconds is 2,752,000 bytes, 600 seconds is 38,400,000, and 1,800 seconds is 115,200,000. The source counts were read from the deployed files on this machine — app.js is 22,349 bytes and 580 lines, with currentTime, seek and any <a> string at 0 occurrences, and index.html has 0 <video> elements. The measured figures are this tool’s own records from an ordinary browser tab on a two-core, 4.2 GB machine: a 43-second clip of 688,000 samples returning 54 words in 18 to 42 seconds, and a valid 20-minute WAV of 76,800,000 bytes refused with an EncodingError. The claim that a cue cannot cross a window boundary is an inference from chunk_length_s: 30 on line 282 and the library’s 5-second stride, not a measurement of a boundary-crossing sentence. The competitor counts are over 20,433 characters of body text in four files held in this site’s benchmark directory, with heading lists and scraper metadata excluded; the sentences quoted from wayin.ai and getthescript.app are reproduced exactly as they appear there.

If what you actually need is the file rather than the times, what to do with an Instagram transcript covers the four outputs and what each costs in bytes. Instagram’s own captions are the other thing that puts text on a video, and that page is where the difference between a caption track and a timed transcript is set out. The Reel length limit explains why a long recording is cut into 30-second windows at all. When the transcript comes back empty rather than mistimed, the five failure modes separates a silent recording from a refused one, and transcribing a Live replay is where the window count for an hour of audio is worked out.