How to blur part of a video or black it out

Blur part of a video by cropping the area, blurring it, and overlaying it back in one FFmpeg filtergraph on Sume, or cover it with a solid drawbox.

5 min readSume
All posts

To blur part of a video, copy the frame, crop the area you want to hide from the copy, blur it, and overlay it back at the same position; to hide the area completely, draw a solid box over it instead. In FFmpeg either one is a single filtergraph (split, crop, gblur, and overlay, or drawbox), and Sume's POST /v1/video-filter runs it on a clip already hosted on media.sume.com and returns a new MP4. With fixed numbers the area stays in the same place for the whole clip, so it won't follow a face or a plate that moves.

The filter syntax comes from the FFmpeg filters documentation and the Sume facts from the Video filter and Video frames docs and the Sume API reference, all read on 2026-09-27. Behavior read from Sume's filter compiler is described as it works today.

How do I blur a fixed area of a video?

Measure the area in pixels from the frame's top-left corner, then fill in this graph: split[main][copy];[copy]crop=400:120:760:900,gblur=sigma=20[blurred];[main][blurred]overlay=760:900. It's the pattern FFmpeg's own docs use to process part of a picture and lay it back on top:

  • split makes two copies of the frame, labeled [main] and [copy].
  • crop=400:120:760:900 keeps a 400×120 area of the copy whose top-left corner is at x 760, y 900.
  • gblur=sigma=20 blurs it. sigma is the Gaussian blur's standard deviation, default 0.5, and applies vertically too unless you set sigmaV; a larger value blurs more.
  • overlay=760:900 lays the blurred area back on [main] at the same x and y.
  • Sume accepts internal labels such as [main] but refuses stream specifiers such as [0:v], because the server supplies the input and output. Today the graph must also start and end with a filter, not a label.
curl -X POST https://api.sume.com/v1/video-filter \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: blur-area-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/screen-recording.mp4",
    "filtergraph": "split[main][copy];[copy]crop=400:120:760:900,gblur=sigma=20[blurred];[main][blurred]overlay=760:900"
  }'

How do I black out part of a video instead?

Draw a filled box: drawbox=x=760:y=900:w=400:h=120:color=black:t=fill. x and y are the box's top-left corner, t=fill fills the box instead of drawing a 3-pixel edge, and color takes a name or a hex value in FFmpeg's color syntax. If a blur still leaves text readable, raise sigma or use the box. Two boxes are two drawbox filters joined by a comma.

How do I find the area's position and size?

Take full-size stills with POST /v1/video-frames: it's unbilled, keeps the source frame size when you leave out max_edge, and takes up to 24 times per call in at[]. Read the area's top-left corner and size in any image editor. If the thing you're hiding moves a little, size the box to cover every position you see across the stills.

The clip must already be your workspace's media.sume.com artifact or asset, such as an earlier Sume job's output; which URLs each endpoint accepts explains the rule.

Can I blur only a few seconds of the video?

Yes, in a few steps. The graph above blurs every frame of the clip, so cut the clip into parts with video trim, filter the part that needs it, and join the parts in a Timeline 1.0 render. Today a render's sound comes from its audio spine, not from the clips, so pass the clip's track from audio detach as audio.url.

What are the limits?

The result is a new MP4 with the source's size, frame rate, and audio; the source stays untouched.

From Video filter and the Sume API reference, read 2026-09-27.
LimitValue
SourceOne Sume-hosted clip of up to 300 s; a longer one fails with output_duration_exceeded
Graph sizeAt most 2,048 characters and 32 named filters; the blur graph above names four
LabelsInternal labels only; a stream specifier fails with invalid_filtergraph
HDR sourcesPQ and HLG are refused with hdr_source_unsupported
BillingPOST /v1/video-filter/check is free; each encode is billed per job (confirm in GET /v1/catalog)

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume