串流對應關係

Transcoder API 可讓您連結影片、混合音軌等。JobConfig JSON 規格相當靈活,這可能會導致輸入和輸出之間產生模糊不清的情況。您可以定義特定的串流對應,以消除這項模糊不清的情況。如果您未指定,API 會提供合理的預設串流對應。

本頁面會顯示 API 提供的預設串流對應項目,以及用於編碼輸入媒體檔案的進階設定範例。

背景

JobConfig 中的 inputs 清單會指定要下載哪些檔案,而非如何使用這些檔案。每個輸入內容都會搭配一個鍵來識別。

editList 會將編輯序列定義為轉碼工作輸出檔案 (或資訊清單) 的時間軸。editList 中的 inputs 會決定在每個原子中使用的輸入內容。

詳情請參閱總覽中的「概念」一節。

預設影片對應

editList 中的每個原子都必須參照至少一個包含影片軌的輸入內容。如果為原子定義多個輸入內容,且每個輸入內容都包含影片音軌,系統會使用 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"
  }
]

詳情請參閱「串連多部輸入影片」。

預設音訊對應

音訊對應可套用於各種情況,最常見的情況是音訊輸入和輸出數量不相符。

串連多個輸入內容

如果已定義 audioStreameditList 中的每個原子都必須參照至少一個包含音軌的輸入內容。如果為原子定義多個輸入內容,且每個輸入內容都包含音訊音軌,系統會使用 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
        }
      ]
    }
  }
]

份副本

如果輸入音訊軌的聲道數量與輸出 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 的聲道數量,轉碼器 API 會將所有輸入聲道複製到單一輸出聲道。

如果 audioStream 定義了多個輸出管道,系統會複製單一輸出管道,並用於每個輸出管道。舉例來說,如果輸入音訊軌包含 5 個聲道,而 audioStream 定義了 2 個輸出聲道,則這兩個輸出聲道會包含完全相同的音訊,也就是 5 個輸入聲道的混音版本。

請考慮以下設定,其中包含含有雙聲道立體聲音訊的輸入內容,以及定義了含有一個輸出頻道的 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": 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
        }
      ]
    }
  }
]

1N

如果輸入音訊軌的聲道數少於輸出 audioStream 的聲道數,Transcoder API 會將第一個輸入聲道複製到每個輸出聲道。

請考慮下列設定,其中包含一個含有單聲道單聲道音訊的輸入內容,以及定義的 audioStream,其中包含 2 個輸出頻道:

"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)。

如果已定義 textStreameditList 中的每個原子都必須參照至少一個包含文字軌的輸入內容。如果為原子定義多個輸入內容,且每個輸入內容都包含文字音軌,系統會使用 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
        }
      ]
    }
  }
]