A API Transcoder permite-lhe concatenar vídeos, misturar faixas de áudio e
muito mais. A especificação JSON JobConfig
é muito flexível, o que pode criar ambiguidade entre as entradas e as saídas. Pode definir determinados mapeamentos de streams para esclarecer esta ambiguidade.
Caso contrário, a API fornece mapeamentos de streams predefinidos razoáveis.
Esta página mostra os mapeamentos de streams predefinidos fornecidos pela API e alguns exemplos de configuração avançada para a codificação de ficheiros multimédia de entrada.
Contexto
A lista inputs
num JobConfig
especifica os ficheiros a transferir e não como os usar. Cada entrada está associada a uma chave para a identificar.
O elemento editList
define uma sequência de edições como uma cronologia para o ficheiro de saída (ou manifesto) de uma tarefa de transcodificação. Os inputs
no editList
determinam que entradas usar em cada átomo.
Para mais informações, leia a secção Conceitos na vista geral.
Mapeamento de vídeo predefinido
Cada elemento no editList
tem de fazer referência a, pelo menos, uma entrada que contenha uma faixa de vídeo. Se forem definidos vários inputs para um elemento atom e cada um contiver uma faixa de vídeo, o primeiro input na lista inputs
é usado como a origem do vídeo; este é o mapeamento predefinido. Se nenhuma das entradas contiver uma faixa de vídeo, a tarefa falha.
A configuração seguinte concatena os primeiros 5 segundos da faixa de vídeo
input0.mp4
com 10 segundos da faixa de vídeo input1.mov
no ficheiro de saída:
"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"
}
]
Consulte o artigo Concatenar vários vídeos de entrada para mais informações.
Mapeamentos de áudio predefinidos
Os mapeamentos de áudio aplicam-se a várias situações, principalmente quando existe um número incompatível de entradas e saídas de áudio.
Concatenar várias entradas
Cada elemento no editList
tem de fazer referência a, pelo menos, uma entrada que contenha uma faixa de áudio se for definido um audioStream
. Se forem definidas várias entradas para um elemento atómico e cada uma contiver uma faixa de áudio, a primeira entrada na lista inputs
é usada como a origem de áudio. Este é o mapeamento predefinido. Se nenhuma das entradas contiver uma faixa de áudio, a tarefa falha.
A API Transcoder só gera um mapeamento predefinido para cada
audioStream
definido
se o mapeamento não for especificado explicitamente pelo cliente.
Considere a seguinte configuração que contém um audioStream
definido:
"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
}
}
]
A API Transcoder gera os seguintes mapeamentos predefinidos para a saída de áudio.
Tenha em atenção que os campos audioStream
não são aplicados à entrada video_only
.
Embora esta entrada apareça primeiro na lista inputs
, não contém uma faixa de áudio.
"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 para n cópias
Se o número de canais na faixa de áudio de entrada corresponder ao número de canais na saída audioStream
, a API Transcoder copia os canais de entrada para os canais de saída.
Considere a seguinte configuração que contém uma entrada com áudio estéreo de dois canais e um audioStream
definido com 2 canais:
"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
}
}
]
A API Transcoder gera os seguintes mapeamentos predefinidos para a saída de áudio:
"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 para 1 conversão multicanal
Se o número de canais na faixa de áudio de entrada for superior ao número de canais na faixa de áudio de saída audioStream
, a API Transcoder copia todos os canais de entrada para um único canal de saída.
Se o audioStream
definir vários canais de saída, o canal de saída único é copiado e usado para cada canal de saída. Por exemplo, se a faixa de áudio de entrada consistir em 5 canais e o audioStream
definir 2 canais de saída, esses dois canais de saída vão conter exatamente o mesmo áudio, uma mistura dos 5 canais de entrada.
Considere a seguinte configuração que contém uma entrada com áudio estéreo de dois canais e um audioStream
definido com um canal de saída:
"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
}
}
]
A API Transcoder gera os seguintes mapeamentos predefinidos para a saída de áudio:
"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 a N cópias
Se o número de canais na faixa de áudio de entrada for inferior ao número de canais na faixa de áudio de saída audioStream
, a Transcoder API copia o primeiro canal de entrada para cada canal de saída.
Considere a seguinte configuração que contém uma entrada com áudio mono de um canal e um audioStream
definido com 2 canais de saída:
"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
}
}
]
A API Transcoder gera os seguintes mapeamentos predefinidos para a saída de áudio:
"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
}
]
}
}
]
Mapeamento de texto predefinido
As associações de texto são geralmente usadas para legendas.
Cada elemento no editList
tem de fazer referência a, pelo menos, uma entrada que contenha uma faixa de texto se um textStream
estiver definido. Se forem definidas várias entradas para um elemento atómico e cada uma contiver uma faixa de texto, a primeira entrada na lista inputs
é usada como a origem do texto. Este é o mapeamento predefinido. Se nenhuma das entradas contiver uma faixa de texto, a tarefa falha.
"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"
}
}
]
A API Transcoder gera os seguintes mapeamentos predefinidos para a saída de texto:
"elementaryStreams": [
{
"key": "output_sub",
"textStream": {
"codec": "webvtt",
"mapping": [
{
"atomKey": "atom0",
"inputKey": "caption_input0",
"inputTrack": 0
}
]
}
}
]