In questa pagina viene spiegato come combinare più video di input in un singolo video di output. Puoi anche tagliare le sequenze temporali dei video di input.
Per ogni video di input, aggiungi un oggetto Input
all'array di inputs
.
Ogni oggetto Input
definisce la chiave e l'URI del video di input associato. Puoi aggiungere un oggetto
PreprocessingConfig
facoltativo a una Input
per
ritagliare, ritagliare o eseguire altre pre-elaborazioni
sul video di input. L'array inputs
non è ordinato; puoi aggiungere video di input in qualsiasi ordine.
Per aggiungere un video di input alla sequenza temporale di output del video, aggiungi un oggetto EditAtom
all'array editList
. L'array editList
è ordinato. Il primo input designato in questo array verrà utilizzato per primo nel video di output, il secondo verrà utilizzato successivamente e così via. Puoi identificare un
video di input in base alla relativa chiave.
Puoi anche impostare startTimeOffset
e endTimeOffset
per tagliare il video di input. Questi campi sono facoltativi. Se non specifichi questi campi, verrà utilizzato l'intero video di input.
La seguente configurazione concatena due video di input in un unico video di output.
"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"
}
],
Puoi aggiungere questa configurazione a un modello di job o includerla in una configurazione job ad-hoc:
REST
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- PROJECT_ID: il tuo ID progetto Google Cloud elencato nelle impostazioni IAM.
- LOCATION: la località in cui verrà eseguito il job. Utilizza una delle regioni supportate:
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: il nome del bucket Cloud Storage che hai creato.
- STORAGE_INPUT_VIDEO1:
il nome di un video nel bucket Cloud Storage che stai
transcodificando, ad esempio
my-vid.mp4
. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/my-vid.mp4
). Questo video verrà utilizzato per primo nella sequenza temporale di output del video. - START_TIME_OFFSET1: l'ora di inizio, in secondi frazionari (ad esempio
0.0
), rispetto alla sequenza temporale del primo input. Utilizza questo campo per tagliare i contenuti dall'inizio del video. - END_TIME_OFFSET1: l'ora di fine, in secondi frazionari (ad esempio
8.1
), rispetto alla sequenza temporale del primo input. Utilizza questo campo per tagliare i contenuti dalla fine del video. - STORAGE_INPUT_VIDEO2:
il nome di un video nel bucket Cloud Storage che stai
transcodificando, ad esempio
my-vid.mp4
. Questo campo dovrebbe tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/my-vid.mp4
). Questo video verrà utilizzato per secondo nella sequenza temporale di output del video. - START_TIME_OFFSET2: l'ora di inizio, in secondi frazionari (ad esempio
3.5
), rispetto alla sequenza temporale del secondo input. Utilizza questo campo per tagliare i contenuti dall'inizio del secondo video. - END_TIME_OFFSET2: l'ora di fine, in secondi frazionari (ad esempio
15
), rispetto alla sequenza temporale del secondo input. Utilizza questo campo per tagliare i contenuti dalla fine del secondo video. - STORAGE_OUTPUT_FOLDER: il nome della cartella Cloud Storage in cui vuoi salvare gli output video codificati.
Testo JSON richiesta:
{ "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/" } } }
Per inviare la richiesta, espandi una delle seguenti opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud CLI
- Crea un file
request.json
che definisce i campi del job. Esegui le seguenti sostituzioni per il comandogcloud
:- LOCATION: la località in cui verrà eseguito il job. Utilizza una delle regioni supportate:
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: il nome del bucket Cloud Storage che hai creato.
- STORAGE_INPUT_VIDEO1:
il nome di un video nel bucket Cloud Storage che stai
transcodificando, ad esempio
my-vid.mp4
. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/my-vid.mp4
). Questo video verrà utilizzato per primo nella sequenza temporale di output del video. - START_TIME_OFFSET1: l'ora di inizio, in secondi frazionari (ad esempio
0.0
), rispetto alla sequenza temporale del primo input. Utilizza questo campo per tagliare i contenuti dall'inizio del video. - END_TIME_OFFSET1: l'ora di fine, in secondi frazionari (ad esempio
8.1
), rispetto alla sequenza temporale del primo input. Utilizza questo campo per tagliare i contenuti dalla fine del video. - STORAGE_INPUT_VIDEO2:
il nome di un video nel bucket Cloud Storage che stai
transcodificando, ad esempio
my-vid.mp4
. Questo campo dovrebbe tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/my-vid.mp4
). Questo video verrà utilizzato per secondo nella sequenza temporale di output del video. - START_TIME_OFFSET2: l'ora di inizio, in secondi frazionari (ad esempio
3.5
), rispetto alla sequenza temporale del secondo input. Utilizza questo campo per tagliare i contenuti dall'inizio del secondo video. - END_TIME_OFFSET2: l'ora di fine, in secondi frazionari (ad esempio
15
), rispetto alla sequenza temporale del secondo input. Utilizza questo campo per tagliare i contenuti dalla fine del secondo video. - STORAGE_OUTPUT_FOLDER: il nome della cartella Cloud Storage in cui vuoi salvare gli output video codificati.
{ "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: la località in cui verrà eseguito il job. Utilizza una delle regioni supportate:
- Esegui questo comando:
gcloud transcoder jobs create --location=LOCATION --file="request.json"
Dovresti vedere una risposta simile alla seguente:{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
C#
Prima di provare questo esempio, segui le istruzioni per la configurazione di C# nella guida rapida all'API Transcoder mediante le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Transcoder API C#.
Go
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nella guida rapida all'API Transcoder mediante le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Transcoder API Go.
Java
Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nella guida rapida all'API Transcoder mediante le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Transcoder API Java.
Node.js
Prima di provare questo esempio, segui le istruzioni per la configurazione di Node.js nella guida rapida all'API Transcoder mediante le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Transcoder API Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni per la configurazione di PHP nella guida rapida all'API Transcoder mediante le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Transcoder API PHP.
Python
Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nella guida rapida all'API Transcoder mediante le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Transcoder API Python.
Ruby
Prima di provare questo esempio, segui le istruzioni per la configurazione di Ruby nella guida rapida all'API Transcoder mediante le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Transcoder API Ruby.
Esempio
Considera i seguenti video di esempio:
Entrambi i video sono simili in quanto contengono tre parti:
- Guardare un film o un gioco su un dispositivo mobile
- Guardare gli stessi contenuti su uno schermo di casa
- Mostra un breve testo pubblicitario per il prodotto
Ad esempio, puoi concatenare questi due video in modo che il video di output mostri le parti una e due del primo video, e poi le parti due e tre del secondo video. Puoi eseguire questa concatenazione utilizzando i seguenti offset di tempo:
- ForBiggerEscapes.mp4
startTimeOffset
:0s
endTimeOffset
:8.1s
- ForBiggerJoyrides.mp4
startTimeOffset
:3.5s
endTimeOffset
:15s
Utilizza il codice precedente insieme a questi due video e ai relativi offset temporali per visualizzare un video dei risultati ricco di azioni.