How to

How to get a transcript from an MP4: transcribe MP4 to text in the browser

Transcribe MP4 to text without uploading it. Only the audio track is read, so a 4 GB video is not 4 GB of work, and MOV files go through the same path.

An MP4 is a container, and a transcript only needs one thing inside it. To transcribe MP4 to text, open the file in something that reads the audio track and ignores the picture. On our page the file stays in the browser: the audio is decoded on your own machine and fed to a speech model running on your graphics card. Drop the file, wait, then download TXT, SRT or VTT. No upload, no account, no length limit.

Only the audio track is read, so a 4 GB video is not 4 GB of work

Inside an MP4 sit separate streams: usually one video stream, one or more audio streams, sometimes subtitles and chapter data. A transcript needs exactly one of them. Mozilla’s container guide describes the MP4 file format as derived from the ISO base media file format, which is itself directly derived from Apple’s QuickTime file format.

Our tool never touches the picture. It asks the container for its audio track and pushes the encoded packets through the browser’s own WebCodecs AudioDecoder. The W3C specification defines WebCodecs as “interfaces to codecs for encoding and decoding of audio, video, and images” and says nothing about containers, so the demuxing is done in JavaScript first and only audio packets reach the decoder.

File size is therefore a poor guide to how long the job takes. A 4 GB MP4 of a two-hour talk shot in 4K is, from our side, two hours of speech. Minutes of audio are the workload; gigabytes on disk are not.

Reading happens in pieces. A File in the browser is a reference to bytes on disk rather than a copy in memory, and the File API’s slice() method returns a Blob covering a byte range. A page can walk through a huge file without holding it whole, which is why a 4 GB file opens in a tab at all.

Transcribe MP4 to text in four steps

  1. Open the transcriber and drop the MP4 on the page, or use the file picker.
  2. Wait for the speech model to download on your first visit. It is about 200 MB, and the browser caches it, so later visits skip this.
  3. Watch the transcript appear while the file decodes, about a minute at a time rather than all at the end.
  4. Download TXT for the words, or SRT or VTT for subtitles with timings.

Know the edges first. It runs on desktop Chrome or Edge with a working WebGPU adapter; Firefox, Safari and phones are not supported yet. English only. It uses the base size of OpenAI’s open-source Whisper model, so names, technical terms, strong accents and noisy rooms are the known weak spots, and you should read the transcript through before relying on it. There are no speaker labels; what automatic transcription does with two speakers is honest about that gap, and the model sizes post explains what a larger model buys you.

Files with more than one audio track give you the primary track

The HTML Standard states that a media resource can have multiple audio and video tracks, and that the audio data of the resource is the result of mixing all the currently enabled tracks. Conference recordings with a floor mix and a translation feed arrive that way, and so do films with a director’s commentary.

Our tool neither mixes nor offers a picker. Mediabunny, the library we demux with, exposes both getAudioTracks() and getPrimaryAudioTrack(), and we call the second. Whatever the container presents as its primary audio track is what gets transcribed; the rest are ignored.

When it is wrong you notice within the first minute, because the transcript is commentary, the wrong language or nothing but music. The fix is a file with one audio track in it. HandBrake’s documentation describes the behaviour: its audio defaults can add the first track matching each of your chosen languages, or all tracks matching them. Choose one, encode, and the output carries a single audio track. If the track you want has no language tag, the same page notes that not all sources have track languages and suggests the Unknown or Any options so it is still picked up.

Streaming decode keeps memory flat, so length matters more than size

A four-gigabyte video sounds like something that should kill a browser tab, and on the older Web Audio route it would: decodeAudioData wants the whole file decoded into memory before anything starts, and an hour of stereo 44.1 kHz audio as raw samples runs past a gigabyte.

We never do that; decoding and transcription are interleaved. The decoder yields short chunks, they are mixed to mono and resampled to 16 kHz as they arrive, and they collect in a fixed buffer. Once there is about a minute of audio in it, that minute is transcribed and dropped. A minute of 16 kHz mono audio is roughly 4 MB, and the buffer never grows past one window plus a small search band, so memory in use is the same whether the file runs ten minutes or ten hours.

