스트림 매핑

Transcoder API를 사용하면 동영상 연결, 오디오 트랙 믹싱 등을 할 수 있습니다. JobConfig JSON 사양은 매우 유연하므로 입력과 출력 간에 모호성이 발생할 수 있습니다. 이러한 모호성을 없애기 위해 특정 스트림 매핑을 정의할 수 있습니다. 그렇지 않으면 API가 적합한 기본 스트림 매핑을 자동으로 제공합니다.

이 페이지에서는 API가 제공하는 기본 스트림 매핑과 입력 미디어 파일 인코딩에 대한 몇 가지 고급 구성 예시를 보여줍니다.

배경

JobConfiginputs 목록은 파일 사용 방법이 아닌 다운로드할 파일을 지정합니다. 각 입력은 이를 식별하는 키와 페어링됩니다.

editList는 트랜스코딩 작업에서 출력 파일(또는 매니페스트)의 타임라인으로 수정 시퀀스를 정의합니다. editListinputs는 각 Atom에서 사용할 입력을 결정합니다.

자세한 내용은 개요의 개념 및 용어 섹션을 참조하세요.

기본 동영상 매핑

editList의 각 Atom은 동영상 트랙 하나가 포함된 입력을 최소 한 개 이상 참조해야 합니다. 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"
  }
]

기본 오디오 매핑

오디오 매핑은 다양한 상황에 특히 오디오 입력 수가 출력과 일치하지 않는 경우에 적용됩니다.

여러 입력 연결

editList의 각 Atom은 audioStream이 정의된 경우 오디오 트랙이 포함된 입력을 최소 한 개 이상 참조해야 합니다. 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
        }
      ]
    }
  }
]

N에서 n으로 복사

입력 오디오 트랙의 채널 수가 출력 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는 모든 입력 채널을 단일 출력 채널에 복사합니다.

audioStream에서 출력 채널 여러 개를 정의하는 경우 단일 출력 채널이 복사되어 각 출력 채널에 사용됩니다. 예를 들어 입력 오디오 트랙이 5채널로 구성되어 있고 audioStream이 출력 채널 2개를 정의하는 경우 이 출력 채널 2개에는 정확하게 동일한 입력 오디오 즉, 입력 채널 5개에 대한 다운믹스 1개가 포함됩니다.

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": 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)에 사용됩니다.

editList의 각 Atom은 textStream이 정의된 경우 텍스트 트랙이 포함된 입력을 한 개 이상 참조해야 합니다. 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
        }
      ]
    }
  }
]