Remove a watermark from a video without losing quality

Answer in the first paragraph Measured on this machine Honest about the cost

Whether you lose quality depends on one thing: does the operation touch the picture, and does the tool copy the other streams or re-encode them. A mark that lives in the container — a C2PA box, a title tag — comes off with zero bytes changed: the picture decodes to identical frames and the file is the same size. A mark painted across the frames has to be re-encoded, and that is where quality is spent. But the damage people actually report is neither of those: it is a tool that re-encodes the picture and silently drops the audio and subtitle tracks on the way out.

So "without losing quality" is not one question, it is five. The picture, the audio track, the subtitle track, the duration and frame rate, and the alignment between picture and sound are five separate things, and each one can be checked on your own file with a single command. Below is what each method does to each of them, measured, and how to run the checks yourself.

WHAT SURVIVES EACH WAY OF REMOVING A WATERMARK Measured on one test file: 640x360, 30 fps, 4 s, audio + subtitle + 4 tags. WHAT THE FILE CARRIES METADATA STRIP CROP INPAINT RE-ENCODE* The picture identical re-encoded re-encoded kept The audio track byte-identical byte-identical byte-identical DROPPED The subtitle track kept kept kept DROPPED Duration, frame rate, sync unchanged unchanged unchanged unchanged Sync offset in every column above: -2.7 ms, the same as the source file before anything was done to it. *"Re-encode" here means a pipeline that maps only the video. Mapping every stream keeps the audio and the subtitles exactly as the crop and inpaint columns do.

What "quality" actually means for a video file

"Losing quality" is usually said as if it were one thing, but a video file carries five things that can each be damaged separately, and a watermark remover touches them differently:

Keeping all five is the real meaning of "without losing quality". The methods below are judged on all five, not just on whether the mark disappeared — that part is covered on the three layers a mark can live in and on the page about avoiding a blur box.

What each method did to each of the five, measured

Every number below comes from one script on this machine that builds its own fixtures with ffmpeg and prints the table. The test file is 640x360, 30 fps, 4 seconds, 120 frames, H.264 at CRF 20, AAC audio, a mov_text subtitle track and four container tags. A clean copy and a marked copy are made, so the mark's own cost can be separated from the method's cost.

MethodPictureAudio streamSubtitleDuration / fpsSync
Metadata stripidentical framesidentical byteskept4.000000 s / 30 fps-2.7 ms
Crop the marked stripre-encoded, 44.15 dB vs cleanidentical byteskept4.000000 s / 30 fps-2.7 ms
Inpaint the rectanglere-encoded, 38.62 dB vs cleanidentical byteskept4.000000 s / 30 fps-2.7 ms
Re-encode, video onlyre-encodedgonegone4.000000 s / 30 fpsno audio left

Read the audio column first, because that is where the surprises are. In three of the four rows the audio stream is byte-identical: the same compressed bytes went in and came out, which is a stronger statement than "sounds fine". The fourth row has no audio at all. And the sync column never moves from -2.7 ms — including in the row that re-encoded the picture, because the picture and the sound were never re-timed relative to each other.

The metadata strip changes nothing, and that is checkable

When the mark is a record in the container rather than pixels — a C2PA provenance box, a title or artist tag — removing it does not have to touch the media at all. The cleaner on this site rewrites each such box in place as a same-size padding box, so no byte in the file changes position and the media payload is never re-encoded. On the test file:

file size      508778 -> 508778 bytes   (unchanged)
mdat payload   identical md5
video stream   identical md5
audio stream   identical md5
video frames   identical framemd5   (every frame decodes to the same bytes)
streams        video, audio, subtitle   (all still present)
duration       4.000000 s   30/1 fps   120 frames
tags removed   title, artist, encoder, comment

That is the strongest form of "no quality loss" available: not "looks the same", but "decodes to the same bytes". The trade is stated on the free video watermark remover page and it is worth repeating here — because the file does not get smaller, the file size does not drop. That is the price of never moving a byte, and it is why a faststart file keeps playing after the edit.

