Skip to content
All use cases
Media & Streaming

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.

FileTrackDetails
VINN_STEREO_DE.mp4Enhanced track60 s, AAC, 2 channels, 48 kHz
VINN_STEREO.mp4Plain track, same settings without enhancement60 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. 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. 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. 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. 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. 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: _STEREO

The 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.