redzilla
CCTV

CCTV Sized Right

“You can see him, but you can’t recognize him” is CCTV’s most expensive sentence: it means the camera was chosen wrong. DORI puts numbers on sharpness, and storage gets calculated before buying — not after.

≈ 13 min read

The building manager is positive: "the camera caught him clean". You open the recording and sure enough, there he is: a guy walking out the gate with a bike over his shoulder, in broad daylight. You zoom into the face and the face is a twelve-pixel smudge under a baseball cap. You can see him, but you can't recognize him — CCTV's most expensive sentence, because it's almost always spoken after the theft, when there's nothing left to zoom. The good news: whether a camera can identify someone is not luck, and it's not marketing. It's a division. And you can do it before you buy.

DORI: putting numbers on "looks sharp"

The EN 62676-4 standard put numbers on sharpness with the DORI criteria: four levels of visual task, each with a minimum pixel density on the target, measured in pixels per meter (px/m). It's not how many megapixels the camera has — it's how many pixels land on each meter of scene in the plane where your subject is standing.

Levelpx/mWhat it buys youMax with 1080p and 90° FOV
Detect25knowing someone or something is there38.4 m
Observe63clothing, direction, what they're doing15.2 m
Recognize125confirming someone you already know7.7 m
Identify250singling out a stranger, with evidence-grade quality3.8 m

Mind the gap between recognize and identify: recognize works for someone you already know ("that's the night guard from next door"); identify means singling out a stranger with enough quality to hand to the police. Between one and the other sits exactly a factor of two in pixels — and as you're about to see, doubling pixels gets expensive in distance.

DORI thresholds assume friendly conditions: even lighting, subject facing the camera, no rain or backlight. Real life brings noisy IR, moving people and compression eating the fine detail. If the requirement says "recognize", design for identify: that factor-of-2 margin is the difference between a face and a smear at 3 AM.

From the camera to px/m: one division

The mother formula is this: px/m = horizontal resolution ÷ scene width. A 1080p camera has 1920 horizontal pixels. If its frame covers a plane 7.68 m wide, every meter gets 1920 ÷ 7.68 = 250 px/m: full identification across that entire plane. Point the same sensor at a 40 m parking lot and each meter gets 48 px/m: you'll detect shapes, and that's the end of the story.

So what sets the scene width? Distance and lens. A lens with horizontal field of view (FOV) θ opens, at distance d, a scene 2 · d · tan(θ/2) meters wide. Combine both: px/m = res ÷ (2 · d · tan(θ/2)). Solve it for a 90° FOV — tan 45° = 1, how considerate — on a 1080p camera: you identify out to 1920 ÷ 500 = 3.84 m. Less than four meters from the lens. Beyond that the whole hallway "looks fine": you recognize out to 7.7 m, observe to 15.2, detect to 38.4… but none of that will single out a stranger.

DORI fan for a 1080p camera with a 90 degree FOV: identify up to 3.8 m, recognize to 7.7, observe to 15.2 and detect to 38.4 DORI zones — 1080p camera (1920 px) · 90° FOV max d = 1920 ÷ (2 · px/m · tan 45°) · compressed scale IDENTIFY 250 px/m RECOGNIZE 125 px/m OBSERVE 63 px/m DETECT 25 px/m camera 3.8 m 7.7 m 15.2 m 38.4 m
With 1080p and a 90° FOV, identification (250 px/m) ends 3.84 m from the camera. The rest of the fan only detects and observes.

Double the resolution? A 4K camera (3840 px) with the same 90° FOV pushes the identification border from 3.84 to 7.68 m. Exactly double — no miracle — and it charges you double in bitrate and disk, as you'll see below. Before wrestling the trigonometry, the lens & FOV calculator runs this math with your camera's actual sensor and focal length, and draws all four zones on the plan.

Fixed lens, varifocal, and the wide-angle toll

The fixed lens (2.8 or 4 mm on most domes) is cheap and never drifts, but its framing is married at the factory: if the scene doesn't fit, the camera is wrong forever. The varifocal (typically 2.8–12 mm) lets you adjust the framing on site — and the motorized version, from your desk. It costs more, but when you can't measure the scene before quoting, it's insurance against a second site visit.

CCTV's central trade-off lives right here: a wide-angle lens spreads the same 1920 pixels over a huge scene. Lots of coverage, little density. There's an elegant way to see it: with 1080p, identification always happens where the scene is 7.68 m wide — the lens merely decides how far away that plane sits. With 2.8 mm (≈ 90°), it's 3.8 m from the camera. With a ≈ 10 mm telephoto (30° FOV), it's 14.3 m: the same scene, almost four times farther out, in exchange for seeing one narrow corridor and nothing else.

Lens comparison at 1080p: a 90 degree FOV identifies up to 3.8 meters over a wide scene; a 30 degree FOV identifies up to 14.3 meters over a narrow scene 90° FOV (2.8 mm lens) — wide scene, short ID range you identify up to 3.8 m the scene there is 7.68 m wide 3.8 m 30° FOV (tele, ≈ 10 mm) — narrow scene, long ID range same 7.68 m scene, at 14.3 m 250 px/m down the whole corridor 14.3 m
Same 1920 px: the lens doesn't create sharpness, it only chooses where to spend it. Wide = close and broad; tele = far and narrow.
There is no single camera that watches the entire parking lot and identifies faces at the entrance. Detecting and identifying are different jobs solved by different cameras: a wide-angle covering the area, plus a dedicated one aimed at the choke point every face must pass through — gate, turnstile, checkout. That second camera is the one the prosecutor can actually use.

