La API de Transcoder te permite concatenar videos, mezclar pistas de audio y
más. El JSON JobConfig
esta especificación es altamente flexible y puede crear ambigüedad entre las entradas
y resultados. Puedes definir ciertas asignaciones de transmisión para aclarar esta ambigüedad.
Si no lo haces, la API te proporcionará asignaciones de transmisión predeterminadas razonables.
En esta página, se muestran las asignaciones de transmisión predeterminadas que proporciona la API y algunas ejemplos de configuración avanzada para la codificación de archivos multimedia de entrada.
Fondo
La lista inputs
de un JobConfig
especifica qué archivos descargar, no cómo
los usan. Cada entrada se empareja con una clave para identificarla.
La editList
define una secuencia de ediciones como un cronograma para el archivo de salida (o manifiesto) a partir de un trabajo de transcodificación. Las inputs
en editList
determina qué entradas usar en cada átomo.
Para obtener más información, lee el Conceptos en Descripción general.
Asignación de video predeterminada
Cada átomo de editList
debe hacer referencia, al menos, a una entrada que contenga un
Pista de video. Si se definen varias entradas para un átomo y cada una contiene un
pista de video, la primera entrada de la lista inputs
se usa como fuente de video.
esta es la asignación predeterminada. Si ninguna de las entradas contiene una pista de video, el
de que tu trabajo falle.
La siguiente configuración concatena los primeros 5 segundos de la pista de video.
input0.mp4
con 10 segundos de la pista de video input1.mov
en el archivo de salida:
"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"
}
]
Consulta Cómo concatenar varios videos de entrada para obtener más información.
Asignaciones de audio predeterminadas
Las asignaciones de audio se aplican a diversas situaciones, especialmente cuando hay una no coincide la cantidad de entradas de audio con las salidas.
Cómo concatenar varias entradas
Cada átomo de editList
debe hacer referencia, al menos, a una entrada que contenga un
pista de audio si se define un audioStream
. Si se definen múltiples entradas para
un átomo y cada uno contiene una pista de audio. Es la primera entrada de la lista inputs
.
se usa como fuente de audio; esta es la asignación predeterminada. Si ninguna de las entradas
contiene una pista de audio, el trabajo falla.
La API de Transcoder solo genera una asignación predeterminada para cada
audioStream
si el cliente no especifica la asignación de forma explícita.
Considera la siguiente configuración que contiene un 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
}
}
]
La API de Transcoder genera las siguientes asignaciones predeterminadas para la salida de audio.
Ten en cuenta que los campos audioStream
no se aplican a la entrada video_only
.
Si bien esta entrada aparece primero en la lista inputs
, no contiene un
pista de 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 una copia n
Si la cantidad de canales en la pista de audio de entrada coincide con la cantidad de canales en el audioStream
de salida, la API de Transcoder copia los canales de entrada en los canales de salida.
Considera la siguiente configuración que contiene una entrada con dos
Audio estéreo y un audioStream
definido con 2 canales:
"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
}
}
]
La API de Transcoder genera las siguientes asignaciones predeterminadas para la salida de 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
}
]
}
}
]
N hasta 1 mezcla mono
Si el número de canales en la pista de audio de entrada es mayor que el número de
canales en el audioStream
de salida, la API de Transcoder copia todas las entradas
canales en un solo canal de salida.
Si audioStream
define varios canales de salida, el único canal de salida
y se usa para cada canal de salida. Por ejemplo, si el audio de entrada
consta de 5 canales y audioStream
define 2 canales de salida,
esos dos canales de salida contendrán exactamente el mismo audio, una mezcla de los 5
canales de entrada.
Considera la siguiente configuración que contiene una entrada con dos
Audio estéreo y un audioStream
definido con un canal de salida:
"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
}
}
]
La API de Transcoder genera las siguientes asignaciones predeterminadas para la salida de 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 una copia N
Si el número de canales en la pista de audio de entrada es menor que el número de
canales en el audioStream
de salida, la API de Transcoder copia el primer
canal de entrada en cada canal de salida.
Considera la siguiente configuración que contiene una entrada con un canal
Audio mono y un audioStream
definido con 2 canales de salida:
"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
}
}
]
La API de Transcoder genera las siguientes asignaciones predeterminadas para la salida de 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
}
]
}
}
]
Asignación de texto predeterminada
Por lo general, las asignaciones de texto se usan para los subtítulos.
Cada átomo de editList
debe hacer referencia, al menos, a una entrada que contenga un
seguimiento de texto si un
textStream
es
definido. Si se definen varias entradas para un átomo y cada una contiene un texto
Track, la primera entrada en la lista inputs
se usa como fuente de texto. esto es
la asignación predeterminada. Si ninguna de las entradas contiene un segmento de texto, el trabajo falla.
"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"
}
}
]
La API de Transcoder genera las siguientes asignaciones predeterminadas para la salida de texto:
"elementaryStreams": [
{
"key": "output_sub",
"textStream": {
"codec": "webvtt",
"mapping": [
{
"atomKey": "atom0",
"inputKey": "caption_input0",
"inputTrack": 0
}
]
}
}
]