Screen recording without installing anything: how browser recording works and how to get clean results

You need a recording — a bug for a colleague, a walkthrough for a customer, thirty seconds of a web app for a slide — and you do not want to install anything, create an account or accept a watermark. Every desktop browser can already do this: a page asks for your screen through a standard API, you choose what to share in the browser’s own picker, and the browser encodes the video with its built-in codecs. This guide explains what that permission grants, why the file you get back is usually a WebM with no seek bar, how to get tab audio, system audio and a microphone into one recording, and how to trim, mute, compress and convert the result into something you can actually send.

What happens when a page records your screen

Two browser APIs do all the work. The first is navigator.mediaDevices.getDisplayMedia(), from the W3C Screen Capture specification. When a page calls it, the browser — not the page — opens a picker listing your screens, windows and, in Chromium browsers, open tabs. Pick something and the call resolves with a MediaStream holding one video track and, if you allowed it, one audio track; press Cancel and it rejects with a NotAllowedErrorand the page receives nothing. A page cannot list your windows, pre-select one or capture silently: the picker is browser chrome, drawn outside the page’s reach. While capture runs, Chrome and Edge show a bar reading …is sharing your screen with a Stop button; pressing it fires an ended event on the video track, and capturing again means going through the picker again.

The second is MediaRecorder, from the MediaStream Recording specification. It feeds the stream to the browser’s own encoders and hands the page compressed chunks as Blobobjects; our recorder asks for one every 1000 ms, keeps them in memory and joins them into a file when you stop. That is the whole pipeline — no extension, no native helper, no installer — and the chunks exist only in your browser’s memory, never on a server.

What you can capture, and where the audio comes from

Video is the easy part: a screen, a window or a tab, typically at the physical pixel size of whatever you pick, so a MacBook display that “looks like” 1440×900 is captured at 2880×1800, cursor included. Audio is where browsers differ, because the operating system has to provide a way to tap it. The page asks with audio: true; the picker shows whichever audio option your platform can honour, or none. Every cell below varies by version — the picker in front of you is the authority.

Browser and OSPicker offersTab audioSystem audioMediaRecorder writes
Chrome / Edge on WindowsScreen, window, tabYes — tick the share-tab-audio boxYes for the entire screen; some versions also for a windowWebM (VP9 or VP8 + Opus); MP4 on builds that support it
Chrome / Edge on macOSScreen, window, tabYesUsually not offered; depends on the Chrome and macOS releaseWebM; MP4 on builds that support it
Chrome / Edge on Linux or ChromeOSScreen, window, tabYesLinux: no. ChromeOS: entire screen onlyWebM
Firefox (desktop)Screen, windowNo — audio: true is ignored in current releasesNoWebM (VP8 + Opus)
Safari (macOS)Screen or windowNoNoMP4 (H.264 + AAC)

A microphone is a separate request, getUserMedia({ audio: true }), with its own permission prompt. Because MediaRecorder encodes a single audio track, the recorder mixes captured audio and microphone through a Web Audio graph (AudioContextcreateMediaStreamDestination()) into one track — so narration and tab sound are blended for good and can later only be removed together. The recorder also asks for video: { frameRate: 30 }, a hint rather than a guarantee; Chromium’s screen capture tops out at 30 fps unless a page asks for more.

Why the file is WebM, and why it has no seek bar

MediaRecorder does not let a page pick a codec; it lets the page ask. Paste these into the developer console (F12) to see what your browser will write:

MediaRecorder.isTypeSupported('video/mp4;codecs=avc1')      // Safari, and newer Chromium builds
MediaRecorder.isTypeSupported('video/webm;codecs=vp9,opus')  // Chrome, Edge
MediaRecorder.isTypeSupported('video/webm;codecs=vp8,opus')  // Chrome, Edge, Firefox

The recorder tries video/mp4;codecs=avc1, then video/mp4, then VP9, VP8 and plain video/webm, and takes the first yes. On Chrome, Edge and Firefox that has usually meant screen-recording.webm; on Safari it means screen-recording.mp4 with H.264 and AAC. Recent Chromium releases can also mux MP4 from MediaRecorder, so a current Chrome may hand you an MP4 with no conversion — a version question, not a setting. If the extension has gone missing, the first bytes tell you: a WebM starts with the EBML magic 1A 45 DF A3; an MP4 has ftyp at byte 4.

Whatever the codec, a file written live has a structural problem. A container stores the total duration and a seek index — Cues in WebM, the sample tables inside moov in MP4 — and the encoder only knows those numbers when it finishes. MediaRecorder is streaming into memory and cannot go back to patch a header it wrote a minute ago, so a Chromium WebM leaves the Segment size unknown and writes no Duration element and no Cues. Load it in a <video> element and video.duration is Infinity: no total length, a scrubber that will not drag, and some upload forms reject the file as invalid. Not one frame is wrong. The fix is a remux — read the packets once and write them into a fresh container with the numbers filled in:

# rewrite the container only — seconds, no quality loss
ffmpeg -i screen-recording.webm -c copy fixed.webm

# or make an MP4 that any phone, chat app or slide deck will play
ffmpeg -i screen-recording.webm -c:v libx264 -crf 23 -c:a aac -movflags +faststart recording.mp4

You do not need a terminal for either: the site’s trimmer performs that same -c copy remux while it cuts, and the MP4 converter does the re-encode on your own hardware. The WebM vs MP4 guide weighs the two containers; for sending to people, MP4 wins on compatibility.

Recording with the site’s recorder

  1. Open the screen recorder. If it says Screen capture is not supported in this browser. Try Chrome, Edge, or Firefox on a desktop computer. you are on a phone or inside an in-app browser (see troubleshooting).
  2. Decide about narration first: Include my microphone (narration) is disabled once recording starts. If the microphone request fails you see Microphone unavailable — recording screen without it. and the recording continues silent rather than aborting.
  3. Click Start recording. In the picker, choose a tab if you want its sound and tick the share-tab-audio box; a window for a clean frame; the whole screen only when you need more than one application. A live preview and an mm:ss timer confirm the capture is running.
  4. Stop from the page or from the browser’s sharing bar. The video plays back on the page, the download button reads, for example, Download (WEBM · 42.7 MB), and two shortcuts sit beside it: Convert to MP4 (shown only for WebM) and Trim it.

There is no time limit and no watermark. The bound is memory: every chunk stays in RAM until you stop, so a long 4K session can crash the tab and lose everything — record in segments when the stakes are high.

Finishing the recording: trim, mute, compress, convert

A raw capture is rarely what you send. The cheapest fix comes first, and it also repairs the missing duration that the later steps depend on.

1. Trim the dead time — and fix the duration for free

The trimmer runs ffmpeg in your browser with -ss start -to end -c copy: a stream copy, no re-encode. It knows about MediaRecorder files — when the preview reports Infinity it seeks to the end so the browser computes the real length, then fills in the Start and End fields. Set them in seconds (0.1 s steps) or by scrubbing and pressing Use current; an end before the start refuses with Set an end time later than the start time. The output, screen-recording_trimmed.webm, keeps the input container but, because ffmpeg rewrote it, now carries a real duration and seek index. Two limits: a stream copy cuts only at keyframes, so the start may land a fraction of a second early, and if you see Could not trim this file. Its format may not allow fast trimming, convert first and trim the result.

2. Mute if the audio must go

The mute tool opens the Conversion options dialog that every video tool on the site shares, with Mute video already ticked. On the hardware path — WebCodecs, used when your browser can decode the source and the target is MP4, MOV, MKV or WebM — the audio track is discarded and the picture copied through untouched; on the ffmpeg fallback it passes -an and re-encodes the video. The output has no audio stream at all — removal, not a volume of zero — and since it is the same dialog you can pick MP4 under Convert to in the same pass.

3. Compress and convert in one pass

The video compressor is that dialog with Compress video pre-ticked. Leave Convert to empty to keep the source container; choose MP4 for H.264, which is what you want for sharing. The hardware path gives the encoder a medium-quality bitrate preset; the ffmpeg fallback encodes MP4 with libx264 -preset superfast -crf 23 and WebM with libvpx -crf 34 -b:v 1M. Resolution offers 360p, 480p, 720p and 1080p, and sources taller than 1080 lines on the fallback path are capped automatically with the note High-resolution source — output is capped at 1080p for in-browser conversion on this device.

Target file size (MB, optional) is the field for a chat or email limit. The tool turns the number into a bitrate — eight times the byte budget, less a 7% container margin, divided by the duration, minus 128 kbps reserved for audio — steps the resolution down when the budget is too thin for the frame (below 300 kbps to 360p, below 700 kbps to 480p, below 1.5 Mbps to 720p), and re-encodes once more with a corrected bitrate if the first attempt overshoots. The catch: that arithmetic needs a duration, a raw MediaRecorder file reports Infinity, and so on an untrimmed recording the size field is silently ignored — trim first. The result downloads as screen-recording_output.mp4; the compression guide covers the limits of the common destinations.

You wantDo thisRe-encodes?
A seek bar and a lengthTrim, even by zero secondsNo — stream copy
A file that plays anywhereCompress with Convert to MP4Yes — H.264
Under an attachment limitTrim, then Target file sizeYes, at a computed bitrate
No sound at allMute (add Convert to MP4 in the same dialog)Hardware path no; fallback yes

