A watermark is just a second image layered on top of the video. The overlay filter takes an x:y position, and because it understands the main video width W/H and the logo width w/h, you can pin it to a corner with simple math that works at any resolution. Use a transparent PNG so only the logo shows.
Key takeaways
overlay=x:ypositions the second input over the first.- Corner formulas use
W/H(video) andw/h(logo). - A transparent PNG keeps the background invisible.
- Lower logo opacity with
format=rgba,colorchannelmixer=aa=0.5.
Logo in a corner with padding
Pin it bottom-right with 20px of margin — swap the formula for any corner:
# bottom-right, 20px margin ffmpeg -i in.mp4 -i logo.png -filter_complex \ "overlay=W-w-20:H-h-20" -c:a copy out.mp4 # corners: top-left 20:20 top-right W-w-20:20 # bottom-left 20:H-h-20
Scale the logo and lower its opacity
Resize the logo relative to the video width so it looks right on any footage, and dial its transparency down so it doesn't dominate:
ffmpeg -i in.mp4 -i logo.png -filter_complex \ "[1:v]scale=iw*0.15:-1,format=rgba,colorchannelmixer=aa=0.6[wm]; \ [0:v][wm]overlay=W-w-20:H-h-20" -c:a copy out.mp4
Text watermark (no image needed)
For a quick credit or handle, drawtext burns text directly — semi-transparent white in the bottom-right:
ffmpeg -i in.mp4 -vf \ "drawtext=text='@yourhandle':[email protected]:fontsize=28:\ x=W-tw-20:y=H-th-20" -c:a copy out.mp4
Add a watermark visually instead
FFmpegLab lets you drag a logo onto the preview, resize it, and set opacity — then writes the matching overlay command behind the scenes, fully offline. Layer it alongside other filter_complex effects, then compress for delivery.