Per-Title Encoding: How Convex Hull Ladders Cut Bandwidth 30% Without Touching Quality
One-size-fits-all bitrate ladders waste bits on easy content and starve complex scenes. Here's how content-aware per-title encoding fixes both — with the convex hull math explained.
A fixed bitrate ladder treats a slow dialogue scene identically to a chaotic action sequence — which means you’re simultaneously wasting bits on content that doesn’t need them and starving content that does. Per-title encoding fixes this by generating a custom ladder for every asset, derived from that asset’s actual rate-distortion curve.
The Problem with Fixed Ladders
Fixed ladder (industry standard):
1080p @ 6.0 Mbps ── plenty for dialogue, starved for action
720p @ 3.0 Mbps
480p @ 1.2 Mbps
360p @ 0.6 Mbps
Same clip, per-title results:
Simple talking head: 1080p needs only 2.8 Mbps to hit VMAF 95
Fast action scene: 1080p needs 8.5 Mbps to hit VMAF 95
Encoding the talking head at 6Mbps overshoots by 2× — viewers burn data for imperceptible gain. Encoding the action scene at 6Mbps undershoots — visible blocking on a flagship title.
Convex Hull Optimization: The Math in Plain Terms
Per-title systems encode each asset at a dense grid of (resolution × bitrate) candidates, then score every point:
VMAF
100 ┤ ● ← (1080p, 12Mbps)
│ ●
95 ┤ ●
│ ● ← convex hull frontier
90 ┤ ● ○ ○ ○ ← dominated points (worse quality
│ ○ ○ ○ ○ per bit than hull)
85 ┤ ●
└──────────────────────────── bitrate →
Any (resolution, bitrate) point falling inside the hull is dominated — another point exists offering better quality at lower bitrate. The optimal ladder is literally the convex hull boundary, filtered down to a practical rung count.
The Practical Pipeline
Input asset
│
▼
[ Chunked sample encodes: 4 resolutions × 6 bitrates ]
│
▼
[ VMAF scoring per chunk → aggregate RD curve ]
│
▼
[ Convex hull extraction → select 5-7 rungs ]
│
▼
[ Full-length encode at chosen rungs → package ]
The sampling stage is the clever part: encode only 5-10% of the asset (spread across scene changes) to build the curve, so the analysis adds ~15% compute overhead rather than 6× full encodes.
Measured Impact on a Real Catalog
Applying per-title ladders across a mixed-content library:
- -31% average bytes delivered at matched VMAF
- +3.2 VMAF points on complex content at matched bitrate
- -22% rebuffer events — lower rungs are genuinely lower, so ABR downshifts land on watchable quality
Full methodology and ladder templates at Per-Title Encoding & Convex Hull Optimization Guide.
Implementation Notes
- Keep rung count at 5–7 — more rungs fragment CDN cache efficiency
- Enforce a floor on the lowest rung (~300kbps video) so audio isn’t the dominant stream size
- Re-derive ladders on codec upgrades — a hull computed for x264 doesn’t transfer to AV1