# Several languages

> One video with several dubbed tracks, per-language files, and mixed engines.

## One video, every language

The original audio plus Spanish and German dubs, as three selectable tracks of one MP4. Each
language uses a different translation engine and voice provider, to show they mix freely:

```json JSON
{
"name": "Documentary — es, de",
"config": {
  "sourceMedia": { "@type": "S3FolderSource" },
  "transcription": { "@type": "Speechmatics", "language": "en" },
  "translations": [
    {
      "language": "es",
      "engine": { "@type": "Google" },
      "ttsOptions": { "provider": { "@type": "Google", "voice": "es-ES-Standard-A" } }
    },
    {
      "language": "de",
      "engine": { "@type": "Gemini" },
      "ttsOptions": { "provider": { "@type": "Amazon", "voice": "Vicki", "engine": "NEURAL" } }
    }
  ],
  "outputs": [
    {
      "@type": "S3FolderOutput",
      "items": [
        {
          "@type": "VideoFile",
          "ext": "mp4",
          "nameTemplate": "${name}.multi.${ext}",
          "useOriginalTracks": true,
          "dubTracks": [
            { "language": "es", "title": "Español" },
            { "language": "de", "title": "Deutsch" }
          ]
        }
      ]
    }
  ]
}
}
```

```yaml YAML
name: Documentary — es, de
config:
sourceMedia: { '@type': S3FolderSource }
transcription: { '@type': Speechmatics, language: en }
translations:
  - language: es
    engine: { '@type': Google }
    ttsOptions:
      provider: { '@type': Google, voice: es-ES-Standard-A }
  - language: de
    engine: { '@type': Gemini }
    ttsOptions:
      provider: { '@type': Amazon, voice: Vicki, engine: NEURAL }
outputs:
  - '@type': S3FolderOutput
    items:
      - '@type': VideoFile
        ext: mp4
        nameTemplate: '${name}.multi.${ext}'
        useOriginalTracks: true
        dubTracks:
          - { language: es, title: Español }
          - { language: de, title: Deutsch }
```

`documentary.mp4` gives `documentary.multi.mp4` with the original audio first, under the input's
own language tag, then tracks tagged `spa` and `deu`. A player opens it on the original audio.

## One file per language

For platforms that take one audio language per file, write a video for each:

```json
{
  "name": "Newsmax — es, uk",
  "config": {
    "sourceMedia": { "@type": "S3FolderSource" },
    "transcription": { "@type": "Speechmatics", "language": "en" },
    "translations": [
      { "language": "es", "engine": { "@type": "Gemini" }, "ttsOptions": { "provider": { "@type": "Deepdub", "voice": "auto" } } },
      { "language": "uk", "engine": { "@type": "Gemini" }, "ttsOptions": { "provider": { "@type": "Deepdub", "voice": "auto" } } }
    ],
    "outputs": [
      {
        "@type": "S3FolderOutput",
        "items": [
          {
            "@type": "VideoFile", "ext": "mp4", "nameTemplate": "${name}.es.${ext}",
            "dubTracks": [{ "language": "es" }]
          },
          {
            "@type": "VideoFile", "ext": "mp4", "nameTemplate": "${name}.uk.${ext}",
            "dubTracks": [{ "language": "uk" }]
          }
        ]
      }
    ]
  }
}
```

Each input then has two outputs, `…es.mp4` and `…uk.mp4`, and both are listed under the input in
`GET /projects/{id}/files`.

## Dub some languages, subtitle others

A translation without `ttsOptions` is not dubbed; use it in subtitle outputs. Here Spanish is
dubbed and French is only subtitled:

```json
"translations": [
  { "language": "es", "engine": { "@type": "Gemini" }, "ttsOptions": { "provider": { "@type": "Deepdub", "voice": "auto" } } },
  { "language": "fr", "engine": { "@type": "DeepL" } }
],
"outputs": [
  {
    "@type": "S3FolderOutput",
    "items": [
      {
        "@type": "VideoFile", "ext": "mp4", "nameTemplate": "${name}.es.${ext}",
        "useOriginalTracks": true, "dubTracks": [{ "language": "es" }]
      },
      { "@type": "SubtitleFile", "format": "VTT", "language": "fr" }
    ]
  }
]
```

A dub track in `fr` would be refused: French has no dub.