Getting a clean recording before you press Start

  • Share a window, not the screen, unless you must show two applications. Window capture excludes everything else; screen capture includes notification banners, the dock or taskbar, and whatever pops up over the top.
  • Silence the operating system. Turn on Do Not Disturb (a Focus on macOS, Focus assist or Do not disturb on Windows) so a calendar alert does not land in the frame — or in the audio, since alert sounds ride along with system audio.
  • Think in 1080p. A 4K or Retina screen is captured at its full pixel count — four times the encoding work and file size of 1080p. Share a window sized around 1920×1080, or downscale in the compressor.
  • Close what you are not showing, and keep 30 fps. A video call in the background is the usual cause of dropped frames, and 60 fps doubles the encoder load for no visible gain on static screen content.
  • Plan the first three seconds. Capture starts the instant you click Share, before you have switched back to what you are recording. Have it on screen, pause a beat, then begin; trim the lead-in afterwards.
  • Wear headphones when narrating over tab audio. Otherwise the microphone picks up the speakers and the mix contains the tab sound twice, a few milliseconds apart.

Troubleshooting

The recording is black, or the picker thumbnails are blank

Two causes. If only a video player is black, the content is DRM-protected: Netflix, Disney+ and similar services decrypt through Encrypted Media Extensions and the compositor blanks those pixels for any capture; no setting changes that. If the whole recording is black, or the picker thumbnails were empty, the browser lacks the operating system’s screen permission. On macOS open System Settings → Privacy & Security → Screen & System Audio Recording (called Screen Recording on macOS 13 and earlier), enable the browser, then quit and relaunch it; macOS 15 also re-asks periodically.

There is no audio

Check, in order: you shared a tab but did not tick the share-tab-audio box; you shared the whole screen on macOS, where system audio is usually not offered; you are in Firefox or Safari, which capture no audio from the screen; or the microphone was blocked at the site or OS level — Chrome lists its decision at chrome://settings/content/microphone, and on macOS the browser must be enabled under Privacy & Security → Microphone.

The file is enormous, or playback stutters

The page sets no bitrate, so Chromium picks its own — a few megabits per second — which puts a minute of 1080p in the tens of megabytes and a Retina capture at several times that. The compressor with a target size fixes it afterwards; sharing a window instead of a 4K screen is the biggest saving. Stutter that appears only in the recording, not on the live screen, means the encoder could not keep up: shrink the capture area, close other tabs, and check that hardware acceleration is enabled in the browser’s system settings.

“Screen capture is not supported in this browser”

getDisplayMedia is a desktop feature. Phone browsers mostly do not expose it, and neither do the embedded browsers inside Slack, Gmail, LinkedIn or Instagram — the usual source of this message after a link was tapped in a chat. Open the link in Chrome, Edge, Firefox or Safari on a computer; on a phone, use the built-in recorder in Control Centre or the quick-settings shade.

It stopped on its own, or an upload form rejects the file

Closing the window or tab you were sharing ends the track, and so does the machine going to sleep; the recorder treats either as a stop and still gives you everything captured to that point. Forms that read the duration before accepting a video choke on Infinity — run the file through the trimmer with the full range selected and the rewritten container passes.

Do this

  • Decide on microphone narration before you click Start; share a tab for tab audio, the whole screen on Windows for system audio.
  • Share a window sized around 1080p, turn on Do Not Disturb, and have the first frame ready before you click Share.
  • Trim the recording first — it cuts the lead-in without re-encoding and gives the file a real duration.
  • Compress with Convert to MP4 (and a target size if a limit applies) before sending; keep WebM only for people you know use Chrome or Firefox.
  • Black recording: check for DRM content or the OS screen-recording permission. No audio: check the tab-audio box, then the OS, then the browser.

Frequently asked questions

Can a website record my screen without asking?

No. getDisplayMedia only returns a video stream after you pick a screen, window or tab in the browser's own picker, and the browser shows a sharing indicator for as long as the capture runs. Cancelling the picker hands the page a NotAllowedError and nothing else.

Why is my screen recording a WebM file and not MP4?

Chrome, Edge and Firefox encode MediaRecorder output as VP8 or VP9 video with Opus audio in a WebM container; Safari, and some recent Chromium builds, can write MP4 directly. Converting the WebM to MP4 in the browser gives you an H.264 file that plays in every app and on every phone.

Why does my recording have no duration or seek bar?

MediaRecorder writes the file while it is still recording, so it cannot go back and fill in the total length or the seek index. Chrome reports the duration as Infinity. Trimming or converting the file rewrites the container with a real duration.

How do I record system audio in a browser?

Share the entire screen in Chrome or Edge on Windows and tick the system-audio option in the picker. On macOS most browser versions only offer audio when you share a single tab; whole-screen system audio depends on the browser and macOS version. Firefox and Safari generally capture no audio from the screen at all.

Is there a time limit on browser screen recording?

The recorder on this site has no time limit and no watermark. The practical limit is memory: the recording is held in RAM until you press stop, so split a very long 1080p session into several recordings.

Tools used in this guide

Every one of these runs in your browser — the files you work on never leave your device.

More video guides