En esta página, se explica cómo combinar varios videos de entrada en un solo video de salida. También puedes cortar los cronogramas de los videos de entrada.
Para cada video de entrada, agrega un objeto Input
al arreglo inputs
.
Cada objeto Input
define la clave y el URI para el video de entrada asociado. Puedes agregar un objeto PreprocessingConfig
opcional a un Input
para recortar, rellenar o realizar otro procesamiento previo en el video de entrada. El array inputs
no está ordenado; puedes agregar videos de entrada en cualquier orden.
Para agregar un video de entrada al cronograma del video de salida, agrega un objeto EditAtom
al array editList
. El arreglo editList
está ordenado. La primera entrada designada en este arreglo se usará primero en el video de salida, la segunda entrada se usará a continuación, y así sucesivamente. Identificas un video de entrada por su clave.
También puedes designar un startTimeOffset
y un endTimeOffset
para cortar el video de entrada. Estos campos son opcionales. Si no especificas estos campos, se usa todo el video de entrada.
La siguiente configuración concatena dos videos de entrada en un solo video de salida.
"inputs": [
{
"key": "input1",
"uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO1"
},
{
"key": "input2",
"uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO2"
}
],
"editList": [
{
"key": "atom1",
"inputs": [
"input1"
],
"startTimeOffset": "START_TIME_OFFSET1s",
"endTimeOffset": "END_TIME_OFFSET1s"
},
{
"key": "atom2",
"inputs": [
"input2"
],
"startTimeOffset": "START_TIME_OFFSET2s",
"endTimeOffset": "END_TIME_OFFSET2s"
}
],
Puedes agregar esta configuración a una plantilla de trabajo o incluirla en una configuración de trabajo ad-hoc:
REST
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: El ID de tu proyecto de Google Cloud que aparece en Configuración de IAM.
- LOCATION: Es la ubicación en la que se ejecutará tu trabajo. Usa una de las regiones compatibles:
us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
asia-east1
asia-south1
asia-southeast1
europe-west1
europe-west2
europe-west4
- STORAGE_BUCKET_NAME: Es el nombre del depósito de Cloud Storage que creaste.
- STORAGE_INPUT_VIDEO1: Es el nombre de un video en el bucket de Cloud Storage que transcodificas, por ejemplo,
my-vid.mp4
. Este campo debe tener en cuenta las carpetas que creaste en el bucket (por ejemplo,input/my-vid.mp4
). Este video se usará primero en el cronograma del video de salida. - START_TIME_OFFSET1: La hora de inicio, en segundos fraccionarios (por ejemplo,
0.0
), en relación con el primer cronograma de video de entrada. Usa este campo para cortar el contenido desde el comienzo del video. - END_TIME_OFFSET1: La hora de finalización, en segundos fraccionarios (por ejemplo,
8.1
), en relación con el primer cronograma de video de entrada. Usa este campo para cortar el contenido desde el final del video. - STORAGE_INPUT_VIDEO2: Es el nombre de un video en el bucket de Cloud Storage que transcodificas, por ejemplo,
my-vid.mp4
. Este campo debe tener en cuenta todas las carpetas que creaste en el bucket (por ejemplo,input/my-vid.mp4
). Este video se usará en segundo lugar en el cronograma del video de salida. - START_TIME_OFFSET2: La hora de inicio, en segundos fraccionarios (por ejemplo,
3.5
), en relación con el segundo cronograma de video de entrada. Usa este campo para cortar el contenido desde el principio del segundo video. - END_TIME_OFFSET2: La hora de finalización, en segundos fraccionarios (por ejemplo,
15
), en relación con el segundo cronograma de video de entrada. Usa este campo para cortar el contenido desde el final del segundo video. - STORAGE_OUTPUT_FOLDER: Es el nombre de la carpeta de Cloud Storage en la que deseas guardar las salidas de video codificadas.
Cuerpo JSON de la solicitud:
{ "config": { "inputs": [ { "key": "input1", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO1" }, { "key": "input2", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO2" } ], "editList": [ { "key": "atom1", "inputs": [ "input1" ], "startTimeOffset": "START_TIME_OFFSET1s", "endTimeOffset": "END_TIME_OFFSET1s" }, { "key": "atom2", "inputs": [ "input2" ], "startTimeOffset": "START_TIME_OFFSET2s", "endTimeOffset": "END_TIME_OFFSET2s" } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" } } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud CLI
- Crea un archivo
request.json
que defina los campos del trabajo. Realiza los siguientes reemplazos para el comandogcloud
:- LOCATION: Es la ubicación en la que se ejecutará el trabajo. Usa una de las regiones compatibles:
us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
asia-east1
asia-south1
asia-southeast1
europe-west1
europe-west2
europe-west4
- STORAGE_BUCKET_NAME: Es el nombre del depósito de Cloud Storage que creaste.
- STORAGE_INPUT_VIDEO1: Es el nombre de un video en el bucket de Cloud Storage que transcodificas, por ejemplo,
my-vid.mp4
. Este campo debe tener en cuenta las carpetas que creaste en el bucket (por ejemplo,input/my-vid.mp4
). Este video se usará primero en el cronograma del video de salida. - START_TIME_OFFSET1: La hora de inicio, en segundos fraccionarios (por ejemplo,
0.0
), en relación con el primer cronograma de video de entrada. Usa este campo para cortar el contenido desde el comienzo del video. - END_TIME_OFFSET1: La hora de finalización, en segundos fraccionarios (por ejemplo,
8.1
), en relación con el primer cronograma de video de entrada. Usa este campo para cortar el contenido desde el final del video. - STORAGE_INPUT_VIDEO2: Es el nombre de un video en el bucket de Cloud Storage que transcodificas, por ejemplo,
my-vid.mp4
. Este campo debe tener en cuenta todas las carpetas que creaste en el bucket (por ejemplo,input/my-vid.mp4
). Este video se usará en segundo lugar en el cronograma del video de salida. - START_TIME_OFFSET2: La hora de inicio, en segundos fraccionarios (por ejemplo,
3.5
), en relación con el segundo cronograma de video de entrada. Usa este campo para cortar el contenido desde el principio del segundo video. - END_TIME_OFFSET2: La hora de finalización, en segundos fraccionarios (por ejemplo,
15
), en relación con el segundo cronograma de video de entrada. Usa este campo para cortar el contenido desde el final del segundo video. - STORAGE_OUTPUT_FOLDER: Es el nombre de la carpeta de Cloud Storage en la que deseas guardar las salidas de video codificadas.
{ "config": { "inputs": [ { "key": "input1", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO1" }, { "key": "input2", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO2" } ], "editList": [ { "key": "atom1", "inputs": [ "input1" ], "startTimeOffset": "START_TIME_OFFSET1s", "endTimeOffset": "END_TIME_OFFSET1s" }, { "key": "atom2", "inputs": [ "input2" ], "startTimeOffset": "START_TIME_OFFSET2s", "endTimeOffset": "END_TIME_OFFSET2s" } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" } } }
- LOCATION: Es la ubicación en la que se ejecutará el trabajo. Usa una de las regiones compatibles:
- Ejecuta el siguiente comando:
gcloud transcoder jobs create --location=LOCATION --file="request.json"
Debería ver una respuesta similar a la siguiente:{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
C#
Antes de probar esta muestra, sigue las instrucciones de configuración de C# que se encuentran en la guía de inicio rápido sobre la API de Transcoder mediante bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de C# para la API de Transcoder.
Go
Antes de probar esta muestra, sigue las instrucciones de configuración de Go que se encuentran en la guía de inicio rápido sobre la API de Transcoder mediante bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Go para la API de Transcoder.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java que se encuentran en la guía de inicio rápido sobre la API de Transcoder mediante bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Java para la API de Transcoder.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js que se encuentran en la guía de inicio rápido sobre la API de Transcoder mediante bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Node.js para la API de Transcoder.
PHP
Antes de probar esta muestra, sigue las instrucciones de configuración de PHP que se encuentran en la guía de inicio rápido sobre la API de Transcoder mediante bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de PHP para la API de Transcoder.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido sobre la API de Transcoder mediante bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Python para la API de Transcoder.
Ruby
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby que se encuentran en la guía de inicio rápido sobre la API de Transcoder mediante bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Ruby para la API de Transcoder.
Ejemplo
Considera los siguientes videos de muestra:
Ambos videos son similares en que contienen tres partes:
- Mirar una película o un juego en un dispositivo móvil
- Mira el mismo contenido en una pantalla grande
- Mostrar el texto de un anuncio breve para el producto
Por ejemplo, puedes concatenar estos dos videos de modo que el video de salida muestre las partes uno y dos del primer video y, luego, las partes dos y tres del segundo video. Puedes realizar esta concatenación mediante las siguientes compensaciones horarias:
- ForBiggerEscapes.mp4
startTimeOffset
:0s
endTimeOffset
:8.1s
- ForBiggerJoyrides.mp4
startTimeOffset
:3.5s
endTimeOffset
:15s
Usa el código anterior junto con estos dos videos y sus compensaciones horarias para ver un video de resultado lleno de acciones.