Mappages de flux

L'API Transcoder vous permet de concaténer des vidéos, mixer des pistes audio, et bien plus encore. La spécification JSON JobConfig est très flexible, ce qui peut créer une certaine ambiguïté entre les entrées et les sorties. Vous pouvez définir certains mappages de flux pour lever cette ambiguïté. Dans le cas contraire, l'API fournit pour vous des mappages de flux acceptables par défaut.

Cette page présente les mappages de flux par défaut fournis par l'API et quelques exemples de configuration avancés pour l'encodage des fichiers multimédias d'entrée.

Contexte

La liste des entrées (inputs) dans une configuration de tâche (JobConfig) spécifie les fichiers à télécharger, mais pas comment les utiliser. Chaque entrée est associée à une clé permettant de l'identifier.

L'élément editList définit une séquence de modifications sous la forme d'une chronologie pour le fichier de sortie (ou le fichier manifeste) d'une tâche de transcodage. L'élément inputs dans editList détermine les entrées à utiliser dans chaque élément Atom.

Pour en savoir plus, consultez la section Concepts de la présentation.

Mappage vidéo par défaut

Chaque élément Atom dans editList doit référencer au moins une entrée contenant une piste vidéo. Si plusieurs entrées sont définies pour un élément Atom et que chacune contient une piste vidéo, la première entrée de la liste inputs est utilisée comme source vidéo. Il s'agit du mappage par défaut. Si aucune des entrées ne contient de piste vidéo, la tâche échoue.

La configuration suivante concatène les cinq premières secondes de la piste vidéo input0.mp4 avec dix secondes de la piste vidéo input1.mov dans le fichier de sortie :

"inputs": [
  {
    "key": "input0",
    "uri": "gs://my-bucket/input0.mp4"
  },
  {
    "key": "input1",
    "uri": "gs://my-bucket/input1.mov"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["input0"],
    "endTimeOffset": "5s",
    "startTimeOffset": "0s"
  },
  {
    "key": "atom1",
    "inputs": ["input1"],
    "endTimeOffset": "20s",
    "startTimeOffset": "10s"
  }
]

Consultez la section Concaténer plusieurs vidéos d'entrée pour plus d'informations.

Mappages audio par défaut

Les mappages audio s'appliquent à diverses situations, notamment si le nombre d'entrées audio ne correspond pas au nombre de sorties audio.

Concaténer plusieurs entrées

Chaque élément Atom dans editList doit référencer au moins une entrée contenant une piste audio si un flux audio (audioStream) est défini. Si plusieurs entrées sont définies pour un élément Atom et que chacune contient une piste audio, la première entrée de la liste inputs est utilisée comme source audio. Il s'agit du mappage par défaut. Si aucune des entrées ne contient de piste audio, la tâche échoue.

L'API Transcoder ne génère un mappage par défaut que pour chaque audioStream défini si le mappage n'est pas spécifié explicitement par le client.

Prenons la configuration suivante qui contient un fichier audioStream défini :

"inputs": [
  {
    "key": "video_and_stereo_audio",
    "uri": "gs://my-bucket/video_and_stereo_audio.mp4"
  },
  {
    "key": "video_only",
    "uri": "gs://my-bucket/video_only.mov"
  },
  {
    "key": "stereo_audio_only",
    "uri": "gs://my-bucket/stereo_audio_only.mp3"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_stereo_audio"]
  },
  {
    "key": "atom1",
    "inputs": ["video_only", "stereo_audio_only"]
  }
],
"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2, // API default
      "channelLayout": ["fl", "fr"], // API default
      "sampleRateHertz": 48000
    }
  }
]

L'API Transcoder génère les mappages par défaut suivants pour la sortie audio. Notez que les champs audioStream ne sont pas appliqués à l'entrée video_only. Bien que cette entrée s'affiche en premier dans la liste inputs, elle ne contient pas de piste audio.

"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2,
      "channelLayout": ["fl", "fr"],
      "sampleRateHertz": 48000,
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 1,
          "outputChannel": 1,
          "gainDb": 0
        },
        {
          "atomKey": "atom1",
          "inputKey": "stereo_audio_only",
          "inputTrack": 0,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom1",
          "inputKey": "stereo_audio_only",
          "inputTrack": 0,
          "inputChannel": 1,
          "outputChannel": 1,
          "gainDb": 0
        }
      ]
    }
  }
]

Copie N à n

Si le nombre de canaux dans la piste audio d'entrée correspond au nombre de canaux dans le flux audio (audioStream) de sortie, l'API Transcoder copie les canaux d'entrée dans les canaux de sortie.

