{
  "id": "osc-stack-dialogue-enhancement",
  "job": "Add a clearer-dialogue stereo track to every file you transcode with one SVT Encore audio setting on Open Source Cloud: Encore plus S3-compatible MinIO storage, submitted over HTTP.",
  "aliases": [
    "clearer dialogue in video",
    "dialogue enhancement for video files",
    "duck background music under speech",
    "encore dialogueEnhancement",
    "ffmpeg dialoguenhance sidechaincompress"
  ],
  "distinctFrom": [
    {
      "id": "osc-stack-live-audio-mixing",
      "descriptorUrl": "https://www.osaas.io/stacks/live-audio-mixing.json",
      "why": "That recipe mixes live audio sources. This one processes the audio of a file during a transcode."
    },
    {
      "id": "osc-stack-video-thumbnails-sprite-sheet",
      "descriptorUrl": "https://www.osaas.io/stacks/video-thumbnails-sprite-sheet.json",
      "why": "Same Encore and MinIO chain, but that recipe produces images. This one produces audio tracks."
    }
  ],
  "inputs": [
    {
      "protocol": "https",
      "source": "a video or audio file URL that the Encore instance can reach, with stereo audio or surround audio that has a centre channel"
    }
  ],
  "outputs": [
    {
      "protocol": "s3",
      "consumer": "an MP4 with an AAC stereo track where the background is turned down while someone speaks (suffix _STEREO_DE), and with the profile on the page a plain stereo track (suffix _STEREO), in your bucket"
    }
  ],
  "recommendedPath": {
    "chain": [
      {
        "step": 1,
        "serviceId": "minio-minio",
        "role": "S3-compatible storage for the output",
        "note": "Set the root user and password at creation."
      },
      {
        "step": 2,
        "action": "publish profiles.yml (index) and dialogue.yml at an HTTPS URL the Encore instance can read",
        "role": "Encore loads profiles from profilesUrl; paths in the index are relative to it"
      },
      {
        "step": 3,
        "serviceId": "encore",
        "role": "runs the encode",
        "requiredConfig": ["name"],
        "configUsed": [
          "profilesUrl",
          "s3Endpoint",
          "s3AccessKeyId",
          "s3SecretAccessKey"
        ],
        "requiresCredential": true,
        "note": "supportsUpdate is false, so set the config right at creation."
      },
      {
        "step": 4,
        "action": "POST /encoreJobs on the instance with profile dialogue, baseName, outputFolder and inputs",
        "role": "submits the job"
      },
      {
        "step": 5,
        "action": "GET /encoreJobs/{id} until SUCCESSFUL, then read output[]",
        "role": "confirm both the _STEREO_DE and the _STEREO file are listed"
      }
    ],
    "measuredWallClockSeconds": 2,
    "wallClockMeasured": true,
    "gapNote": "About 2 seconds is one audio-only Encore job on the first 60 seconds of one stereo clip (job 14daeb6b-c2e5-4459-98a7-b441671a008a, 2026-11-08), not the time to set up the two instances."
  },
  "configSurface": {
    "servicesInChain": 2,
    "sensitiveFields": ["s3AccessKeyId", "s3SecretAccessKey"],
    "note": "The catalog does not state the Encore build (upstreamVersion null). The running image reported v0.2.8-3 in its startup log on 2026-11-08."
  },
  "setup": {
    "codeRequired": false,
    "knownDeployGotcha": "Set codec: aac on every AudioEncode entry. Without it the Encore image OSC ran on 2026-11-08 (v0.2.8-3) uses libfdk_aac, its FFmpeg lacks that encoder, and the job fails with Unknown encoder 'libfdk_aac' (job 4fe8738d-a90a-4220-90e8-b81a7f4b4623). Mono input fails dialogue enhancement unless the entry is optional."
  },
  "cost": {
    "quoted": false,
    "note": "No rate is quoted on this page. Current rates: https://www.osaas.io/pricing"
  },
  "exitPath": {
    "software": "SVT Encore (https://github.com/svt/encore, EUPL-1.2) is a public repository that runs wherever its container runs; dialoguenhance and sidechaincompress are standard FFmpeg filters",
    "data": "the output is plain MP4 files with AAC audio in S3-compatible storage"
  },
  "notVerified": [
    "that speech is easier to follow in the output: nobody listened to it",
    "that the test clip has speech over music",
    "the agent prompt on the page, run as written",
    "the profile exactly as shown on the page: the test profile also carried type: native, which the v0.2.8 profile model does not define",
    "a surround input with a centre channel",
    "a job writing to AWS S3 instead of MinIO"
  ],
  "servicesVerifiedLive": {
    "date": "2026-11-10",
    "method": "Test jobs on OSC 2026-11-08 read back from GET /encoreJobs/{id} with the FFmpeg command in the job log (osc-orchestrator encore-week48-test-2026-11-08); AudioEncode.dialogueEnhancement fields and defaults read in svt/encore at tag v0.2.8 (AudioEncode.kt) and in docs/transcoding-profiles.md on master."
  },
  "gateCheck": {
    "gatedServiceId": "eyevinn-just-go-live",
    "usesGatedService": false,
    "note": "This stack does not name or link eyevinn-just-go-live; the P3 gate does not bind it."
  },
  "verifiedOn": "2026-11-10",
  "publishedAt": "https://www.osaas.io/use-cases/dialogue-enhancement"
}
