ストリームのマッピング

Transcoder API を使用すると、動画の連結、音声トラックを混在させることなどが可能になります。JobConfig JSON 仕様は非常に柔軟であるため、入力と出力の間が不明瞭になる可能性があります。一定のストリーム マッピングを定義して、この曖昧な点を取り除くことができます。マッピングを定義しない場合は、API によって妥当なデフォルトのストリーム マッピングが提供されます。

このページでは、API によって提供されるデフォルトのストリーム マッピングと、入力メディア ファイルのエンコードに関する詳細な構成例を紹介します。

背景

JobConfiginputs リストは、ファイルの使用方法ではなく、ダウンロードするファイルを指定します。各入力はキーと連携して識別されます。

editList は、コード変換ジョブからの出力ファイル(またはマニフェスト)のタイムラインとして、一連の編集を定めます。editListinputs によって、各 atom で使用する入力が決まります。

詳細については、概要ページのコンセプト セクションをご覧ください。

デフォルトの動画マッピング

editList の各 atom は、動画トラックを含む入力を少なくとも 1 つ参照する必要があります。1 つの atom に複数の入力が定義されていて、それぞれに動画トラックが含まれている場合、inputs リストの最初の入力が動画ソースとして使用されます。これがデフォルトのマッピングです。動画トラックを含む入力がない場合、ジョブは失敗します。

次の構成では、動画トラック input0.mp4 の最初の 5 秒と動画トラック input1.mov の 10 秒が出力ファイルに連結されます。

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

詳細については、複数の入力動画の連結をご覧ください。

デフォルトの音声マッピング

オーディオ マッピングはさまざまな状況(特に出力に誤った音声入力値がある場合)に適用されます。

複数の入力を連結する

audioStream が定義されている場合、editList の各 atom は、音声トラックを含む入力を少なくとも 1 つ参照する必要があります。1 つの atom に複数の入力が定義されていて、それぞれに音声トラックが含まれている場合、inputs リストの最初の入力が音声ソースとして使用されます。これがデフォルトのマッピングです。音声トラックを含む入力がない場合、ジョブは失敗します。

クライアントによってマッピングが明示的に指定されていない場合、Transcoder API は定義済みの audioStream ごとにデフォルトのマッピングを生成します。

定義済みの audioStream を含む次の構成を考えます。

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

Transcoder API は、音声出力に対して次のデフォルト マッピングを生成します。 audioStream フィールドは video_only 入力には適用されません。この入力は inputs リストの最初に表示されますが、音声トラックは含まれていません。

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

Nn のコピー

入力音声トラックのチャンネル数が出力 audioStream のチャンネル数と一致する場合、Transcoder API は、入力チャンネルを出力チャンネルにコピーします。

2 チャンネル ステレオの音声と、2 つのチャンネルを有する定義された audioStream を含む次の構成を考えます。

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

Transcoder API は、音声出力に対して次のデフォルト マッピングを生成します。

"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 対 1 のダウンミックス

入力音声トラックのチャンネル数が出力 audioStream のチャンネル数より大きい場合、Transcoder API はすべての入力チャンネルを 1 つの出力チャンネルにコピーします。

audioStream で複数の出力チャンネルが定義されている場合、単一の出力チャンネルがコピーされ、各出力チャンネルで使用されます。たとえば、入力音声トラックが 5 チャンネルで構成され、audioStream が 2 つの出力チャンネルを定義する場合、2 つの出力チャンネルはまったく同じ 5 つの入力チャンネルのダウンミックスを含んでいます。

2 チャンネル ステレオ音声を含む入力と、定義された audioStream を含む 1 つの出力チャンネルを含む構成を考えます。

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

Transcoder API は、音声出力に対して次のデフォルト マッピングを生成します。

"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 のコピー

入力音声トラックのチャンネル数が出力 audioStream に含まれるチャンネルの数より少ない場合、Transcoder API は、最初の出力チャンネルを各出力チャンネルにコピーします。

1 つのチャンネル用のモノラル音声と 2 つの出力チャンネルを有する定義された audioStream を含む構成を考えます。

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

Transcoder API は、音声出力に対して次のデフォルト マッピングを生成します。

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

デフォルトのテキスト マッピング

テキスト マッピングは通常、字幕(CC)に使用されます。

textStream が定義されている場合、editList の各 atom は、テキスト トラックを含む入力を少なくとも 1 つ参照する必要があります。1 つの atom に複数の入力が定義されていて、それぞれにテキスト トラックが含まれている場合、inputs リストの最初の入力がテキストソースとして使用されます。これがデフォルトのマッピングです。テキスト トラックを含む入力がない場合、ジョブは失敗します。

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

Transcoder API は、テキスト出力に対して次のデフォルト マッピングを生成します。

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