L'API Transcoder ti consente di concatenare video, mixare tracce audio e altro ancora. La specifica JSON di JobConfig
è molto flessibile e questo può creare ambiguità tra input e output. Puoi definire determinate mappature di stream per chiarire questa ambiguità.
In caso contrario, l'API fornisce mappature degli stream predefinite ragionevoli.
Questa pagina mostra le mappature degli stream predefinite fornite dall'API e alcuni esempi di configurazione avanzata per la codifica dei file multimediali di input.
Sfondo
L'elenco inputs
in un JobConfig
specifica quali file scaricare, non come usarli. Ogni input è associato a una chiave per identificarlo.
editList
definisce una sequenza di modifiche come sequenza temporale per il file di output (o il manifest) di un job di transcodifica. Il inputs
in editList
determina quali input utilizzare in ogni atomo.
Per ulteriori informazioni, consulta la sezione Concetti nella panoramica.
Mappatura video predefinita
Ogni atomo in editList
deve fare riferimento ad almeno un input contenente una traccia video. Se per un atomo sono definiti più input e ognuno contiene una traccia video, il primo input nell'elenco inputs
viene utilizzato come sorgente video. Si tratta della mappatura predefinita. Se nessuno degli input contiene una traccia video, il job non va a buon fine.
La seguente configurazione concatena i primi 5 secondi della traccia videoinput0.mp4
con 10 secondi della traccia video input1.mov
nel file di output:
"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"
}
]
Per saperne di più, consulta la sezione Concatenare più video in ingresso.
Mappature audio predefinite
Le mappature audio si applicano a una serie di situazioni, in particolare quando il numero di input audio non corrisponde a quello delle uscite.
Concatenare più input
Ogni atomo in editList
deve fare riferimento ad almeno un input contenente una traccia audio se è definito un audioStream
. Se per un atom sono definiti più input e ognuno contiene una traccia audio, il primo input nell'elenco inputs
viene utilizzato come sorgente audio. Questa è la mappatura predefinita. Se nessuno degli input contiene una traccia audio, il job non va a buon fine.
L'API Transcoder genera una mappatura predefinita per ogni audioStream
definito solo se la mappatura non è specificata esplicitamente dal client.
Considera la seguente configurazione che contiene un audioStream
definito:
"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
}
}
]
L'API Transcoder genera le seguenti mappature predefinite per l'output audio.
Tieni presente che i campi audioStream
non vengono applicati all'input video_only
.
Anche se questo input viene visualizzato per primo nell'elenco inputs
, non contiene una traccia audio.
"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 a n copie
Se il numero di canali nella traccia audio di input corrisponde al numero di canali in audioStream
output, l'API Transcoder copia i canali di input nei canali di output.
Considera la seguente configurazione che contiene un input con audio stereo a due canali e un audioStream
definito con 2 canali:
"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
}
}
]
L'API Transcoder genera le seguenti mappature predefinite per l'output audio:
"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
}
]
}
}
]
Downmix da N a 1
Se il numero di canali nella traccia audio di input è maggiore del numero di canali in audioStream
, l'API Transcoder copia tutti i canali di input in un unico canale di output.
Se audioStream
definisce più canali di output, il singolo canale di output viene copiato e utilizzato per ogni canale di output. Ad esempio, se la traccia audio di input è composta da 5 canali e audioStream
definisce 2 canali di output, questi due canali di output conterranno lo stesso audio, un downmix dei 5 canali di input.
Prendiamo in considerazione la seguente configurazione che contiene un input con audio stereo a due canali e un audioStream
definito con un canale di output:
"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
}
}
]
L'API Transcoder genera le seguenti mappature predefinite per l'output audio:
"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 copie
Se il numero di canali nella traccia audio di input è inferiore al numero di canali in audioStream
di output, l'API Transcoder copia il primo canale di input in ogni canale di output.
Prendiamo in considerazione la seguente configurazione che contiene un input con audio mono a un canale e un audioStream
definito con 2 canali di output:
"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
}
}
]
L'API Transcoder genera le seguenti mappature predefinite per l'output audio:
"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
}
]
}
}
]
Mappatura del testo predefinita
Le mappature di testo vengono generalmente utilizzate per i sottotitoli e i sottotitoli codificati.
Ogni atomo in editList
deve fare riferimento ad almeno un input contenente una traccia di testo se è definito un textStream
. Se per un atomo sono definiti più input e ognuno contiene una traccia di testo, il primo input nell'elenco inputs
viene utilizzato come origine del testo. Si tratta della mappatura predefinita. Se nessuno degli input contiene una traccia di testo, il job non va a buon fine.
"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"
}
}
]
L'API Transcoder genera le seguenti mappature predefinite per l'output di testo:
"elementaryStreams": [
{
"key": "output_sub",
"textStream": {
"codec": "webvtt",
"mapping": [
{
"atomKey": "atom0",
"inputKey": "caption_input0",
"inputTrack": 0
}
]
}
}
]