Cropping and inpainting: the picture is re-encoded, the audio is not

Once the mark is in the pixels, no method can restore the original frames — they were overwritten when the mark was drawn on. What you can choose is which cost to pay, and the measurement shows the audio is not part of it. Cropping the marked strip off and inpainting the rectangle both re-encode the picture, and both leave the audio stream byte-identical, because ffmpeg copies it with -c:a copy while it works on the video:

crop    audio stream md5   7a4f62b07fea6d77a00f485326b448fc   (same as source)
inpaint audio stream md5   7a4f62b07fea6d77a00f485326b448fc   (same as source)

one extra encode, no mark  48.80 dB   (the encode bill, nothing else)
marked vs clean            23.79 dB   (what the mark itself costs)
crop vs the same crop of the clean file   44.15 dB
inpaint vs clean                          38.62 dB

Read those together. A single extra encode of a clip that had no mark at all already costs 48.80 dB, so cropping at 44.15 dB is spending roughly the price of one encode and inventing nothing — every pixel you keep is a real pixel. Inpainting at 38.62 dB is spending the same encode plus the reconstruction, and it is still far better than leaving the mark (23.79 dB). Neither number is a quality loss in the audio, and neither changes the timeline. If your concern is the fill rather than the file, the logo page scores the same methods in more detail.

The failure that actually loses you the file: dropped tracks

The damage people report is not a soft picture. It is a video that comes back with no sound, or no captions — because the pipeline re-encoded the picture and never mapped the other streams. That is not hypothetical: it is what happens when a re-encode maps only the video, which is the default shape of a great many one-click tools. Measured on the same test file:

map every stream     streams: video, audio, subtitle
map only the video   streams: video

                     (the audio and the subtitle are not degraded - they are absent)

There is no warning for this. The file plays, the picture looks right, and the audio is simply gone. It is also the reason "does removing a watermark remove the audio" is worth answering with a command rather than an assurance: the stream list is the first thing to read, and it takes one line.

Sync: why the offset does not move

To measure sync rather than assume it, the test file is built with a sound and a picture event at the same instant: a 1 kHz tone gated to a burst at exactly 1.000 s, and a white flash at exactly 1.000 s. The tone's first loud sample and the flash's frame are then located in each output. The source file itself measures the tone at 1.0027 s against the flash at 1.0000 s — a residual 2.7 ms that the AAC encode left in the file before anything was done to it. That same -2.7 ms offset appears after the metadata strip, after cropping and after inpainting:

source file              tone 1.0027 s   flash 1.0000 s   offset -2.7 ms
after metadata strip     tone 1.0027 s   flash 1.0000 s   offset -2.7 ms
after cropping           tone 1.0027 s   flash 1.0000 s   offset -2.7 ms
after inpainting         tone 1.0027 s   flash 1.0000 s   offset -2.7 ms

The offset does not move because nothing re-timed it. Copying the audio stream cannot change the alignment — the bytes are the same bytes — and re-encoding the picture does not touch the audio at all. This is why the audio column in the table above is the one to watch: as long as the audio is copied, sync is preserved by construction, and the moment a tool re-encodes the audio it has introduced a variable that was not there before.

Check your own file in three commands

None of this needs the tool that made the file, or this site. On the file you have:

# 1. Is everything still there, and is the timeline right?
ffprobe -v error -show_format -show_streams cleaned.mp4
#    look for: one video stream, one audio stream, any subtitle stream,
#    and duration / r_frame_rate / nb_frames matching the original

# 2. Is the audio stream the same bytes as before?
ffmpeg -i original.mp4 -map 0:a -c copy -f md5 -
ffmpeg -i cleaned.mp4  -map 0:a -c copy -f md5 -
#    identical output means the audio was copied, not re-encoded

