Per-Title Encoding Overview
Comparing Standard vs Per-Title Encoding Bitrate Ladders
A regular encoding simply follows the rules you define in its codec-, stream-, and muxing configurations. A Per-Title Encoding in comparison not only uses the given configuration but evaluates the asset itself. Based on that evaluation data, the Per-Title algorithm adjusts the parameters width, height, and bitrate. The algorithm optimizes the bitrate ladder to increase quality while reducing the required bandwidth to deliver it. The below graphic compares the so-called Convex Hull (basically an envelope of the regions where certain resolution/bitrate combinations work best) of a standard (non-dynamic) and the Per-Title bitrate ladder.

Fig.1 - Comparison between Per-Title and Standard Profile in terms of Quality and Bitrate
As you can see, the Per-Title Profile is able to achieve a much better quality by using lower bitrates in the human perceptual range (roughly between 35dB and 45dB). Furthermore, it removes the resolution/bitrate tuples above 45dB, which do not lead to a visual quality improvement anymore.
Try it yourself!
If you don't have an Bitmovin Account yet, simply sign up for a trial and use our Per-Title Benchmark Tool for free as part of the trial of your account. The tool will compare an encoding processed with your static ladder against the one derived automatically by the Per-Title algorithm.
Create a Per-Title Encoding
The most simple use-case is when the Per-Title algorithm decides to achieve the best possible outcome with regards to bandwidth savings and quality improvements.
Instead of adding multiple Stream
s to an Encoding
resource, you add just one Stream
with mode set to PER_TITLE_TEMPLATE
and using a plain Video Codec Configuration
. This Stream
, its Codec Configuration, as well as all Muxings that are using it, will be taken as a template
by the Per-Title algorithm to create a "Per-Title profile". The Per-Title algorithm will then add additional Stream
s to this "Per-Title profile" based on the PER_TITLE_TEMPLATE
Stream
. These additional Stream
s will be of the mode PER_TITLE_RESULT
.
metadata:
type: VOD
name: Simple Per-Title example
# use a plain video codec configuration
configurations:
video:
h264:
per-title:
properties:
name: Basic Per-Title h264 config
profile: MAIN
encodings:
main-encoding:
properties:
name: Simple Per-Title example
# define a PER_TITLE_TEMPLATE Stream used to create a "Per-Title profile"
streams:
per-title:
properties:
name: Per-Title template stream
inputStreams:
- inputId: "{{your input id}}"
inputPath: "{{your input path}}"
codecConfigId: $/configurations/video/h264/per-title
mode: PER_TITLE_TEMPLATE
# use the PER_TITLE_TEMPLATE Stream for a muxing
muxings:
fmp4:
per-title:
properties:
name: Per-Title muxing
segmentLength: 4
streamConditionsMode: DROP_MUXING
streams:
- streamId: $/encodings/main-encoding/streams/per-title
outputs:
- outputId: "{{outputId}}"
# outputPath can contain these placeholders:
# {uuid}, {bitrate}, {width}, {height}
outputPath: "per-title/{width}_{bitrate}_{uuid}/"
acl:
- permission: PRIVATE
# make sure to enable Per-Title and autoRepresentations for your codec
start:
properties:
perTitle:
h264Configuration:
autoRepresentations: {}
We also offer SDK examples using Per-Title Encoding.
Per-Title Configuration
The fully automated, default Per-Title algorithm works well for most use cases. However, you may need to customize it in certain situations.
Common Customization Scenarios
You should consider customizing the Per-Title algorithm when you need to:
- Control the bitrate selection range
- Adjust the step size between each representation
- Meet specific technical requirements that the default settings don't address
How to Customize
You can customize the per title algorithm configuration for each codec you're using. This gives you fine-grained control over how the algorithm behaves for your specific needs.
Frequently Asked Questions for Per-Title
Our template based approach enables great flexibility and helps you cover your use-case best, e.g.: satisfy DRM requirements, target dedicated playout platforms, and many more. Besides the required minimal and maximal resolution (you don’t really need/want a 4k resolution if you target an audience mainly using mobiles) other boundaries in context of bitrate and frame-rate, as well as encoding parameters can be specified as well.
Specifying Required Resolutions for Per-Title Encoding
Add PER_TITLE_TEMPLATE
Stream
s for every possible resolution that you want to support. The codec configuration needs to contain at least the height, or the width in that case. If only one of the both resolutions is specified the aspect ratio will be kept.
Add one or more muxings to the PER_TITLE_TEMPLATE
Stream
, e.g., MP4 muxing if you want to have single progressive MP4 files as output, or segmented fMP4 muxing for DASH/HLS. Also define an output path with the supported placeholders to make it unique: {uuid}
, {bitrate}
, {width}
, {height}
. We always encourage to make {uuid}
part of the output path to ensure it will be unique: e.g., /video/{bitrate}_{uuid}
.
In the start call of the encoding you can find a Per-Title configuration object and inside this object a configuration per codec, e.g., h264Configuration. You do not need to configure anything specific here if you want the default values to apply. That’s it! Start your encoding in this configuration and the Per-Title algorithm will generate an optimal bitrate ladder using the resolutions you have defined for your asset. Please note that the algorithm might decide to not use a specific resolution if it does not make sense for a specific asset.
Supported Output Formats
Per-Title encodings work with GCS, S3, Generic S3, Akamai NetStorage or Azure Blob output.
You can check our release notes to see the latest updates.
Using Per-Title Encodings with DRM Solutions
The DRM use-case works in exact the same way as with a normal encoding.
You just need to add the DRM configuration to the Muxing of the PER_TITLE_TEMPLATE
Stream
s in the same way as you would do it for a normal encoding configuration. One thing to watch out for is, when using different encryption keys for SD, HD and UHD content. There are two things to consider:
- If you use the
autoRepresentations
feature, make sure to have onePER_TITLE_TEMPLATE
Stream
with a configured resolution close to each category where you want to use a different encryption key: e.g., for SD use a width of 640. - Make sure to add the DRM configuration with the encryption key you want to use for that category. If you are not using
autoRepresentations
, just configure the DRM configuration on everyPER_TITLE_TEMPLATE
Stream
with the encryption key you want to use for that representation.
Using Per-Title Encoding with Server-Side Ad Insertion (SSAI)
SSAI providers are usually encoding the ads to a predefined set of resolutions and bitrates which is quite static. Changes in resolution are problematic, changes in bitrate not so much. That is why you can just configure the Per-Title encoding to restrict the possible resolutions to a set that is provided by the SSAI provider. The configuration works in the same way as configuring required resolutions for your Per-Title encoding.
Updated 1 day ago