Streamzuordnungen

Mit der Transcoder API können Sie Videos verketten, Audiotracks mischen und mehr. Die JSON-Spezifikation JobConfig ist sehr flexibel. Dies kann zu Mehrdeutigkeit zwischen Ein- und Ausgaben führen. Sie können bestimmte Streamzuordnungen definieren, um diese Mehrdeutigkeit zu beseitigen. Wenn Sie das nicht tun, stellt die API angemessene Standard-Streamzuordnungen bereit.

Auf dieser Seite werden die Standardstreamzuordnungen der API angezeigt sowie einige erweiterte Konfigurationsbeispiele für die Codierung von Eingabemediendateien.

Hintergrund

Die inputs-Liste in einer JobConfig gibt an, welche Dateien heruntergeladen werden, nicht wie sie verwendet werden sollen. Jede Eingabe wird mit einem Schlüssel identifiziert, um sie zu identifizieren.

Mit editList wird eine Folge von Änderungen als Zeitachse für die Ausgabedatei (oder das Manifest) aus einem Transcodierungsjob definiert. Die inputs in der editList legen fest, welche Eingaben in jedem Atom verwendet werden.

Weitere Informationen finden Sie in der Übersicht im Abschnitt Konzepte.

Standard-Videozuordnung

Jedes Atom in der editList muss auf mindestens eine Eingabe verweisen, die einen Videotrack enthält. Wenn für ein Atom mehrere Eingaben definiert sind und jede einen Video-Track enthält, wird die erste Eingabe in der inputs-Liste als Videoquelle verwendet. Dies ist die Standardzuordnung. Wenn keine der Eingaben einen Videotrack enthält, schlägt der Job fehl.

Die folgende Konfiguration verkettet die ersten 5 Sekunden des Videotracks input0.mp4 mit 10 Sekunden des Videotracks input1.mov in der Ausgabedatei:

"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"
  }
]

Weitere Informationen finden Sie unter Mehrere Eingabevideos verketten.

Standard-Audiozuordnungen

Audiozuordnungen beziehen sich auf eine Vielzahl von Situationen, vor allem, wenn eine falsch zugeordnete Anzahl von Audioeingaben für die Ausgaben ausgegeben wird.

Mehrere Eingaben verketten

Jedes Atom in editList muss auf mindestens eine Eingabe verweisen, die einen Audiotrack enthält, wenn ein audioStream definiert ist. Wenn für ein Atom mehrere Eingaben definiert sind und jede einen Audiotrack enthält, wird die erste Eingabe in der inputs-Liste als Audioquelle verwendet. Dies ist die Standardzuordnung. Wenn keine der Eingaben einen Audiotrack enthält, schlägt der Job fehl.

Die Transcoder API generiert nur für jedes definierte audioStream-Element eine Standardzuordnung, wenn die Zuordnung vom Client nicht explizit angegeben wurde.

Betrachten Sie die folgende Konfiguration, die eine definierte audioStream enthält:

"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
    }
  }
]

Die Transcoder API generiert die folgenden Standardzuordnungen für die Audioausgabe. Die audioStream-Felder werden nicht auf die video_only-Eingabe angewendet. Obwohl diese Eingabe zuerst in der inputs-Liste aufgeführt wird, enthält sie keinen Audiotrack.

"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
        }
      ]
    }
  }
]

N bis n Kopie

Wenn die Anzahl der Kanäle im Eingabeaudiotrack mit der Anzahl der Kanäle im Ausgabe-audioStream übereinstimmt, kopiert die Transcoder API die Eingabekanäle in die Ausgabekanäle.

Betrachten Sie die folgende Konfiguration, die eine Eingabe mit Zweikanal-Stereo-Audio und eine definierte audioStream mit zwei Kanälen enthält:

"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
    }
  }
]

Die Transcoder API generiert die folgenden Standardzuordnungen für die Audioausgabe:

"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
        }
      ]
    }
  }
]

N bis 1 Downmix

Wenn die Anzahl der Kanäle im Eingangs-Audio-Track die Anzahl der Kanäle im Ausgabe-audioStream überschreitet, kopiert die Transcoder API alle Eingabekanäle in einen einzigen Ausgabekanal.

Wenn durch audioStream mehrere Ausgabekanäle definiert werden, wird der einzelne Ausgabekanal kopiert und für jeden Ausgabekanal verwendet. Wenn der Eingangs-Audio-Track beispielsweise aus fünf Kanälen besteht und zwei audioStream-Ausgabekanäle definieren, enthalten diese beiden Ausgabekanäle genau den gleichen Audioinhalt, einen Downmix der fünf Eingabekanäle.

Betrachten Sie die folgende Konfiguration, die eine Eingabe mit Zweikanal-Stereo-Audio und eine definierte audioStream mit einem Ausgabekanal enthält:

"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
    }
  }
]

Die Transcoder API generiert die folgenden Standardzuordnungen für die Audioausgabe:

"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 bis N Kopie

Wenn die Anzahl der Kanäle im Eingangs-Audiotrack kleiner ist als die Anzahl der Kanäle im Ausgabe-audioStream, kopiert die Transcoder API den ersten Eingabekanal in jeden Ausgabekanal.

Die folgende Konfiguration enthält eine Eingabe mit einem Ein-Mono-Audio und eine definierte audioStream mit zwei Ausgabekanälen:

"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
    }
  }
]

Die Transcoder API generiert die folgenden Standardzuordnungen für die Audioausgabe:

"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
        }
      ]
    }
  }
]

Standardtextzuordnung

Textzuordnungen werden im Allgemeinen für Untertitel verwendet.

Jedes Atom in editList muss auf mindestens eine Eingabe verweisen, die einen Texttrack enthält, wenn ein textStream definiert ist. Wenn für ein Atom mehrere Eingaben definiert sind und jede einen Texttrack enthält, wird die erste Eingabe in der inputs-Liste als Textquelle verwendet. Dies ist die Standardzuordnung. Wenn keine der Eingaben einen Texttrack enthält, schlägt der Job fehl.

"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"
    }
  }
]

Die Transcoder API generiert die folgenden Standardzuordnungen für die Textausgabe:

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