How to make a video black and white (or keep one color)
Make a video black and white by setting its saturation to zero with FFmpeg's hue or eq filter, or keep one color with colorhold. How to do it on Sume.

To make a video black and white, set its color saturation to zero: in FFmpeg that's the hue=s=0 filter, and eq=saturation=0 or monochrome work too. With Sume, send a clip already hosted on media.sume.com and the filter, as its filtergraph, to POST /v1/video-filter, and you get back a new black-and-white MP4 with the clip's sound.
The filter options come from the FFmpeg filters documentation and the Sume facts from the Video filter docs and the Sume API reference, all read on 2026-09-27. Which filters Sume accepts, and how it encodes, is read from its filter compiler and describes current behavior.
Which filter makes a video black and white?
Any of these three does it, and all three are on Sume's filter allowlist today. Saturation is how much color each pixel carries, so at zero only its lightness is left. Because eq also sets contrast and brightness, eq=saturation=0:contrast=1.2 removes the color and raises the contrast in one filter.
| Filtergraph | What FFmpeg's docs say | Range and default |
|---|---|---|
hue=s=0 | hue modifies the hue and/or the saturation; s is the saturation | s from −10 to 10, default 1 |
eq=saturation=0 | eq sets brightness, contrast, saturation, and approximate gamma | saturation from 0.0 to 3.0, default 1 |
monochrome | Converts video to gray using a custom color filter | cb and cr from −1 to 1, default 0 |
How do I make a video black and white with the Sume API?
Send the clip and the filter to POST /v1/video-filter with an Idempotency-Key. 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.
- Validate first with
POST /v1/video-filter/check: the same body, no job, and no reserved credits. A program that passes can still fail on the worker, for example on a bad expression, and that comes back as a job error. - The default
modeisasync, so pollGET /v1/jobs/:id/statusand thenGET /v1/jobs/:id/result. Thekind: video_filterresult carries a newvideo_urlwith the source's size, frame rate, and audio; the source is untouched.
curl -X POST https://api.sume.com/v1/video-filter \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: black-and-white-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/clip.mp4",
"filtergraph": "hue=s=0"
}'How do I make a video black and white except for one color?
Use colorhold, which is also on the allowlist today. FFmpeg's docs say it removes all color information for all RGB colors except for the one you name, for example colorhold=color=red:similarity=0.3:
colortakes a color name such asredor a hex value such as0xD62828, per FFmpeg's color syntax.similaritysets how close a pixel must be to that color to keep it: 0.01 matches only the exact color, and 1.0 matches everything.blendat 0.0 makes the other pixels fully gray; higher values keep more of their color.- A real object is rarely one exact color, so raise
similarityuntil it keeps its color, and lower it if other things keep theirs too.POST /v1/video-frameson the result returns full-size stills to check, unbilled.
What are the limits?
- One clip per job, up to 300 seconds; a longer source fails with
output_duration_exceeded. - The filter refuses HDR sources (PQ or HLG) with
hdr_source_unsupported. APOST /v1/video-inspectprobe, which is unbilled, reportshdrbefore you submit. - The graph holds up to 32 named filters and 2,048 characters, so other fixes can go in the same pass; the filter allowlist post lists what's allowed and how the output is encoded.
- As written, these graphs change every frame of the clip. To change one section only, cut the clip into parts with video trim, filter the part you want, and join the parts in a Timeline 1.0 render over the clip's detached audio.
- The check is free, and each encode is billed per job; the docs say to confirm the rate in
GET /v1/catalog.
Sources
Related posts
More in Media tools
- How to merge two videos of different resolutions
Merge two videos of different resolutions by scaling both into one frame: crop, pad, blur, or stretch each clip, then join them with their sound.
- Meta video ad specs: 4:5 feed, 9:16 Reels, and safe zones
Meta lists 4:5 at 1440×1800 for Facebook Feed video ads and 9:16 for Instagram, with a Reels safe zone. How to make each with Sume and place captions.
- How to convert MP3 to MP4 with an image
Turn an MP3 into an MP4 with one picture: a Timeline 1.0 render holds the image for the whole track, up to 30 minutes, at the frame size you set.
- MP4 video has no sound? Find where the audio went
An MP4 with no sound has no audio track, a silent one, or one your player can't decode. Check with a free probe, then fix the step that lost it.
Written by Sume