En esta página, se explica cómo combinar varios videos de entrada en un solo video de salida. También puedes cortar las líneas de tiempo de los videos de entrada.
Para cada video de entrada, agrega un objeto Input
al array inputs
.
Cada objeto Input
define la clave y el URI del video de entrada asociado. Puedes agregar un objeto PreprocessingConfig
opcional a un Input
para recortar, agregar relleno 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 a la línea de tiempo del video de salida, agrega un objeto EditAtom
al array editList
. El array editList
está ordenado. La primera entrada designada en este array 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 usará 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 la Configuración de IAM.LOCATION
: Es la ubicación en la que se ejecutará tu trabajo. Usa una de las regiones admitidas.Mostrar ubicacionesus-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
STORAGE_BUCKET_NAME
: El nombre del bucket de Cloud Storage que creaste.STORAGE_INPUT_VIDEO1
: Es el nombre de un video en tu bucket de Cloud Storage que se transcodificará, comomy-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 la línea de tiempo del video de salida.START_TIME_OFFSET1
: Hora de inicio, en segundos fraccionarios (por ejemplo,0.0
), en relación con la primera línea de tiempo del video de entrada. Usa este campo para cortar contenido desde el comienzo del video.END_TIME_OFFSET1
: Hora de finalización en segundos fraccionarios (por ejemplo,8.1
), en relación con la primera línea de tiempo del video de entrada. Usa este campo para cortar contenido del final del video.STORAGE_INPUT_VIDEO2
: Es el nombre de un video en tu bucket de Cloud Storage que se transcodificará, comomy-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á en segundo lugar en la línea de tiempo del video de salida.START_TIME_OFFSET2
: Hora de inicio, en segundos fraccionarios (por ejemplo,3.5
), en relación con la línea de tiempo del segundo video de entrada. Usa este campo para cortar el contenido desde el comienzo del segundo video.END_TIME_OFFSET2
: Hora de finalización en segundos fraccionarios (por ejemplo,15
), en relación con la línea de tiempo del segundo video de entrada. Usa este campo para cortar contenido del final del segundo video.STORAGE_OUTPUT_FOLDER
: Es el nombre de la carpeta de Cloud Storage en la que deseas guardar los resultados del video codificado.
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
- Crea un archivo
request.json
que defina los campos del trabajo. Realiza los siguientes reemplazos en el comandogcloud
:- LOCATION: Es la ubicación en la que se ejecutará tu trabajo. Usa una de las regiones admitidas.
Mostrar ubicaciones
us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
- STORAGE_BUCKET_NAME: El nombre del bucket de Cloud Storage que creaste.
- STORAGE_INPUT_VIDEO1:
Es el nombre de un video en tu bucket de Cloud Storage que se
transcodificará, como
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 la línea de tiempo del video de salida. - START_TIME_OFFSET1: Hora de inicio, en segundos fraccionarios (por ejemplo,
0.0
), en relación con la primera línea de tiempo del video de entrada. Usa este campo para cortar contenido desde el comienzo del video. - END_TIME_OFFSET1: Hora de finalización en segundos fraccionarios (por ejemplo,
8.1
), en relación con la primera línea de tiempo del video de entrada. Usa este campo para cortar contenido del final del video. - STORAGE_INPUT_VIDEO2:
Es el nombre de un video en tu bucket de Cloud Storage que se
transcodificará, como
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á en segundo lugar en la línea de tiempo del video de salida. - START_TIME_OFFSET2: Hora de inicio, en segundos fraccionarios (por ejemplo,
3.5
), en relación con la línea de tiempo del segundo video de entrada. Usa este campo para cortar el contenido desde el comienzo del segundo video. - END_TIME_OFFSET2: Hora de finalización en segundos fraccionarios (por ejemplo,
15
), en relación con la línea de tiempo del segundo video de entrada. Usa este campo para cortar contenido del final del segundo video. - STORAGE_OUTPUT_FOLDER: Es el nombre de la carpeta de Cloud Storage en la que deseas guardar los resultados del video codificado.
{ "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á tu trabajo. Usa una de las regiones admitidas.
- Ejecuta el siguiente comando:
Deberías ver una respuesta similar a la siguiente:gcloud transcoder jobs create --location=LOCATION --file="request.json"
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
C#
Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de la API de Transcoder. Si deseas obtener más información, consulta la documentación de referencia de la API de Transcoder C#.
Para autenticarte en la API de Transcoder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de la API de Transcoder. Si deseas obtener más información, consulta la documentación de referencia de la API de Transcoder Go.
Para autenticarte en la API de Transcoder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de la API de Transcoder. Si deseas obtener más información, consulta la documentación de referencia de la API de Transcoder Java.
Para autenticarte en la API de Transcoder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de la API de Transcoder. Si deseas obtener más información, consulta la documentación de referencia de la API de Transcoder Node.js.
Para autenticarte en la API de Transcoder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
PHP
Antes de probar este ejemplo, sigue las instrucciones de configuración para PHP que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de la API de Transcoder. Si deseas obtener más información, consulta la documentación de referencia de la API de Transcoder PHP.
Para autenticarte en la API de Transcoder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de la API de Transcoder. Si deseas obtener más información, consulta la documentación de referencia de la API de Transcoder Python.
Para autenticarte en la API de Transcoder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ruby
Antes de probar este ejemplo, sigue las instrucciones de configuración para Ruby que encontrarás en la guía de inicio rápido sobre las bibliotecas cliente de la API de Transcoder. Si deseas obtener más información, consulta la documentación de referencia de la API de Transcoder Ruby.
Para autenticarte en la API de Transcoder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ejemplo
Considera los siguientes videos de ejemplo:
Ambos videos son similares, ya que contienen tres partes:
- Mirar una película o jugar en un dispositivo móvil
- Mirar el mismo contenido en una pantalla grande
- Mostrar un texto breve del anuncio sobre 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 lograr esta concatenación con los siguientes desplazamientos de tiempo:
- 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 desplazamientos de tiempo para ver un video de resultado lleno de acción.