IGTranscript

How do you extract text from an Instagram video?

An Instagram video holds two kinds of text that have nothing to do with each other, and they need different tools. The words that are spoken live in the audio track; the words that are drawn into the picture — burned-in captions, text stickers, an on-screen username — live in the pixels. This tool reads the audio track and never opens a frame: across 22,349 bytes of its own source there are 0 occurrences of canvas, 0 of ImageData and 0 of any OCR call, so what comes back is what was said and never what was drawn. The second job is a different order of problem, and the arithmetic is the reason: one second of the 16 kHz mono audio this tool reads is 64,000 bytes, while one second of 1080×1920 picture at 30 frames a second is 248,832,000 bytes — 3,888 times as much, for a stream the model is never shown.

InVideo WW

The three things people mean by “the text in an Instagram video”

Four things people call the text in an Instagram video, drawn as four lanes through three gates. The picker accepts files and nothing else, the decoder produces audio and nothing else, and the model is handed fixed windows of that audio. The caption the poster typed stops at the picker, text burned into the frames stops at the model, Instagram's own auto-captions are not a file at all, and only the spoken words pass all three gates. Three gates, and one kind of text passes all three The picker takes files, the decoder takes audio, the model takes windows of that audio. file picker audio decode speech model what comes out the caption the poster typed not a file nothing text burned into the frames a file audio only no frames nothing the words that were spoken a file audio windows transcript Instagram’s own auto-captions not a file nothing Each lane stops at a different gate, for a different reason: a link is not a file, a frame is not audio, a feature is not an object.
Read the lanes left to right and the four kinds of text part company at three different points. The caption the poster typed never enters, because the picker’s accept list has 12 entries — 2 wildcards and 10 named extensions — and 0 of the 12 accepts a link, a username or a post ID. Text burned into the picture passes the picker and passes the decode, since a file carrying both tracks decodes its audio track, and then stops at the model: across the tool’s 22,349 bytes there are 0 occurrences of canvas, 0 of ImageData and 0 of OCR, so 0 frames are ever opened and the caption contributes 0 words. Only the spoken words reach the output, and they arrive as 960,000 samples and 3,840,000 bytes for a 60-second clip — 2 windows of 480,000 samples — whatever the file weighed on disk. The reason the third gate is where it is rather than a missing feature is the ratio behind it: a single 1080×1920 frame is 8,294,400 bytes, or 129.6 seconds of the audio this pipeline reads, and at 30 frames a second the picture stream runs at 248,832,000 bytes a second against the audio’s 64,000 — 3,888 times as much.

What this tool opens, and what it does not

The whole path is one decode and one resample. The chosen file is read into an ArrayBuffer, handed to AudioContext.decodeAudioData, and the result is rendered by an OfflineAudioContext to 1 channel at 16,000 samples per second before the model sees it. There is no second branch. If the file is an MP4 carrying a video track, that track is handed to the browser's audio decoder and the pictures are simply not part of the result — measured, a 60-second clip reaches the model as 960,000 samples, which is 3,840,000 bytes, whatever the file it came from weighed on disk.

One Instagram video file drawn as two separate streams. The audio track goes down the left path, is resampled to mono and cut into windows, and comes out as a transcript. The picture track goes down the right path and stops at a barrier: nothing in this tool ever opens a frame, so anything drawn into the picture never reaches the output. one video file audio track picture track resampled to mono, cut into windows nothing here opens a frame transcript stops here two streams, one file
Both streams start in the same file and only one of them reaches an output. The left path is the whole of this tool: the audio track is decoded, resampled to 1 channel at 16,000 samples per second and cut into 30-second windows, so a one-minute clip arrives as 960,000 samples and 3,840,000 bytes. The right path is everything drawn into the frames — burned-in captions, text stickers, an on-screen username — and it stops at the barrier, because 0 frames are opened anywhere in the pipeline. The sizes on the two sides are why the barrier is where it is rather than a missing feature: a single 1080×1920 frame at 4 bytes a pixel is 8,294,400 bytes, which is 129.6 seconds of the audio on the left, and at 30 frames a second the right-hand stream runs at 248,832,000 bytes a second against the left-hand 64,000 — a ratio of 248,832,000 ÷ 64,000 = 3,888. The 1080-by-1920 resolution is the one assumption in these figures; the buffer sizes were printed by allocating them in Node on this machine, and the 64,000 is the Web Audio specification rather than a measurement, since a decoded sample is 32 bits and 16,000×1×4 = 64,000.

