借助 Transcoder API 您可以串联视频、混合音轨,等等。JobConfig
JSON 规范非常灵活,这可能会在输入和输出之间产生歧义。您可以定义某些数据流映射来消除此歧义。否则,API 会为您指定合理的默认数据流映射。
本页面介绍了 API 提供的默认数据流映射,以及有关输入媒体文件编码的高级配置示例。
背景
JobConfig
中的 inputs
列表指定要下载哪些文件,而不是如何使用这些文件。每个输入都与一个键配对,以识别该键。
editList
将转码作业的输出文件(或清单)的一系列修改定义为时间轴。editList
中的 inputs
决定在每个 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"
}
]
如需了解详情,请参阅串联多个输入视频。
默认音频映射
音频映射适用于各种情况,尤其是在音频输入输出的数量不一致的时候。
串联多个输入
如果定义了 audioStream
,则 editList
中的每个 Atom 必须引用至少一个包含音轨的输入。如果为 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 会将输入通道复制到输出通道中。
请考虑以下配置,它包含一个具有双通道立体声音频的输入和一个具有两个通道的已定义的 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
定义了两个输出通道,则这两个输出通道将包含完全相同的音频,即 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
}
]
}
}
]
1 到 N 复制
如果输入音频轨道中的通道数小于输出 audioStream
中的通道数,则 Transcoder API 会将第一个输入通道复制到每个输出通道中。
请考虑以下配置,它包含一个具有一通道单声道音频的输入和一个具有两个输出通道的已定义的 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 必须引用至少一个包含文本轨道的输入。如果为 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
}
]
}
}
]