Cette page explique comment combiner plusieurs vidéos d'entrée en une seule vidéo de sortie. Vous pouvez également éditer la chronologie des vidéos d'entrée.
Pour chaque vidéo d'entrée, ajoutez un objet Input
au tableau inputs
.
Chaque objet Input
définit la clé et l'URI de la vidéo d'entrée associée. Vous pouvez ajouter un objet PreprocessingConfig
facultatif à un objet Input
pour recadrer la vidéo d'entrée, lui ajouter une marge, ou effectuer d'autres prétraitements. Le tableau inputs
n'est pas ordonné, Vous pouvez ajouter les vidéos d'entrée dans n'importe quel ordre.
Pour ajouter une vidéo d'entrée à la chronologie de la vidéo de sortie, ajoutez un objet EditAtom
au tableau editList
. Le tableau editList
est classé. La première entrée désignée dans ce tableau sera utilisée en premier dans la vidéo de sortie, puis la deuxième entrée est utilisée, etc. Vous identifiez une vidéo d'entrée à l'aide de sa clé.
Vous pouvez également désigner des startTimeOffset
et des endTimeOffset
pour couper la vidéo d'entrée. Ces champs sont facultatifs. Si vous ne spécifiez pas ces champs, la vidéo d'entrée entière est utilisée.
La configuration suivante concatène deux vidéos d'entrée en une seule vidéo de sortie.
"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"
}
],
Vous pouvez ajouter cette configuration à un modèle de tâche ou l'inclure dans une configuration de tâche ad hoc :
REST
Avant d'utiliser les données de requête, effectuez les remplacements suivants:
- PROJECT_ID : ID de votre projet Google Cloud répertorié dans les paramètres IAM.
- LOCATION : emplacement dans lequel votre tâche sera exécutée. Utilisez l'une des régions disponibles :
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 : nom du bucket Cloud Storage que vous avez créé.
- STORAGE_INPUT_VIDEO1 : nom d'une vidéo de votre bucket Cloud Storage que vous convertissez, par exemple
my-vid.mp4
. Ce champ doit tenir compte de tous les dossiers que vous avez créés dans le bucket (par exemple,input/my-vid.mp4
). Cette vidéo sera d'abord utilisée dans la timeline de sortie vidéo. - START_TIME_OFFSET1: heure de début, en secondes fractionnelles (par exemple,
0.0
), par rapport à la première chronologie de la vidéo d'entrée. Utilisez ce champ pour couper le contenu depuis le début de la vidéo. - END_TIME_OFFSET1: heure de fin, en secondes fractionnelles (par exemple,
8.1
), par rapport à la première chronologie de la vidéo d'entrée. Utilisez ce champ pour couper le contenu à la fin de la vidéo. - STORAGE_INPUT_VIDEO2 : nom d'une vidéo de votre bucket Cloud Storage que vous convertissez, par exemple
my-vid.mp4
. Ce champ doit tenir compte de tous les dossiers que vous avez créés dans le bucket (par exemple,input/my-vid.mp4
). Cette vidéo sera utilisée en deuxième position dans la timeline de sortie vidéo. - START_TIME_OFFSET2: heure de début, en secondes fractionnelles (par exemple,
3.5
), par rapport à la deuxième chronologie de la vidéo d'entrée. Utilisez ce champ pour couper le contenu depuis le début de la deuxième vidéo. - END_TIME_OFFSET2: heure de fin, en fractions de secondes (par exemple,
15
), par rapport à la deuxième timeline de la vidéo d'entrée. Utilisez ce champ pour couper le contenu à partir de la fin de la deuxième vidéo. - STORAGE_OUTPUT_FOLDER : nom du dossier Cloud Storage dans lequel vous souhaitez enregistrer les sorties vidéo encodées.
Corps JSON de la requête :
{ "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/" } } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud CLI
- Créez un fichier
request.json
qui définit les champs de la tâche. Effectuez les remplacements suivants pour la commandegcloud
:- LOCATION: emplacement d'exécution de votre tâche. Utilisez l'une des régions disponibles :
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 : nom du bucket Cloud Storage que vous avez créé.
- STORAGE_INPUT_VIDEO1 : nom d'une vidéo de votre bucket Cloud Storage que vous convertissez, par exemple
my-vid.mp4
. Ce champ doit tenir compte de tous les dossiers que vous avez créés dans le bucket (par exemple,input/my-vid.mp4
). Cette vidéo sera d'abord utilisée dans la timeline de sortie vidéo. - START_TIME_OFFSET1: heure de début, en secondes fractionnelles (par exemple,
0.0
), par rapport à la première chronologie de la vidéo d'entrée. Utilisez ce champ pour couper le contenu depuis le début de la vidéo. - END_TIME_OFFSET1: heure de fin, en secondes fractionnelles (par exemple,
8.1
), par rapport à la première chronologie de la vidéo d'entrée. Utilisez ce champ pour couper le contenu à la fin de la vidéo. - STORAGE_INPUT_VIDEO2 : nom d'une vidéo de votre bucket Cloud Storage que vous convertissez, par exemple
my-vid.mp4
. Ce champ doit tenir compte de tous les dossiers que vous avez créés dans le bucket (par exemple,input/my-vid.mp4
). Cette vidéo sera utilisée en deuxième position dans la timeline de sortie vidéo. - START_TIME_OFFSET2: heure de début, en secondes fractionnelles (par exemple,
3.5
), par rapport à la deuxième chronologie de la vidéo d'entrée. Utilisez ce champ pour couper le contenu depuis le début de la deuxième vidéo. - END_TIME_OFFSET2: heure de fin, en fractions de secondes (par exemple,
15
), par rapport à la deuxième timeline de la vidéo d'entrée. Utilisez ce champ pour couper le contenu à partir de la fin de la deuxième vidéo. - STORAGE_OUTPUT_FOLDER : nom du dossier Cloud Storage dans lequel vous souhaitez enregistrer les sorties vidéo encodées.
{ "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: emplacement d'exécution de votre tâche. Utilisez l'une des régions disponibles :
- Exécutez la commande suivante :
gcloud transcoder jobs create --location=LOCATION --file="request.json"
Un résultat semblable aux lignes suivantes doit s'afficher :{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
C#
Avant d'essayer cet exemple, suivez les instructions de configuration de C# dans le guide de démarrage rapide de l'API Transcoder à l'aide de bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Transcoder C#.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration de Go dans le guide de démarrage rapide de l'API Transcoder à l'aide de bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Transcoder Go.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration de Java dans le guide de démarrage rapide de l'API Transcoder à l'aide de bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Transcoder Java.
Node.js
Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js dans le guide de démarrage rapide de l'API Transcoder à l'aide de bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Transcoder Node.js.
PHP
Avant d'essayer cet exemple, suivez les instructions de configuration de PHP dans le guide de démarrage rapide de l'API Transcoder à l'aide de bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Transcoder PHP.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration de Python dans le guide de démarrage rapide de l'API Transcoder à l'aide de bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Transcoder Python.
Ruby
Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby dans le guide de démarrage rapide de l'API Transcoder à l'aide de bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Transcoder Ruby.
Exemple
Prenons les exemples de vidéos suivants :
Les deux vidéos ont une structure semblable en trois parties :
- Visionnage d'un film ou d'un jeu sur un appareil mobile
- Visionnage du même contenu sur grand écran
- Affichage d'une brève annonce publicitaire pour le produit
Par exemple, vous pouvez concaténer ces deux vidéos de sorte que la vidéo de sortie présente les parties un et deux de la première vidéo, puis les parties deux et trois de la deuxième vidéo. Vous pouvez effectuer cette concaténation à l'aide des décalages temporels suivants :
- ForBiggerEscapes.mp4
startTimeOffset
:0s
endTimeOffset
:8.1s
- ForBiggerJoyrides.mp4
startTimeOffset
:3.5s
endTimeOffset
:15s
Utilisez le code précédent ainsi que ces deux vidéos et les décalages temporels ci-dessus pour voir une vidéo de résultats riche en rebondissements.