The arithmetic of the other job

Take one frame of a vertical video at 1080 by 1920 pixels, the size these clips are normally delivered at. That is 2,073,600 pixels, and at the 4 bytes per pixel an RGBA canvas uses it is 8,294,400 bytes for a single frame. Those two figures were printed by allocating exactly that buffer in Node on this machine rather than multiplied on paper. At 30 frames a second the picture stream is 62,208,000 pixels and 248,832,000 bytes per second.

Why the file that would give you the on-screen text is the file this tool refuses

There is a symmetry in the failure modes that is worth knowing before you try. Measured on this machine, a file with a picture and no audio track — a silent screen recording, which is exactly the kind of file someone chasing on-screen text might export — is rejected by the decoder, and rejected in about a second, because the decode runs before the 79.7 MB model download rather than after it.

What the three best-known tools say about on-screen text

The three pages that outrank this one for instagram transcript were fetched again on 15 October 2026, and the counts below are over the copy held in this site's benchmark directory: 264,692 characters across their 33 files, or 347,262 characters once the stored autocomplete lists are included.

How to get the spoken words — the part this tool does

This route is the one the tool is built for, and every step below is arithmetic rather than advice: a minute of speech is 3,840,000 bytes of decoded audio no matter which container it arrived in.

  1. Pick the file. Anything the browser can decode as audio. The picker's 12 entries cover video/* and audio/* plus 10 named extensions, so an MP4, a MOV, a WebM, an M4A or an MP3 all arrive the same way. A 60-second clip becomes 960,000 samples at 16 kHz, which is 3,840,000 bytes, and the picture is discarded on the way through.
  2. Pick the language before you run it. Nothing detects it for you — the browser build of the recognition library has no detection step — and a wrong pick does not error, it produces confident nonsense. Measured, the same 43-second English clip returned 54 words with the picker on English and 404 words of repeated Spanish with it left on Spanish.
  3. Expect 2 windows for a minute. The model is called with chunk_length_s: 30, so a one-minute clip is 2 windows of 480,000 samples each and a five-minute clip is 10. Measured on this two-core, 4.2 GB machine, a 43-second clip took between 18 and 42 seconds across a dozen runs, so the wait grows with the window count rather than with the file size.
  4. Rename the download the moment it lands. All 3 exports are written as transcript.txt, transcript.srt and transcript.vtt whatever the input file was called, and the original name is stored on the result object where 0 export paths read it. A batch of clips becomes a stack of identically named files within a minute.

How to get the on-screen text — the part this tool does not do

This is a genuinely different pipeline, and the source is unambiguous about it: 0 occurrences of canvas, 0 of getImageData and 0 of any OCR call across the tool's 22,349 bytes. There is nothing to switch on and no hidden mode to find.

  1. It means OCR over frames, and this tool has none of it. Reading drawn text is a picture problem: decode frames, find text regions, recognise characters. This pipeline decodes audio and resamples it, and 0 of its code paths ever produce a picture, so a caption drawn into the frames cannot appear in anything it outputs.
  2. The memory arithmetic is why the two are not the same tool. A single 1080×1920 frame is 8,294,400 bytes, which is 129.6 seconds of the audio this tool reads, and at 30 frames a second the picture stream runs at 248,832,000 bytes a second — 3,888 times the audio rate. A tool built for speech is built around the small side of that ratio on purpose.
  3. If the on-screen text is a caption the poster typed, it may exist as text elsewhere, but that is outside anything this page can verify, and it is not what this pipeline returns. What this pipeline returns is what the audio track says: a minute of speech costs 3,840,000 bytes before it becomes text, and text is what you get out.