Examinons la configuration suivante qui contient une entrée avec un son stéréo à deux canaux et une valeur audioStream définie avec deux canaux :

"inputs": [
  {
    "key": "video_and_stereo_audio",
    "uri": "gs://my-bucket/video_and_stereo_audio.mp4"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_stereo_audio"]
  }
],
"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2, // API default
      "channelLayout": ["fl", "fr"], // API default
      "sampleRateHertz": 48000
    }
  }
]

L'API Transcoder génère les mappages par défaut suivants pour la sortie audio :

"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2,
      "channelLayout": ["fl", "fr"],
      "sampleRateHertz": 48000,
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 1,
          "outputChannel": 1,
          "gainDb": 0
        }
      ]
    }
  }
]

Mixage réducteur N à 1

Si le nombre de canaux dans la piste audio d'entrée est supérieur au nombre de canaux dans le flux audio (audioStream) de sortie, l'API Transcoder copie tous les canaux d'entrée dans un seul canal de sortie.

Si le flux audio (audioStream) définit plusieurs canaux de sortie, le canal de sortie unique est copié et utilisé pour chaque canal de sortie. Par exemple, si la piste audio d'entrée est composée de cinq canaux et que le flux audio (audioStream) définit deux canaux de sortie, ces deux canaux de sortie contiendront exactement le même contenu audio, soit un mixage réducteur des cinq canaux d'entrée.

Examinons la configuration suivante qui contient une entrée avec un son stéréo à deux canaux et une valeur audioStream définie avec un canal de sortie :

"inputs": [
  {
    "key": "video_and_stereo_audio",
    "uri": "gs://my-bucket/video_and_stereo_audio.mp4"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_stereo_audio"]
  }
],
"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 1,
      "channelLayout": ["fc"],
      "sampleRateHertz": 48000
    }
  }
]

L'API Transcoder génère les mappages par défaut suivants pour la sortie audio :

"elementaryStreams": [
  {
    "key": "output_mono_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 1,
      "channelLayout": ["fc"],
      "sampleRateHertz": 48000,
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 1,
          "outputChannel": 0,
          "gainDb": 0
        }
      ]
    }
  }
]

1 à N copies

Si le nombre de canaux dans la piste audio d'entrée est inférieur au nombre de canaux dans le flux audio (audioStream) de sortie, l'API Transcoder copie le premier canal d'entrée dans chaque canal de sortie.

Examinons la configuration suivante qui contient une entrée avec une piste audio mono à un canal et un audioStream défini avec deux canaux de sortie :

"inputs": [
  {
    "key": "video_and_mono_audio",
    "uri": "gs://my-bucket/video_and_mono_audio.mp4"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_mono_audio"]
  }
],
"elementaryStreams": [
  {
    "key": "output_mono_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2, // API default
      "channelLayout": ["fl", "fr"], // API default
      "sampleRateHertz": 48000
    }
  }
]

L'API Transcoder génère les mappages par défaut suivants pour la sortie audio :

"elementaryStreams": [
  {
    "key": "output_mono_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2,
      "channelLayout": ["fl", "fr"],
      "sampleRateHertz": 48000,
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "video_and_mono_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom0",
          "inputKey": "video_and_mono_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 1,
          "gainDb": 0
        }
      ]
    }
  }
]

Mappage de texte par défaut

Les mappages de texte sont généralement utilisés pour les sous-titres.

Chaque élément Atom dans editList doit référencer au moins une entrée contenant une piste de texte si un flux de texte (textStream) est défini. Si plusieurs entrées sont définies pour un élément Atom et que chacune contient une piste de texte, la première entrée de la liste inputs est utilisée comme source de texte. Il s'agit du mappage par défaut. Si aucune des entrées ne contient de piste de texte, la tâche échoue.

"inputs": [
  {
    "key": "video_and_audio",
    "uri": "gs://my-bucket/video_and_audio.mp4"
  },
  {
    "key": "sub",
    "uri": "gs://my-bucket/sub.srt"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_audio", "sub"]
  }
],
"elementaryStreams": [
  {
    "key": "output_sub",
    "textStream": {
      "codec": "webvtt"
    }
  }
]

L'API Transcoder génère les mappages par défaut suivants pour la sortie de texte :

"elementaryStreams": [
  {
    "key": "output_sub",
    "textStream": {
      "codec": "webvtt",
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "caption_input0",
          "inputTrack": 0
        }
      ]
    }
  }
]