# 3. Did the picture change at all?
ffmpeg -i original.mp4 -map 0:v -f framemd5 - > before.txt
ffmpeg -i cleaned.mp4  -map 0:v -f framemd5 - > after.txt
diff before.txt after.txt
#    no output means every frame decodes to identical bytes

If the mark was in the container, check three gives no output and the file is provably untouched. If the mark was in the pixels, check three will differ on every frame — that is expected, because the picture was re-encoded — and checks one and two are the ones that catch a broken file. The metadata-strip method this site's browser tool performs is the case where all three pass at once, and it is described on the page about removing metadata from a video.

Frequently asked questions

Does removing a watermark reduce video quality?

It depends on which layer the mark is in. If the mark is a record in the container — a C2PA provenance box, a title or an artist tag — then removing it does not touch a single pixel: on this site's test file the picture decoded to identical bytes before and after, and the file did not change size. If the mark is painted across the frames, then removing it means re-encoding the picture, and that is where quality is spent, on every pixel in the frame rather than only the ones under the mark. Measured here, one extra encode of a clip that had no mark at all cost 48.80 dB; inpainting the marked rectangle reached 38.62 dB against the clean original. So the honest answer is: metadata removal costs nothing, pixel removal costs one generation.

Does removing a watermark from a video remove the audio?

It should not, and there is a way to prove it did not. The audio is a separate stream in the file, so a tool can copy it byte for byte while it rewrites the picture. On this site's test file, the audio stream's MD5 was identical after the metadata strip, after cropping and after inpainting — the same compressed bytes went in and came out. What does lose the audio is a pipeline that re-encodes the picture and forgets to map the other streams: the same command with only -map 0:v produced a file whose stream list was video and nothing else. That is the failure to look for, and it is visible in one line of ffprobe output.

Will my subtitles survive watermark removal?

If they are a real subtitle track inside the file — mov_text in an MP4, for instance — they survive anything that copies the streams, including the metadata strip, cropping and inpainting, as long as the tool maps them. On the test file the subtitle stream was still present after all three. The risk is the same one that loses the audio: a re-encode that maps only the video drops the subtitle track silently, and you find out when the file plays with no captions. Burned-in subtitles are a different case entirely — those are pixels, and they come off only the way the mark does.

Does removing a watermark change the video's duration or frame rate?

Not on any method measured here. The test file was 4.000000 seconds, 30/1 frames per second and 120 frames, and those three numbers were identical after the metadata strip, after cropping the marked strip off and after inpainting the rectangle. Removing a watermark is not a trim and not a speed change, so there is no reason for the timeline to move — but it is one of the first things to check, because a tool that re-times the file to its own container will show it here. ffprobe prints duration, r_frame_rate and nb_frames in one call.

Can watermark removal put the audio out of sync?

Only if the tool re-encodes the audio instead of copying it. When the audio stream is copied, its bytes are unchanged, so the alignment cannot move — that is a proof, not a promise. On the test file the beep was authored at exactly 1.000 s; it measured at 1.0027 s in the source, a residual 2.7 ms from the AAC encode that was already there before anything was done to the file, and it measured at exactly the same 1.0027 s after the metadata strip, after cropping and after inpainting. The offset never moved. Re-encoding the audio produces a different stream, which is where a tool can introduce a delay that was not in the original.

How do I check that a cleaned video is still intact?

Three commands, and none of them needs the original tool. First, ffprobe -v error -show_format -show_streams cleaned.mp4 to confirm the stream list still contains the video, the audio and any subtitle track, and that duration and frame rate are what you expect. Second, ffmpeg -i original.mp4 -map 0:a -c copy -f md5 - against the same command on the cleaned file, to confirm the audio stream is byte-identical. Third, ffmpeg -i original.mp4 -f framemd5 - against the cleaned file, to see whether the picture changed at all — no output from a diff means every frame decodes to the same bytes. If the tool re-encoded the picture, that last comparison will differ everywhere, which is expected; the first two are the ones that catch a broken file.