Can this tool read text that is written on the screen?

No, and the reason is structural rather than a setting you have missed. Across the tool's 22,349 bytes of source there are 0 occurrences of canvas, 0 of ImageData, 0 of pixel and 0 of OCR; the only thing it ever decodes is the audio track, at 64,000 bytes for every second of it. Text drawn into the frames is therefore invisible here by construction, and no option in the interface changes that.

Does the video need captions before the spoken text can be extracted?

No — on-screen captions and the audio track are unrelated, and a clip with no captions at all transcribes exactly as well as one with them, because 0 frames are read either way. The only thing that decides whether you get words back is whether the audio track has speech in it: the model is handed 480,000 samples per 30-second window regardless of what is drawn on top of the picture.

Is the poster's caption part of the video file?

Not in the sense that matters here. The text a poster types is attached to the post as metadata rather than drawn into the frames or spoken into the track, so it is neither a pixel nor a word of audio and neither path on this page touches it. The picker's accept list has 12 entries and 0 of them takes a link or a username, so a post's own text is not reachable from this tool at all.

How can I tell which kind of text I ended up with?

By counting. Measured on a 43-second English clip, the model returned 54 words, which is 1.26 words per second of audio; a five-minute clip is 10 of the model's 30-second windows, and that rate extrapolates to about 377 words, an extrapolation from one measurement rather than a count of anything. If a five-minute clip comes back with 40 words, the run did not transcribe. And if what you wanted was a caption you can see on screen, no word count will help: 0 of the transcript's words were ever in the picture.

Last checked: 17 October 2026. The source counts on this page were read from the deployed files on this machine on that date: app.js is 22,349 bytes and style.css 11,749 bytes, the file picker's accept list has 12 entries made of 2 wildcards and 10 named extensions, the source contains 1 decodeAudioData call and 2 references to OfflineAudioContext, and 0 occurrences of canvas, ImageData, pixel and OCR. The buffer sizes were printed by Node on this machine rather than done on paper — a 60-second 16 kHz mono buffer is 960,000 samples and 3,840,000 bytes, a 30-second window is 480,000 samples, and a 1080×1920 RGBA frame is 8,294,400 bytes, which makes one frame 8,294,400 ÷ 3,840,000 = 2.16 minutes of that audio. The 1080-by-1920 resolution is the one assumption in the arithmetic and is the usual delivery size for a vertical clip; four bytes a pixel is the RGBA canvas convention; every product from them was printed and re-checked before it was written down. The 64,000 bytes a second comes from the Web Audio specification rather than a measurement, because a decoded sample is 32 bits and 16,000×1×4 = 64,000. The 79.7 MB and 43.6 MB model sizes, the refusal of a picture-only file, the 43-second clip's 18-to-42-second spread and the 54 words against 404 are this tool's own recorded measurements, taken in an ordinary browser tab on a two-core, 4.2 GB machine. The competitor counts are over 264,692 characters of their own copy held in this site's benchmark directory, or 347,262 characters once the stored autocomplete lists are included, and the one sentence quoted from wayin.ai is reproduced exactly as it appears on its page.

If the video you have is a Reel rather than a file on disk, the Reel length limit covers the ceiling that actually decides whether a long clip transcribes. If you want to know where the audio goes once you hand the file over, whether transcribing uploads the video answers that with the request list. If the run comes back empty rather than wrong, the five failure modes is the page to start from, and what to do with a transcript covers the four outputs and what each one costs in bytes. For the on-screen captions Instagram draws itself, how to get captions on a Reel is the page for that object rather than this one.