Repository navigation
Encoding profiles
Profiles are configuration templates that tell Encore how to transcode your media files. Each profile defines one or more output files to generate from your input video, including different video qualities, audio formats, and thumbnails.
Profiles are typically stored in YAML or JSON format and loaded when needed.
For information on how to submit jobs that use these profiles, see the API and Job Submission guide. For details on configuring inputs, see the Input Configuration guide.
A profile consists of:
- name: Unique identifier for the profile
- description: Human-readable description of what this profile does
- encodes: List of encoders that produce outputs (video, audio, thumbnails)
- scaling: Scaling algorithm (default: "bicubic")
- deinterlaceFilter: Deinterlacing filter (default: "yadif")
- filterSettings: Advanced FFmpeg `filter configuration
- joinSegmentParams: Optional parameters for joining segments when using segmented encoding
Video encoders transform your input video into output files with specific codecs, resolutions, and quality settings. All video encoders support:
- Scaling: Resize to specific dimensions
- Aspect Ratio Control: Crop or pad to target aspect ratios
- Custom FFmpeg Filters: Apply additional video processing
- Audio Muxing: Include one or more audio tracks
- Debug Overlays: Overlay encoder name for testing
| Property | Description | Example Values |
|---|---|---|
width |
Target width in pixels (omit for auto) |
1920, 1280, null
|
height |
Target height in pixels (omit for auto) |
1080, 720, null
|
twoPass |
Enable two-pass encoding |
true, false
|
params |
FFmpeg parameters | {"b:v": "5000k"} |
filters |
Custom FFmpeg video filters | ["hqdn3d", "unsharp"] |
audioEncode |
Single audio track (deprecated) | See AudioEncode |
audioEncodes |
List of audio tracks to include | See AudioEncode |
suffix |
Output filename suffix |
"_1080p", "_4k"
|
format |
Container format |
"mp4", "mkv", "webm"
|
codec |
Video codec |
"libx264", "libx265"
|
inputLabel |
Which input to encode (default: "main") | "main" |
optional |
Skip instead of fail if input missing |
true, false
|
enabled |
Enable/disable this encoder |
true, false
|
cropTo |
Crop to aspect ratio before scaling |
"16:9", "4:3"
|
padTo |
Add letterboxing/pillarboxing to achieve aspect ratio |
"16:9", "21:9"
|
These FFmpeg parameters go in the params section and are commonly used across all video encoders:
| Parameter | Description | Example Values |
|---|---|---|
b:v |
Video bitrate |
"5000k", "15000k"
|
maxrate |
Maximum bitrate for VBV | "5350k" |
bufsize |
VBV buffer size | "10000k" |
crf |
Constant rate factor (quality) |
"23", "28"
|
r |
Output frame rate |
25, 30, "24000/1001"
|
fps_mode |
Frame rate mode |
"cfr" (constant) |
pix_fmt |
Pixel format |
"yuv420p", "yuv420p10le"
|
force_key_frames |
Keyframe placement expression | "expr:not(mod(n,96))" |
profile:v |
Codec profile |
"high", "main10"
|
level |
Codec level |
"4.0", "4.1"
|
preset |
Encoding speed/quality tradeoff |
"medium", "slow"
|
tag:v |
Video stream tag |
"hvc1" (for HEVC compatibility) |
movflags |
MOV/MP4 container flags | "faststart" |
g |
GOP size (keyframe interval) |
"96", "240"
|
Use X264Encode for encoding H.264/AVC video with the libx264 encoder.
{
"type": "X264Encode",
"width": 1920,
"height": 1080,
"twoPass": true,
"suffix": "_1080p",
"format": "mp4",
"params": {
"b:v": "5000k",
"maxrate": "5350k",
"bufsize": "10000k",
"r": 25,
"fps_mode": "cfr",
"pix_fmt": "yuv420p",
"force_key_frames": "expr:not(mod(n,96))",
"profile:v": "high",
"level": "4.1"
},
"x264-params": {
"deblock": "0,0",
"aq-mode": "1",
"bframes": "6",
"ref": "4",
"rc-lookahead": "60"
}
}Parameter Sections:
- params: Standard FFmpeg parameters including bitrate, frame rate, profile, level, preset, and pixel format
- x264-params: libx264-specific encoder options that get passed as colon-separated key=value pairs
Common x264-params Options:
| Parameter | Description | Example Values |
|---|---|---|
deblock |
Deblocking filter strength |
"0,0", "-1,-1"
|
aq-mode |
Adaptive quantization mode |
"1", "2"
|
aq-strength |
AQ strength | "1.0" |
bframes |
Max consecutive B-frames |
"6", "3"
|
b-adapt |
B-frame decision method | "2" |
ref |
Reference frames |
"4", "6"
|
rc-lookahead |
Lookahead buffer size |
"60", "40"
|
keyint |
Maximum GOP size | "192" |
keyint_min |
Minimum GOP size | "96" |
scenecut |
Scene change detection threshold | "40" |
me |
Motion estimation method |
"hex", "umh"
|
subme |
Subpixel motion estimation quality |
"9", "7"
|
cabac |
Enable CABAC entropy coding | "1" |
trellis |
Trellis quantization | "2" |
partitions |
Partitions to analyze | "all" |
direct |
Direct MV prediction mode | "auto" |
Use X265Encode for H.265/HEVC video encoded with the libx265 encoder.
{
"type": "X265Encode",
"width": 3840,
"height": 2160,
"twoPass": true,
"suffix": "_4k",
"format": "mp4",
"params": {
"b:v": "15000k",
"maxrate": "22500k",
"bufsize": "30000k",
"r": 25,
"pix_fmt": "yuv420p10le",
"profile:v": "main10",
"tag:v": "hvc1",
"force_key_frames": "expr:not(mod(n,96))"
},
"x265-params": {
"min-keyint": "96",
"keyint": "96",
"level-idc": "4.1",
"bframes": "6",
"ref": "4",
"aq-mode": "2",
"rd": "4"
}
}Parameter Sections:
- params: Standard FFmpeg parameters including bitrate, profile, pixel format, and tag
- x265-params: libx265-specific encoder options
Common x265-params Options:
| Parameter | Description | Example Values |
|---|---|---|
keyint |
Maximum GOP size | "96" |
min-keyint |
Minimum GOP size | "96" |
level-idc |
HEVC level |
"4.1", "5.1"
|
bframes |
Max consecutive B-frames |
"6", "4"
|
b-adapt |
B-frame decision method | "2" |
ref |
Reference frames | "4" |
rc-lookahead |
Lookahead buffer size |
"25", "60"
|
aq-mode |
Adaptive quantization mode | "2" |
rd |
RD level for mode decision | "4" |
me |
Motion estimation method |
"star", "hex"
|
subme |
Subpixel motion estimation | "3" |
ctu |
Max CTU size | "64" |
pmode |
Parallel mode decision | "1" |
sao |
Sample adaptive offset | "1" |
weightp |
Weighted prediction | "1" |
cutree |
CU tree optimization | "1" |
Use VideoEncode for any FFmpeg-supported codec not covered by X264 or X265.
{
"type": "VideoEncode",
"width": 1280,
"height": 720,
"twoPass": false,
"codec": "libvpx-vp9",
"suffix": "_720p_vp9",
"format": "webm",
"params": {
"b:v": "2500k",
"crf": "31",
"g": "240"
}
}Supported Codecs: Any codec supported by the FFmpeg executable used
When encoding video, filters are applied in this order:
-
Crop (if
cropTois set) - Crops to target aspect ratio -
Scale (if
width/heightare set) - Resizes video - Set SAR - Sets sample aspect ratio to 1:1
-
Pad (if
padTois set) - Adds letterboxing/pillarboxing -
Custom filters (from
filtersproperty) - Debug overlay (if enabled in job)
Full-featured audio encoder with channel layout conversion, audio mixing presets, and dialogue enhancement.
{
"type": "AudioEncode",
"codec": "aac",
"bitrate": "192k",
"samplerate": 48000,
"channelLayout": "5.1",
"suffix": "_aac_51",
"audioMixPreset": "default",
"dialogueEnhancement": {
"enabled": false
}
}Properties:
| Property | Default | Description |
|---|---|---|
codec |
"aac" | Audio codec to use |
bitrate |
(auto) | Audio bitrate (e.g., "192k", "128k") |
samplerate |
48000 | Sample rate in Hz |
channelLayout |
"stereo" | Target channel layout |
suffix |
Auto-generated | Output filename suffix |
params |
(empty) | Additional FFmpeg parameters |
filters |
(empty) | Custom audio filters |
audioMixPreset |
"default" | Audio mix preset to use |
dialogueEnhancement |
(disabled) | Dialogue enhancement settings |
optional |
false | Skip if input missing |
format |
"mp4" | Container format |
inputLabel |
"audio" | Which input to encode |
enabled |
true | Enable/disable encoder |
Audio Codec Notes:
The aac codec uses FFmpeg's native AAC encoder, which is available in standard FFmpeg builds. The libfdk_aac codec offers slightly better quality but requires a custom FFmpeg build with non-free libraries enabled (using --enable-libfdk-aac --enable-nonfree configure flags). For most use cases, the native aac encoder produces excellent results.
Supported Channel Layouts: See Channel layouts
Audio Mix Presets:
Audio mix presets define how to downmix or upmix between channel layouts. The preset name references a configuration that maps input layouts to output layouts with specific pan/mixing rules. For more info see Audiomix presets.
Simple audio encoder that preserves the input's channel layout without any remapping or processing.
{
"type": "SimpleAudioEncode",
"codec": "aac",
"bitrate": "128k",
"samplerate": 48000,
"suffix": "_aac",
"format": "mp4"
}Properties:
| Property | Default | Description |
|---|---|---|
codec |
"aac" | Audio codec |
bitrate |
(auto) | Audio bitrate |
samplerate |
(input rate) | Sample rate in Hz |
suffix |
Auto-generated | Output filename suffix |
params |
(empty) | Additional FFmpeg parameters |
optional |
false | Skip if input missing |
format |
"mp4" | Container format |
inputLabel |
"audio" | Which input to encode |
enabled |
true | Enable/disable encoder |
When to Use:
- You want to re-encode audio without changing channel layout
- No need for downmixing or upmixing
- Faster processing than AudioEncode
- Creating lossless audio outputs (e.g., FLAC)
Generates individual JPEG thumbnail images at specified points in the video.
{
"type": "ThumbnailEncode",
"percentages": [25, 50, 75],
"thumbnailWidth": -2,
"thumbnailHeight": 1080,
"quality": 5,
"suffix": "_thumb",
"suffixZeroPad": 2,
"decodeOutput": 0
}Properties:
| Property | Default | Description |
|---|---|---|
percentages |
[25, 50, 75] | Percentage points for thumbnail extraction |
thumbnailWidth |
-2 | Width in pixels (-2 = auto maintain aspect) |
thumbnailHeight |
1080 | Height in pixels |
quality |
5 | JPEG quality (1-31, lower = better quality) |
suffix |
"_thumb" | Output filename suffix |
suffixZeroPad |
2 | Zero padding for numbering (e.g., 01, 02) |
inputLabel |
"video" | Which input to use |
optional |
false | Skip if input missing |
enabled |
true | Enable/disable encoder |
intervalSeconds |
(none) | Generate at fixed intervals instead of percentages |
decodeOutput |
(none) | Index of decode output stream to use |
Thumbnail Selection Modes:
-
Percentage-based (default):
{ "percentages": [10, 25, 50, 75, 90] }Generates thumbnails at 10%, 25%, 50%, 75%, and 90% of video duration.
-
Interval-based:
{ "intervalSeconds": 10.0 }Generates a thumbnail every 10 seconds.
-
Single frame: Set via job parameter
thumbnailTimefor a specific timestamp.
The decodeOutput Parameter:
When a job produces multiple decoded video streams (such as when using segmented encoding or multiple inputs), the decodeOutput parameter specifies which stream index to use for thumbnail generation. A value of 0 selects the first decoded stream. This is useful when you want thumbnails from a specific quality level or input source.
Output Files:
- Named as:
{baseName}{suffix}{number}.jpg - Example:
myvideo_thumb01.jpg,myvideo_thumb02.jpg,myvideo_thumb03.jpg
Limitations:
- Not supported when using segmented encoding
Generates a single sprite sheet image containing multiple thumbnail tiles, ideal for video player scrubbing/preview interfaces.
{
"type": "ThumbnailMapEncode",
"tileWidth": 160,
"tileHeight": 90,
"cols": 12,
"rows": 20,
"quality": 5,
"suffix": "_thumbnail_map",
"format": "jpg",
"decodeOutput": 0
}Properties:
| Property | Default | Description |
|---|---|---|
tileWidth |
160 | Width of each tile in pixels |
tileHeight |
90 | Height of each tile in pixels |
cols |
12 | Number of columns in the grid |
rows |
20 | Number of rows in the grid |
quality |
5 | JPEG quality (1-31, lower = better quality) |
optional |
true | Skip if input missing |
enabled |
true | Enable/disable encoder |
suffix |
Auto-generated | Output filename suffix |
format |
"jpg" | Output format |
inputLabel |
"video" | Which input to use |
decodeOutput |
(none) | Index of decode output stream to use |
How It Works:
- Calculates interval:
video_duration / (cols x rows) - Extracts frames at each interval point
- Scales and pads each frame to tile dimensions
- Arranges all tiles into a single grid image
Output:
- Single image file:
{baseName}{suffix}.{format} - Total thumbnails:
cols x rows(e.g., 12x20 = 240 thumbnails) - Final image dimensions:
tileWidth x colsbytileHeight x rows
Common Use Case:
Video players can load one sprite sheet and display hover previews by calculating tile position:
col = floor(currentTime / interval) % cols
row = floor(currentTime / interval / cols)
Then display the region at (col * tileWidth, row * tileHeight) with size (tileWidth, tileHeight).
Limitations:
- Not supported when using segmented encoding
Advanced users can customize FFmpeg filters inserted by encore, mainly useful for using hardware accelerated filters when doing hardware encoding. See also Hardware accelration guide.
{
"filterSettings": {
"splitFilter": "split",
"scaleFilter": "scale_cuda",
"scaleFilterParams": {
"force_original_aspect_ratio": "decrease",
"force_divisible_by": "2"
},
"cropFilter": "crop",
"padFilter": "pad_cuda"
}
}Here's a comprehensive profile that generates multiple outputs:
{
"name": "multiformat-hd",
"description": "Multi-format HD transcoding with audio variants and thumbnails",
"scaling": "lanczos",
"deinterlaceFilter": "yadif",
"encodes": [
{
"type": "X264Encode",
"width": 1920,
"height": 1080,
"twoPass": true,
"suffix": "_1080p",
"format": "mp4",
"params": {
"b:v": "5000k",
"maxrate": "5350k",
"bufsize": "10000k",
"r": 25,
"fps_mode": "cfr",
"pix_fmt": "yuv420p",
"force_key_frames": "expr:not(mod(n,96))",
"profile:v": "high",
"level": "4.1"
},
"x264-params": {
"deblock": "0,0",
"aq-mode": "1",
"bframes": "6",
"ref": "4"
},
"audioEncodes": [
{
"type": "AudioEncode",
"codec": "aac",
"bitrate": "192k",
"channelLayout": "5.1",
"suffix": "_aac_51"
},
{
"type": "AudioEncode",
"codec": "aac",
"bitrate": "128k",
"channelLayout": "stereo",
"suffix": "_aac_stereo"
}
]
},
{
"type": "X264Encode",
"width": 1280,
"height": 720,
"twoPass": true,
"suffix": "_720p",
"format": "mp4",
"params": {
"b:v": "2800k",
"r": 25,
"fps_mode": "cfr",
"pix_fmt": "yuv420p",
"profile:v": "main",
"level": "3.1",
"crf": "23"
},
"audioEncode": {
"type": "AudioEncode",
"codec": "aac",
"bitrate": "128k",
"channelLayout": "stereo"
}
},
{
"type": "SimpleAudioEncode",
"codec": "flac",
"suffix": "_audio_lossless",
"format": "flac"
},
{
"type": "ThumbnailEncode",
"percentages": [10, 25, 50, 75, 90],
"thumbnailHeight": 720,
"quality": 3,
"decodeOutput": 0
},
{
"type": "ThumbnailMapEncode",
"tileWidth": 160,
"tileHeight": 90,
"cols": 10,
"rows": 10,
"decodeOutput": 0
}
]
}This profile generates:
- 1080p H.264 video with both 5.1 surround and stereo audio tracks
- 720p H.264 video with stereo audio
- FLAC lossless audio file (preserves original channels)
- 5 thumbnail images at 10%, 25%, 50%, 75%, and 90%
- Thumbnail sprite sheet with 100 tiles (10x10 grid)
Encore can automatically handle portrait videos by swapping width/height dimensions. When enabled in the encoding configuration, portrait videos (aspect ratio < 1.0) will have their width and height swapped to match the profile's landscape dimensions.
This respects video rotation metadata and ensures portrait videos are properly scaled.
Control output aspect ratio with crop and pad operations:
Crop to aspect ratio:
{
"cropTo": "16:9"
}Crops the input to 16:9 before scaling. Useful for removing pillarboxing or letterboxing from source.
Pad to aspect ratio:
{
"padTo": "16:9"
}Adds letterboxing or pillarboxing after scaling to achieve exactly 16:9. Useful for ensuring consistent aspect ratios.
Processing order: Input -> Crop -> Scale -> Pad -> Output
Example - Converting 4:3 to 16:9:
{
"width": 1920,
"height": 1080,
"padTo": "16:9"
}Scales the 4:3 video and adds pillarboxing to create 16:9 output.
Mark outputs as optional to prevent job failure when inputs are missing:
{
"type": "ThumbnailEncode",
"optional": true,
"percentages": [25, 50, 75]
}If the video input is missing, Encore will skip this encoder and continue with other outputs rather than failing the entire job.
Enable or disable outputs at runtime:
{
"type": "X265Encode",
"enabled": false,
"width": 3840,
"height": 2160
}Useful for:
- A/B testing encoding settings
- Environment-specific outputs (production vs testing)
- Temporarily disabling expensive encodes
- Configuration-based output selection
{
"name": "streaming-abr",
"description": "Adaptive bitrate ladder for HLS/DASH streaming",
"encodes": [
{
"type": "X264Encode",
"width": 1920,
"height": 1080,
"twoPass": true,
"suffix": "_1080p",
"format": "mp4",
"params": {
"b:v": "5000k",
"maxrate": "5350k",
"bufsize": "10000k",
"r": 25,
"fps_mode": "cfr",
"pix_fmt": "yuv420p",
"profile:v": "high",
"level": "4.1"
}
},
{
"type": "X264Encode",
"width": 1280,
"height": 720,
"twoPass": true,
"suffix": "_720p",
"format": "mp4",
"params": {
"b:v": "2800k",
"maxrate": "3000k",
"bufsize": "5600k",
"profile:v": "main",
"level": "3.1"
}
},
{
"type": "X264Encode",
"width": 854,
"height": 480,
"twoPass": true,
"suffix": "_480p",
"format": "mp4",
"params": {
"b:v": "1400k",
"maxrate": "1500k",
"bufsize": "2800k",
"profile:v": "main",
"level": "3.1"
}
}
]
}{
"name": "archive-mezzanine",
"description": "High-quality archival format",
"encodes": [
{
"type": "VideoEncode",
"codec": "prores_ks",
"format": "mov",
"suffix": "_prores",
"params": {
"profile:v": "3",
"vendor": "apl0"
},
"audioEncode": {
"type": "SimpleAudioEncode",
"codec": "pcm_s24le"
}
}
]
}{
"name": "social-media",
"description": "Optimized for social media platforms",
"encodes": [
{
"type": "X264Encode",
"width": 1280,
"height": 720,
"twoPass": false,
"suffix": "_social",
"format": "mp4",
"padTo": "16:9",
"params": {
"crf": "23",
"preset": "fast",
"movflags": "faststart"
},
"audioEncode": {
"type": "AudioEncode",
"codec": "aac",
"bitrate": "128k",
"channelLayout": "stereo"
}
}
]
}This example uses NVIDIA GPU acceleration for HEVC encoding. It requires CUDA hardware decoding to be specified on the input.
name: nvenc-hevc
description: HEVC NVENC encoding with hardware scaling
scaling: bicubic
filterSettings:
scaleFilter: scale_cuda
scaleFilterParams:
format: p010le
encodes:
- type: VideoEncode
codec: hevc_nvenc
format: mp4
suffix: _hevc_1080p
twoPass: false
height: 1080
params:
b:v: 4500k
maxrate: 6750k
bufsize: 9000k
r: 25
profile:v: main10
tag:v: hvc1
force_key_frames: expr:not(mod(n,96))
audioEncode:
type: AudioEncode
codec: aac
bitrate: 192k
suffix: _STEREOTo use this profile, configure the input with hardware decoding:
{
"params": {
"hwaccel": "cuda",
"hwaccel_output_format": "cuda"
}
}Copy the video stream without re-encoding, useful for remuxing:
name: video-copy
description: Copy video stream without re-encoding
scaling: bicubic
encodes:
- type: VideoEncode
suffix: _copy
codec: copy
format: mxf
params: {}For advanced users, Encore supports dynamic profile parameterization using Spring Expression Language (SpEL). This allows you to create flexible, reusable profiles that can be customized with parameters passed at job submission time.
See Profile Parameterization Guide for detailed information on using SpEL expressions in profiles.