Removing the audio from a video is one of the few edits that can be genuinely lossless, instant, and done with a single command. It is also one where the phrase means two different things, and where the convenient tool sometimes does more work than the job needs. This guide covers both meanings, the exact FFmpeg command, what the browser route does and when it re-encodes, and why silent video matters more on the web than it used to.
Two things “remove audio” can mean
Dropping the stream. A video file is a container holding separate compressed streams, usually one video and one audio. Dropping the audio means writing a new container with only the video stream in it. The file has no audio track at all; a player shows no volume control, and the file is smaller by exactly the size of the audio.
Silencing it. The file keeps an audio track, but the track contains silence. Same duration, same player behaviour, a volume slider that does nothing. This is the right choice when something downstream expects an audio track to exist: some upload pipelines and some editing tools treat a video-only file as malformed or refuse to mix it with clips that do have sound.
For most purposes — a screen recording with a noisy room, a clip for a web page, a video you are going to put music over later — dropping the stream is what you want. It is simpler and the result is smaller.
The lossless command
ffmpeg -i in.mp4 -c:v copy -an out.mp4
Two flags do all the work.
-c:v copy tells FFmpeg to copy the video stream as-is. The compressed bytes are never decoded and never re-encoded; they are read from one container and written into another with the timestamps preserved. This is why the command runs in seconds on an hour-long file and why the picture is bit-for-bit identical to the input. There is no quality trade at all.
-an means “no audio”: FFmpeg does not map any audio stream into the output. Without it, the default behaviour would carry the audio across too, and you would have copied the file for nothing.
The same command works unchanged on .mov, .mkv and .webm inputs as long as the output container accepts the input’s video codec; only the extension you give the output decides the container. Keep it the same as the input and it always does. A WebM’s VP8 or VP9 can only be copied into another WebM or an MKV, not into an MP4, and in general changing containers has its own rules.
Silencing instead of dropping
If you need an audio track to exist, generate silence and encode that in place of the original:
ffmpeg -i in.mp4 -f lavfi -i anullsrc=r=48000:cl=stereo \
-map 0:v -map 1:a -c:v copy -c:a aac -shortest out.mp4
anullsrc is a synthetic silent source; -map 0:v -map 1:a takes video from the file and audio from the silence; -shortest stops when the video ends, since the silence generator would otherwise run forever. The video is still stream-copied. Only the silence is encoded, and a few minutes of AAC silence is a handful of kilobytes.
The browser route
The remove-audio tool does this in a tab with nothing installed and nothing uploaded. Open the file, switch on Mute audio, apply, and download.
What it runs depends on what else you asked for, and this is worth being precise about.
If muting is the only change — no cuts, no speed changes, the resolution left at “Original”, and the output format MP4, MOV or MKV — the editor runs exactly the command above: it stream-copies the video and drops the audio. It finishes in a moment and the picture is untouched. If the copy fails because the source codec cannot go in the container you chose — a WebM into MP4, say — the editor falls back to the re-encode below automatically.
If you combine muting with anything else — a cut, a speed band, a 1080p/720p/480p cap, or a WebM export — everything goes through a single FFmpeg filter graph, and a stream that is being filtered cannot be copied. The video is decoded and re-encoded, with libx264 at the ultrafast preset and CRF 28 for MP4/MOV/MKV, or VP8 for WebM. That costs one generation of compression and takes real time on a long clip. This guide covers what that generation actually costs; on ordinary footage it is not something you will see, but it is not nothing.
So the practical rule is simple: if silence is all you need, ask for silence and nothing else, and the result is lossless. If you also need a cut or a speed change, stack it all into the same pass rather than doing two exports, because one re-encode is the floor once any filter is involved.
The browser tool drops the stream; it does not offer the silent-track variant. If you need that, the second command above is the way.
Replacing the audio is a different job
Swapping the original sound for a different track is not removal, and the browser editor does not do it. On the command line it is one more input and a mapping:
ffmpeg -i video.mp4 -i music.m4a -map 0:v -map 1:a -c:v copy -c:a copy -shortest out.mp4
The video is copied, the new audio is copied if the container accepts its codec (AAC into MP4 is fine; drop -c:a copy and let it encode to AAC otherwise), and -shortest trims whichever of the two is longer. Anything beyond that — mixing, fades, ducking — is proper audio editing and out of scope here.
Why silent video matters on the web
Every major browser restricts autoplay: a video with sound will not start on its own unless the user has interacted with the page or the site has earned a media-engagement exception. A video that is muted can autoplay. That is why background and hero videos, animated product shots and the modern replacement for a GIF are all silent.
The muted attribute on the <video> element is what the browser checks, so strictly you should set it regardless. But shipping a file with no audio stream at all has its own advantages: it is smaller (a typical 128 kbps stereo AAC track is roughly a megabyte per minute you are no longer sending), it removes any chance of a stray volume icon appearing in a platform’s player, and it cannot start blaring if a future template forgets the attribute.
The same reasoning applies to social platforms that show a speaker icon or a “sound on” prompt when a track is present. If the audio is not part of the content, dropping it is cleaner than leaving a silent track for the platform to advertise.
Checking the result
Do not trust the file extension. Ask the file what it contains:
ffprobe -v error -show_entries stream=codec_type,codec_name -of default=noprint_wrappers=1 out.mp4
You should see one codec_type=video entry and no audio entry. If an audio entry is still there, the tool you used silenced rather than dropped, or ignored the request.
Related edits
Muting pairs naturally with speed changes: above about 3× pitch-corrected speech stops being useful, and a timelapse at 8× or 16× is nearly always exported without sound. If the sound is bad only in one stretch, cutting that section out or speeding through it may be the better fix than silencing the whole clip. And for the other lossless container operations — trimming the ends, cutting at keyframes — the FFmpeg trim guide uses the same -c copy idea.