Storage: bitrate × time, no magic

NVR storage holds no mystery: it's total bitrate × retention time, with a ÷ 8 along the way because bits travel eight to a byte. Let's run the canonical project — 8 cameras at 1080p, H.264 at 4 Mbps, 30-day retention — with every decimal in plain sight:

  1. Aggregate bitrate: 8 cameras × 4 Mbps = 32 Mbps arriving at the NVR, day and night.
  2. Bits to bytes: 32 ÷ 8 = 4 MB/s of sustained disk writes.
  3. A day has 86,400 seconds: 4 × 86,400 = 345,600 MB = 345.6 GB/day (43.2 GB per camera).
  4. 30 days of retention: 345.6 × 30 = 10,368 GB ≈ 10.37 TB — in decimal units, the same ones disks are sold in, so the comparison is apples to apples.
  5. With H.265? The same period drops to ≈ 5.18 TB: the codec delivers similar quality at roughly half the bitrate. Turn on VBR with motion-based recording and the real average falls further still — a parking lot at 4 AM produces far fewer bits than a supermarket checkout at noon.
Storage calculation cascade: 8 cameras at 4 Mbps make 32 Mbps, or 4 MB/s, which adds up to 345.6 GB per day and about 10.37 TB in 30 days From bitrate to disk — 8 cameras, H.264 at 4 Mbps 8 cameras × 4 Mbps converge at the NVR 32 Mbps ÷ 8 (bits → bytes) 4 MB/s of writes × 86,400 s/day 345.6 GB/day 43.2 GB/day per camera × 30 days of retention ≈ 10.37 TB with H.265: ≈ 5.18 TB same period, half the bitrate
The full cascade: Mbps → MB/s → GB/day → TB/month. Four operations, zero faith.

Better yet, the arithmetic audits itself in production: one day of one camera at 4 Mbps weighs exactly what the formula says it should.

nvr — one day of the gate camera
$ du -sh /nvr/gate-cam/2026-07-09/
43.2G   /nvr/gate-cam/2026-07-09/
# 4 Mbps × 86,400 s ÷ 8 = 43.2 GB — the formula doesn't miss

Add 10–20 % of headroom on top: VBR bitrates spike, disks shouldn't run at 100 % full, and the day of the incident always has more motion than the average day. The CCTV storage calculator runs this cascade with resolution, FPS, codec and activity factor; and if your project mixes profiles — four domes, two telephotos, one PTZ — the CCTV project calculator adds up the whole mix at once.

The VMS server: the part nobody sizes

Everyone quotes cameras; almost nobody sizes the machine that records them. A VMS server has three bottlenecks, and none of them is the CPU.

The first is recording bandwidth: how many sustained Mbps the software can write without dropping frames. A typical mid-range server is specced around 300 Mbps — at 4 Mbps per camera that's 75 cameras; our 32 Mbps project has room to spare, but a casino with 120 4K cameras already needs more than one server. The second is RAM: recording is light, what's heavy is analytics and transcoding streams for the video wall; vendors usually ask for 8 GB as a floor and 16 or more with analytics running. The third — the one everybody forgets — is the disks.

A "16-channel NVR" does not mean 16 cameras at any bitrate. A budget 16-channel NVR with an 80 Mbps recording cap falls short with 16 4K cameras at 8 Mbps: that's 128 Mbps. It would record in stutters or force you to degrade quality. Always check the Mbps limit on the datasheet, not the number on the box.

CCTV writing is continuous, sequential and eternal: 24/7, 365 days a year. Our "small" example writes 126 TB per year — 63 TB per disk on a mirrored pair. A typical desktop drive is rated for about 55 TB/year of workload and office hours; you'd be running it above its rating from day one. Surveillance drives ("purple", SkyHawk and friends) are rated for 180 TB/year, 24/7 duty and firmware built for streams: they fail less and fail later. The VMS server calculator crosses cameras, bitrate, retention and per-server limits to tell you how many machines and which disks you need.

PoE: your cameras eat lunch too

Every IP camera eats watts through the same data cable, and the switch has a finite budget. A fixed dome draws 4–7 W: 802.3af covers it easily (up to 12.95 W delivered to the device). But long-range IR, PTZ motors or the heater on an outdoor housing change the league: PoE+ (802.3at, 25.5 W) or even 802.3bt for the hungriest. Our 8 cameras at ~6 W add up to 48 W — and an 8-port PoE switch with a 60 W budget is left with 12 W free: the PTZ somebody will request next year no longer fits. Run the sum through the PoE budget calculator before quoting the switch, and if classes, watts and voltage drop still ambush you, the PoE Without Surprises guide takes it all apart.

The recipe fits on a napkin: define the DORI level for each spot, pick the lens with the calculator, multiply bitrate by time before quoting disks, and check that the server and the switch can carry the load. Run the full project through the CCTV project calculator and walk into the meeting with numbers — let "you can see him, but you can't recognize him" be the other guy's install.

Tools to practice with