The cut between windows is not made at a fixed point either. The code looks a few seconds either side of the sixty-second mark for the quietest 25 ms it can find and cuts there, so a boundary lands in a pause rather than mid-word.

So plan around duration, not size. On a thin laptop a two-hour recording takes roughly two hours; on a desktop with a graphics card, less. Leave the tab open and the machine awake.

MOV goes down the same path, and some containers are refused outright

MDN is careful to say that while QuickTime served as the basis for the MPEG-4 file format, the two are “not quite interchangeable”. In practice our demuxer reads both, so a MOV from an iPhone, a Mac screen recording or a camera needs no conversion, and WEBM and MKV work as well.

AVI is a different shape. It is a RIFF file rather than an ISO container, so we parse it ourselves and lift the audio stream out: MP3 chunks become an MP3 blob, PCM gets a WAV header we build, raw AAC gets ADTS headers added. AC-3, DTS, WMA and codecs we do not recognise get a message naming the codec instead.

A handful of containers are refused on sight, with a message telling you to convert first.

Container What our tool does What to do
MP4, M4V Reads the primary audio track, ignores video Nothing, drop it in
MOV (QuickTime) Same path as MP4 Nothing, drop it in
WEBM, MKV Reads the audio track Nothing, drop it in
AVI with MP3, PCM or AAC audio Own RIFF demuxer lifts the audio out Nothing, drop it in
AVI with AC-3, DTS or WMA audio Refused, message names the codec Convert to MP4 or MP3
WMV, ASF Refused on sight Convert to MP4 or MP3
FLV Refused on sight Convert to MP4 or MP3
MPEG-PS, MPEG-TS (MPG, VOB, TS, M2TS) Refused on sight Convert to MP4 or MP3
RealMedia Refused on sight Convert to MP4 or MP3

The refusal is deliberate: a clear message about the container beats a tab that fails quietly two minutes in, and the check reads only the first few bytes.

Converting is the fix when a file genuinely will not open

VLC’s wiki describes transcoding as taking a video file and changing it to a different format or bitrate, done through the Media menu and Convert/Save, where you choose a video codec, an audio codec and a container. It warns that only some containers support some codecs, that you end up with both files so disk space matters, and that transcoding can be very slow. HandBrake is the other free option, describing itself as an open-source tool built by volunteers for converting video from nearly any format, on Windows, Mac and Linux.

If the transcript is all you want, convert to audio rather than video: an MP3 or M4A of a two-hour talk is a small fraction of the original and opens anywhere. If a converted file still fails, split it in half and run the parts one after the other.

If the message says there is no audio track, believe it and check the file in a player. Where the audio exists but is thin, recording audio that transcribes well covers the habits that fix it at source, and for a video you own on YouTube, the download-and-transcribe route starts from your original file.

SRT comes out of the same run as the text, so subtitles cost nothing extra; adding subtitles without uploading the video shows what to do with that file. Transcribe your own MP4 here and it never leaves the tab.

Frequently asked questions

Is there a file size limit? We set none, because the decode is streamed. The machine is the real ceiling, so close other heavy tabs before starting a multi-gigabyte video.

Can I choose which audio track is transcribed? Not in the tool; it takes the container’s primary audio track. To use a different one, have HandBrake or VLC write out a file containing only that track.

Does the video get uploaded anywhere? No. The file is read from disk in your own browser, decoded there, and transcribed by a model on your graphics card. The only network traffic is the one-time model download of about 200 MB.

Will the timestamps line up with the video? Yes. Timings come from the audio track’s own position in the file, so an SRT exported from an MP4 matches that MP4. Export SRT or VTT rather than TXT, because plain text throws the timing away.

Sources, checked 15 September 2026

mp4videomovcontainerstranscription
FreeTranscribe

Written by the people who build FreeTranscribe. We test every claim on our own files and date every price. About the site.

Transcribe a file now. Free, in your browser.
Open the transcriber