How to remove black bars and letterbox from a video
- Step 1Identify the bar type — Letterbox = horizontal black bars top and bottom (a wide frame inside 16:9). Pillarbox = vertical black bars left and right (a 4:3 frame inside 16:9). Windowbox = all four. The bar type tells you which offset(s) you need to set.
- Step 2Measure the bar thickness — Drop the file so the picker paints frame 0. Drag the box so one edge sits exactly on the boundary between black and picture; the readout tells you the offset in source pixels. For a symmetric letterbox the top-bar height equals the bottom-bar height, so you only measure one.
- Step 3Compute the keep window — Letterbox:
Y = topBar,Height = sourceHeight − 2×bar,X = 0,Width = sourceWidth. Pillarbox:X = sideBar,Width = sourceWidth − 2×bar,Y = 0,Height = sourceHeight. For asymmetric bars, subtract the top and bottom (or left and right) separately. - Step 4Enter the numbers and verify the box hugs the picture — Type X, Y, Width, Height into the inputs. The picker box should sit flush against the inner edge of the bars with no black visible inside it and no picture cut off. Adjust by 1–2 px if you see a sliver.
- Step 5Run the crop — JAD applies
crop=W:H:X:Y(W/H rounded to even) and re-encodes to MP4 with libx264 at CRF 20, preset medium. Audio is copied unchanged. The bars are gone; the result is full-bleed at the active image's true aspect ratio. - Step 6Confirm and tidy aspect ratio if needed — Play the output to confirm no black remains. If you de-letterboxed to a non-standard size (e.g. 1920×800) and a target platform wants a fixed shape, follow up with video-resizer or a platform formatter — this tool only crops, it does not pad or scale.
Offset math by bar type
Formulas for the keep window. bar is the measured thickness of one black bar; symmetric assumes top=bottom (or left=right). All examples assume a 1920×1080 source.
| Bar type | X | Y | Width | Height |
|---|---|---|---|---|
| Letterbox (top + bottom) | 0 | topBar | sourceWidth (1920) | sourceHeight − 2×bar |
| Pillarbox (left + right) | sideBar | 0 | sourceWidth − 2×bar | sourceHeight (1080) |
| Windowbox (all four) | sideBar | topBar | sourceWidth − 2×sideBar | sourceHeight − 2×topBar |
| Asymmetric letterbox | 0 | topBar | sourceWidth (1920) | sourceHeight − topBar − bottomBar |
Common letterbox/pillarbox sizes worked out
Ready-made keep windows for the most frequent matte cases on a 1920×1080 source. Heights are already even.
| Original content | Matte in 16:9 | Bar size (each) | Crop to enter (X/Y/W/H) |
|---|---|---|---|
| 2.39:1 cinematic | Letterbox top+bottom | ≈ 140 px | 0 / 140 / 1920 / 800 |
| 2.35:1 cinematic | Letterbox top+bottom | ≈ 132 px | 0 / 132 / 1920 / 816 |
| 1.85:1 theatrical | Letterbox top+bottom | ≈ 21 px | 0 / 22 / 1920 / 1036 |
| 4:3 (1.33:1) standard | Pillarbox left+right | ≈ 240 px | 240 / 0 / 1440 / 1080 |
| 1:1 square | Pillarbox left+right | ≈ 420 px | 420 / 0 / 1080 / 1080 |
Cookbook
Worked examples from real letterboxed and pillarboxed sources. Each shows the measurement, the math, and the resulting crop filter.
Strip a 2.39:1 letterbox from a 1080p export
A cinematic 2.39:1 frame matted into 1920×1080 has ~140 px bars top and bottom. Keep the middle 800 rows. Active aspect becomes 1920:800 = 2.4:1.
Source: 1920 × 1080, ~140 px bars top & bottom Math: Height = 1080 - (2 × 140) = 800, Y = 140 Inputs: X=0 Y=140 Width=1920 Height=800 FFmpeg runs: crop=1920:800:0:140 Result: full-bleed 1920×800 MP4, no black bars.
Remove pillarbox from a 4:3 clip in a 16:9 container
Old 4:3 footage hard-matted into 1920×1080 has ~240 px bars left and right. Keep the centre 1440 columns → a true 4:3 (1440×1080) frame.
Source: 1920 × 1080, ~240 px bars left & right Math: Width = 1920 - (2 × 240) = 1440, X = 240 Inputs: X=240 Y=0 Width=1440 Height=1080 FFmpeg runs: crop=1440:1080:240:0 Result: clean 1440×1080 (4:3) MP4.
Asymmetric bars from an off-centre tape capture
A VHS-to-digital capture has 80 px of black on top but only 60 px on the bottom. Subtract each independently rather than assuming symmetry.
Source: 1920 × 1080, top bar 80, bottom bar 60 Math: Height = 1080 - 80 - 60 = 940, Y = 80 Inputs: X=0 Y=80 Width=1920 Height=940 FFmpeg runs: crop=1920:940:0:80 Result: 1920×940 MP4 with both uneven bars removed.
Windowboxed clip with bars on all four sides
A double-matted export (a 4:3 frame letterboxed then the whole thing pillarboxed) has black on every edge. Set both X/Y offsets.
Source: 1920 × 1080, side bars 240, top/bottom bars 60
Math: Width = 1920 - 480 = 1440
Height = 1080 - 120 = 960
Inputs: X=240 Y=60 Width=1440 Height=960
FFmpeg runs:
crop=1440:960:240:60
Result: 1440×960 MP4, all four bars gone.Leave a 1-px safety margin to avoid edge bleed
On noisy captures the black is not pure — there's a faint dark transition row. Crop 1 px tighter than the measured edge so no near-black leaks in.
Measured top bar: 140 (with a faint transition row at 139)
Tighten by 1 px each side:
Inputs: X=0 Y=141 Width=1920 Height=798
FFmpeg runs:
crop=1920:798:0:141
Result: 1920×798 MP4 — one extra picture row sacrificed,
zero black bleed.Edge cases and what actually happens
Expecting the tool to find the bars automatically
Not availableThere is no cropdetect/auto black-bar detection in this tool — you measure and enter the offsets yourself. Use the visual picker to drag the box edge onto the black/picture boundary and read the number. Manual is more reliable here: auto-detect on imperfect captures often clips real picture or leaves a sliver of black.
A faint sliver of black remains after cropping
Under-croppedYour measured bar was 1–2 px short of the true edge — common when the black isn't pure (noise, a transition row). Re-run with the offset increased by 1–2 px (and Height/Width reduced by twice that). One sacrificed picture row beats a visible black line.
A row of real picture got cut
Over-croppedYou measured the bar slightly too thick. Reduce the offset by a pixel or two and increase Height/Width to match. Iterating costs nothing — the source is re-read fresh each run with no cumulative quality loss.
Resulting dimension is odd (e.g. Height 939)
By designWidth and Height snap down to the nearest even number before FFmpeg runs, so a computed 939 becomes 938. That one-pixel difference is invisible; just be aware your keep window is even, which is required for H.264.
Crop window runs off the frame after a miscalculation
Crop failedIf you mistype and Y + Height exceeds the source height (or X + Width exceeds the width), the run aborts with Crop failed. Re-derive the keep window: Height should equal sourceHeight minus the two bars, and Y should equal the top bar — they cannot both be large.
Bars are dark grey, not pure black
SupportedThe crop doesn't care about colour — it removes whatever pixels fall outside your rectangle. So grey 'crush' bars, near-black mattes, and pure black all crop identically. You just have to spot the boundary visually in the picker, which is easier on the bright picture edge than on the bar itself.
After de-letterboxing you have a non-standard size like 1920×800
ExpectedRemoving bars reveals the content's true aspect, which is often not a standard resolution. That's correct — the bars were the only thing making it 16:9. If a destination needs a fixed shape, resize or re-format afterwards with video-resizer or a platform formatter; this tool will not pad.
Output is full-bleed but you wanted to keep 16:9 with content centred
Wrong toolCropping removes the bars entirely, changing the aspect ratio. If you instead want the content scaled up to fill a 16:9 frame (so it stays 16:9 with no bars), that's a crop-then-scale job — use video-resizer after this crop, or auto-reframe for a tracked fill.
Source already has clean edges (no bars)
ExpectedIf there are no bars, cropping just trims picture — there's nothing to remove. Verify the dark edges are actually baked-in pixels (visible in the picker) and not your player's background showing through a mismatched window.
Multiple files with the same matte
Manual per fileEach file's crop is set individually here — there's no shared-rectangle batch. If a whole season of episodes shares one matte, note the X/Y/W/H once and re-enter it per file. The numbers are deterministic, so the result is identical across files of the same source dimensions.
Frequently asked questions
Can the tool detect the black bars for me?
No — there is no automatic black-bar detection. You measure the bar thickness (the visual picker makes this easy: drag the box edge onto the black/picture boundary and read the pixel value) and enter the offsets. Manual control is actually more reliable on real captures, where bars are rarely perfectly pure and auto-detect tends to over- or under-shoot.
How do I crop just the top and bottom bars (letterbox)?
Set X = 0, Width = sourceWidth (keep full width), Y = topBar (the measured top-bar height), and Height = sourceHeight − 2×bar. For a 1920×1080 source with 140 px bars that's crop=1920:800:0:140. If the bars are uneven, subtract the top and bottom amounts separately.
How do I remove pillarbox (side) bars?
Set Y = 0, Height = sourceHeight (keep full height), X = sideBar, and Width = sourceWidth − 2×bar. A 4:3 clip pillarboxed in 1920×1080 has ~240 px bars, so crop=1440:1080:240:0 gives you a clean 1440×1080 frame.
Will removing the bars change the aspect ratio?
Yes, and that's the point — the bars are what made it 16:9. Stripping a 2.39:1 letterbox from 1080p yields ~1920×800 (2.4:1). The result is the content's true aspect. If a destination needs a fixed shape, resize or re-format afterwards; this cropper never pads.
Why is there still a thin black line after cropping?
You under-cropped by a pixel or two — common when the black isn't pure (sensor noise or a transition row). Re-run with the offset increased by 1–2 px and the kept dimension reduced by twice that. Iterating is free of quality cost because the source is re-read each time.
Does removing bars reduce quality?
The crop re-encodes the kept region with libx264 at CRF 20 (visually near-lossless), so quality is preserved at that level. You only re-encode once per run, and audio is stream-copied untouched, so there's no audio re-compression.
What about bars that are dark grey instead of black?
It makes no difference. The crop removes whatever pixels are outside your rectangle regardless of their colour, so grey-crush mattes, near-black, and pure black all crop the same way. You just need to spot the boundary in the picker.
Is the file uploaded?
No. Everything runs in your browser with WebAssembly FFmpeg — your master never leaves your machine. The Free tier handles files up to 1 GB locally with no transfer; Pro and above go to 10 GB and beyond.
Can I batch-remove the same matte from a whole series?
The cropper sets a rectangle per file, so there's no shared-rectangle batch here. For a series sharing one matte, note the X/Y/W/H once and re-enter it per file — because the math is deterministic, identical source dimensions give identical results.
My bars are uneven (more on top than bottom). Can I still crop?
Yes. Set Y to the top-bar height and Height = sourceHeight − topBar − bottomBar. The X/Y offsets are fully independent, so asymmetric mattes from tape captures crop cleanly.
What's the difference between this and resizing the video?
Cropping discards the bar pixels and changes the dimensions to the active image; resizing scales the whole frame (bars included) to a new size. To remove bars you crop. If after cropping you want a specific output resolution, follow up with video-resizer.
What output format and codec do I get?
Always an MP4 with H.264 video at CRF 20 and the original audio stream copied in. There's no format choice on this tool. To convert the result to another codec or container, run it through video-transcoder.
Privacy first
Every JAD Video tool runs entirely in your browser via WebCodecs and FFmpeg (WebAssembly). Your video files never leave your device — verified by zero outbound network requests during processing.