Content-Aware Encoding
Content-aware encoding analyzes your source video to optimize encoding parameters for each specific piece of content. Instead of using fixed bitrate ladders, Transcodely adjusts compression based on the visual complexity of each title — simple content (talking heads, animation) gets lower bitrates without quality loss, while complex content (action, sports) gets the bitrate it needs.
Content-aware encoding is configured via the content_aware object on an Output Specification.
Content-aware encoding adds a 1.15x feature multiplier to the output cost. See Pricing for details.
The ContentAwareConfig object
| Attribute | Type | Required | Description |
|---|---|---|---|
mode | enum | Yes | Content-aware mode. One of: per_title, auto_abr. See Modes. |
vmaf_target | number | No | Target VMAF score (70—99). Overrides the default VMAF target for the quality tier. See VMAF targeting. |
auto_abr | object | No | Configuration for automatic ABR ladder generation. Only valid when mode is auto_abr. See Auto ABR. |
Modes
| Mode | API Value | Description |
|---|---|---|
| Per-title | per_title | Optimizes the bitrate for each variant you define. Your ABR ladder structure (resolutions, codecs) stays the same, but the bitrate for each variant is adjusted based on content complexity to meet the VMAF target. |
| Auto ABR | auto_abr | Automatically generates the entire ABR ladder. Transcodely analyzes the source and determines the optimal number of variants, resolutions, and bitrates. You specify constraints (min/max variants, resolution range). |
VMAF targeting
VMAF (Video Multimethod Assessment Fusion) is a perceptual quality metric developed by Netflix. A VMAF score of 93+ is generally considered “excellent” quality with artifacts imperceptible to most viewers.
Content-aware encoding optimizes bitrates to achieve a target VMAF score. This means:
- Simple content (interview, slideshow, animation) → lower bitrate, same perceived quality
- Complex content (action movie, sports, concert) → higher bitrate to maintain quality
Default VMAF targets by quality tier
| Quality Tier | Default VMAF Target | Description |
|---|---|---|
economy | 88 | Good quality. Minor artifacts may be visible on close inspection. |
standard | 93 | Excellent quality. Artifacts imperceptible to most viewers. |
premium | 97 | Near-transparent quality. Visually lossless for most content. |
Override the default with vmaf_target:
{
"content_aware": {
"mode": "per_title",
"vmaf_target": 95
}
}Auto ABR
Auto ABR analyzes the source content and automatically builds an optimal ABR ladder. Instead of manually specifying each variant, you define constraints and let Transcodely determine the best configuration.
AutoABRConfig attributes
| Attribute | Type | Default | Description |
|---|---|---|---|
min_variants | integer | 2 | Minimum number of variants to generate (2—20). |
max_variants | integer | 8 | Maximum number of variants to generate (2—20). |
min_resolution | enum | 480p | Lowest resolution to include. One of: 480p, 720p, 1080p, 1440p, 2160p, 4320p. |
max_resolution | enum | Source resolution | Highest resolution to include. Capped at source resolution. One of: 480p, 720p, 1080p, 1440p, 2160p, 4320p. |
The auto ABR algorithm:
- Probes the source to extract metadata (resolution, frame rate, complexity)
- Analyzes content complexity (motion, texture, scene changes)
- Determines the optimal number of variants within your constraints
- Selects resolution and bitrate for each variant to meet the VMAF target
- Generates the ABR ladder
{
"type": "hls",
"video": [
{"codec": "h264", "quality": "standard"}
],
"content_aware": {
"mode": "auto_abr",
"vmaf_target": 93,
"auto_abr": {
"min_variants": 3,
"max_variants": 6,
"min_resolution": "480p",
"max_resolution": "2160p"
}
}
}When using
auto_abr, thevideoarray should contain a single variant that specifies the codec and quality tier. The auto ABR algorithm uses these as defaults for all generated variants.
Content analysis
When content-aware encoding is used, the job response includes a content_analysis object with details about the source content. This is available after probing completes.
| Attribute | Type | Description |
|---|---|---|
complexity_score | number | Overall visual complexity (0.0—1.0). Higher values indicate more complex content that is harder to compress. |
motion_score | number | Motion intensity (0.0—1.0). Higher values indicate more movement between frames (sports, action). |
texture_score | number | Texture detail level (0.0—1.0). Higher values indicate fine detail, grain, or complex textures. |
content_type | string | Detected content type (e.g., "film", "animation", "sports", "gaming", "talking_head"). |
Example content analysis response:
{
"content_analysis": {
"complexity_score": 0.72,
"motion_score": 0.85,
"texture_score": 0.45,
"content_type": "sports"
}
}Typical scores by content type
| Content Type | Complexity | Motion | Texture |
|---|---|---|---|
| Talking head / interview | 0.15—0.30 | 0.05—0.15 | 0.10—0.25 |
| Animation | 0.20—0.40 | 0.20—0.50 | 0.05—0.15 |
| Film / drama | 0.40—0.65 | 0.30—0.60 | 0.30—0.55 |
| Sports / action | 0.65—0.85 | 0.75—0.95 | 0.40—0.60 |
| Gaming | 0.50—0.75 | 0.60—0.85 | 0.55—0.80 |
| Concert / live event | 0.55—0.75 | 0.40—0.70 | 0.35—0.55 |
Examples
Per-title encoding with default VMAF
Use per-title mode with your existing ABR ladder. Transcodely adjusts the bitrate for each variant based on content complexity while preserving the quality tier’s default VMAF target.
{
"type": "hls",
"video": [
{"codec": "h264", "resolution": "1080p", "quality": "standard"},
{"codec": "h264", "resolution": "720p", "quality": "standard"},
{"codec": "h264", "resolution": "480p", "quality": "economy"}
],
"content_aware": {
"mode": "per_title"
}
}Per-title with custom VMAF target
Override the quality tier default and target a specific VMAF score across all variants.
{
"type": "dash",
"video": [
{"codec": "h265", "resolution": "2160p", "quality": "premium"},
{"codec": "h265", "resolution": "1080p", "quality": "standard"},
{"codec": "h265", "resolution": "720p", "quality": "standard"}
],
"content_aware": {
"mode": "per_title",
"vmaf_target": 95
}
}Auto ABR with constraints
Let Transcodely build the ABR ladder automatically. The algorithm determines the optimal number of variants and their resolutions within the constraints you provide.
{
"type": "adaptive",
"video": [
{"codec": "h264", "quality": "standard"}
],
"content_aware": {
"mode": "auto_abr",
"auto_abr": {
"min_variants": 3,
"max_variants": 8,
"min_resolution": "480p",
"max_resolution": "2160p"
}
}
}Auto ABR with AV1 and tight constraints
Combine AV1’s superior compression with auto ABR for maximum efficiency. Tighter variant constraints and a high VMAF target produce a compact, high-quality ladder.
{
"type": "hls",
"video": [
{"codec": "av1", "quality": "premium"}
],
"content_aware": {
"mode": "auto_abr",
"vmaf_target": 97,
"auto_abr": {
"min_variants": 4,
"max_variants": 6,
"min_resolution": "720p",
"max_resolution": "2160p"
}
}
}Validation rules
Transcodely validates content-aware configuration at job creation time. The following constraints are enforced:
| Rule | Description |
|---|---|
| Mode required | mode must be set to either per_title or auto_abr. |
| VMAF range | vmaf_target must be between 70 and 99 (inclusive) when specified. |
| Auto ABR config scope | auto_abr is only valid when mode is auto_abr. Setting it with per_title returns a validation error. |
| Variant count range | min_variants and max_variants must each be between 2 and 20. |
| Variant count order | min_variants must be less than or equal to max_variants. |
| Resolution order | min_resolution must be less than or equal to max_resolution. |
| Max resolution cap | max_resolution is capped at the source resolution. Requesting a higher resolution than the source does not upscale. |
| Auto ABR video array | When using auto_abr, the video array must contain exactly one variant (the codec/quality template). |