Clearer dialogue for every video in your library
Add one setting to an SVT Encore audio profile and every file you transcode gets an extra stereo track for clearer dialogue. According to the SVT Encore documentation, the setting finds the speech and turns the background down while someone talks. You run Encore and S3-compatible storage as two catalog services on Open Source Cloud and submit the job over HTTP.
Updated
What the setting does
This is how the SVT Encore documentation and source code describe dialogueEnhancement on an AudioEncode entry. It describes Encore; it is not a result we measured.
- For a stereo input, the FFmpeg dialoguenhance filter builds a centre channel from the left and right channels.
- The centre channel then drives the FFmpeg sidechaincompress filter on the other channels, so the background dips while someone is speaking and comes back when they stop.
- A surround input that already has a centre channel skips the first step and goes straight to the ducking.
- Mono input and surround layouts without a centre channel are not supported. The encode fails, or is skipped if you set optional: true.
- The result is mixed down to the channel layout you ask for, stereo by default.
What our test on OSC showed
We ran the recipe below on OSC on 2026-11-08, on the first 60 seconds of a public stereo test clip, with one enhanced track and one plain track for comparison.
| File | Track | Details |
|---|---|---|
VINN_STEREO_DE.mp4 | Enhanced track | 60 s, AAC, 2 channels, 48 kHz |
VINN_STEREO.mp4 | Plain track, same settings without enhancement | 60 s, AAC, 2 channels, 48 kHz |
The job succeeded in about two seconds, and the FFmpeg command in the job log contains dialoguenhance and sidechaincompress, so the filters ran. On average the enhanced track came out about 3 dB louder than the plain one.
The test does not show that speech is easier to follow. Nobody listened to the two tracks, and we did not check that the clip has speech over music. Listen to your own material at matched volume before you switch a library over.
Set codec: aac on OSC
Without it the job fails. The Encore image OSC ran on 2026-11-08 (v0.2.8-3) picks the libfdk_aac encoder when no codec is set, and its FFmpeg does not include that encoder, so the job stopped with Unknown encoder 'libfdk_aac'. The same profile with codec: aac on each AudioEncode entry succeeded. The current Encore documentation gives aac as the default, so a profile copied from it can still fail on OSC.
How to add a clearer-dialogue track with Encore
Five steps, from the OSC web console or from your own code.
- 1
Create storage
Create a MinIO instance and a bucket for the output. Set the root user and password yourself when you create it.
- 2
Publish your profiles
Put the two YAML files below at an HTTPS address the Encore instance can read, for example a public Git repository. Paths in the index file are relative to the index.
- 3
Create an Encore instance
Create an instance of the encore service. Set profilesUrl to your index file, s3Endpoint to the MinIO instance, and s3AccessKeyId and s3SecretAccessKey to its credentials. The service does not support changing these later, so set them at creation.
- 4
Submit the job
Send the request below to your instance with profile set to dialogue and an OSC service access token as the bearer token.
- 5
Read the result
Poll GET /encoreJobs/{id} until the status is SUCCESSFUL, then check that the output array lists both the _STEREO_DE file and the _STEREO file.
The profile files
The first entry writes the enhanced track and the second writes a plain track, so you can compare them. Keep both if your player lets viewers choose an audio track.
profiles.yml (the index)
dialogue: dialogue.yml
dialogue.yml
name: dialogue
description: Clearer-dialogue stereo track plus a plain stereo track
encodes:
- type: AudioEncode
codec: aac
bitrate: 128k
suffix: _STEREO_DE
dialogueEnhancement:
enabled: true
- type: AudioEncode
codec: aac
bitrate: 128k
suffix: _STEREOThe request
Replace the instance address, the bucket and the input. Encore must be able to reach the input over HTTP or HTTPS.
POST https://<your-encore-instance>/encoreJobs
Authorization: Bearer <service access token>
Content-Type: application/json
{
"profile": "dialogue",
"baseName": "myvideo",
"outputFolder": "s3://<bucket>/dialogue/",
"inputs": [
{
"type": "AudioVideo",
"uri": "https://<your-host>/myvideo.mp4"
}
]
}Settings you can change
Set these under dialogueEnhancement. The defaults are from the SVT Encore documentation and match the command in our test job.
- dialogueEnhanceStereo.enhance sets the dialogue boost, from 0 to 3. Default 1.
- dialogueEnhanceStereo.voice sets the voice-detection strength, from 2 to 32. Default 2.
- dialogueEnhanceStereo.original sets how much of the centre to keep in front, from 0 to 1. Default 1.
- sidechainCompress.threshold is the centre level at which ducking starts (default 0.012), and sidechainCompress.ratio is how hard the background is turned down (default 8).
- sidechainCompress.attack and sidechainCompress.release set how fast the background drops and comes back, in milliseconds. Defaults 100 and 1000.
What it does not do
- It does not write subtitles. Automatic subtitles are a separate use case, linked below.
- It does not touch live audio. This setting processes audio in a file transcode; mixing live audio is the live audio mixing use case.
- It does not repair a poor mix at the source, and we have not tested it on your material.
Let your AI agent set it up
Publish the two profile files first, then connect your AI agent to the OSC MCP server and give it the prompt below.
Prompt
Create a MinIO instance called dialoguestore with a generated root user and a strong generated password, and a bucket called media. Create an Encore instance called dialogueencore with profilesUrl set to the URL of my profiles.yml, using dialoguestore as the S3 endpoint with its credentials. Submit an Encore job with profile dialogue, baseName myvideo, my video URL as the input and s3://media/dialogue/ as the output folder. Poll until the job is done and list the files in output.
Our test created the instances with the OSC MCP tools and posted the job to the instance API, but we did not run this exact prompt.
Machine-readable recipe (JSON)Open source, standard files
SVT Encore is public on GitHub under EUPL-1.2, MinIO speaks the S3 API, and dialoguenhance and sidechaincompress are standard FFmpeg filters. The output is plain MP4 with AAC audio, so you can move the files and the profiles anywhere Encore runs.
Related
Frequently asked questions
What is dialogue enhancement?
Audio processing that makes speech stand out from music and effects. In SVT Encore it turns the background down while someone speaks, using standard FFmpeg filters.
Does it work on mono audio?
No. Encore needs stereo, or surround with a centre channel. On mono input the encode fails, or is skipped if optional is true.
Why did my job fail with Unknown encoder 'libfdk_aac'?
Set codec: aac on each AudioEncode entry. The Encore image on OSC picks libfdk_aac when no codec is set, and that encoder is not in its FFmpeg.
Does it replace the original audio?
Only if you want it to. Each AudioEncode entry writes its own file, so you can keep the plain track next to the enhanced one.
What does it cost?
Current rates are on osaas.io/pricing. This guide does not quote one.
Add a clearer-dialogue track
Sign up for Open Source Cloud, then create a MinIO and an Encore instance.