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 un startTimeOffset et un endTimeOffset pour couper la vidéo d'entrée. Ces champs sont facultatifs. Si vous ne spécifiez pas ces champs, l'intégralité de la vidéo d'entrée 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 Google Cloud projet répertorié dans les paramètres IAM.LOCATION: emplacement dans lequel votre tâche sera exécutée. Utilisez l'une des régions compatibles.Afficher les emplacementsus-central1us-west1us-west2us-east1us-east4southamerica-east1northamerica-northeast1asia-east1asia-northeast1asia-northeast3asia-south1asia-southeast1australia-southeast1europe-west1europe-west2europe-west4me-west1me-central1me-central2
STORAGE_BUCKET_NAME: : nom du bucket Cloud Storage que vous avez créé.STORAGE_INPUT_VIDEO1: Nom d'une vidéo figurant dans votre bucket Cloud Storage et que vous transcodez, par exemplemy-vid.mp4. Ce champ doit tenir compte des dossiers créés dans le bucket (par exemple,input/my-vid.mp4). Cette vidéo sera utilisée en premier dans la chronologie des vidéos de sortie.START_TIME_OFFSET1: heure de début, en fractions de seconde (par exemple,0.0), par rapport à la chronologie de la première vidéo d'entrée. Utilisez ce champ pour couper le contenu figurant au début de la vidéo.END_TIME_OFFSET1: heure de fin, en fractions de seconde (par exemple,8.1), par rapport à la chronologie de la première vidéo d'entrée. Utilisez ce champ pour couper le contenu figurant à la fin de la vidéo.STORAGE_INPUT_VIDEO2: nom d'une vidéo figurant dans votre bucket Cloud Storage et que vous transcodez, par exemplemy-vid.mp4. Ce champ doit tenir compte des dossiers créés dans le bucket (par exemple,input/my-vid.mp4). Cette vidéo sera utilisée en deuxième dans la chronologie des vidéos de sortie.START_TIME_OFFSET2: heure de début, en fractions de seconde (par exemple,3.5), par rapport à la chronologie de la deuxième vidéo d'entrée. Utilisez ce champ pour couper le contenu figurant au début de la deuxième vidéo.END_TIME_OFFSET2: heure de fin, en fractions de seconde (par exemple,15), par rapport à la chronologie de la deuxième vidéo d'entrée. Utilisez ce champ pour couper le contenu figurant à 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.
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
- Créez un fichier
request.jsonqui définit les champs de la tâche. Effectuez les remplacements suivants pour lagcloudcommande :- LOCATION : emplacement dans lequel votre
tâche sera exécutée. Utilisez l'une des régions compatibles.
Afficher les emplacements
us-central1us-west1us-west2us-east1us-east4southamerica-east1northamerica-northeast1asia-east1asia-northeast1asia-northeast3asia-south1asia-southeast1australia-southeast1europe-west1europe-west2europe-west4me-west1me-central1me-central2
- STORAGE_BUCKET_NAME : nom du bucket Cloud Storage que vous avez créé.
- STORAGE_INPUT_VIDEO1 : nom d'une vidéo figurant dans votre bucket Cloud Storage et que vous transcodez, par exemple
my-vid.mp4. Ce champ doit tenir compte des dossiers créés dans le bucket (par exemple,input/my-vid.mp4). Cette vidéo sera utilisée en premier dans la chronologie des vidéos de sortie. - START_TIME_OFFSET1 : heure de début, en fractions de seconde (par exemple,
0.0), par rapport à la chronologie de la première vidéo d'entrée. Utilisez ce champ pour couper le contenu figurant au début de la vidéo. - END_TIME_OFFSET1 : heure de fin, en fractions de seconde (par exemple,
8.1), par rapport à la chronologie de la première vidéo d'entrée. Utilisez ce champ pour couper le contenu figurant à la fin de la vidéo. - STORAGE_INPUT_VIDEO2 : nom d'une vidéo figurant dans votre bucket Cloud Storage et que vous transcodez, par exemple
my-vid.mp4. Ce champ doit tenir compte des dossiers créés dans le bucket (par exemple,input/my-vid.mp4). Cette vidéo sera utilisée en deuxième dans la chronologie des vidéos de sortie. - START_TIME_OFFSET2 : heure de début, en fractions de seconde (par exemple,
3.5), par rapport à la chronologie de la deuxième vidéo d'entrée. Utilisez ce champ pour couper le contenu figurant au début de la deuxième vidéo. - END_TIME_OFFSET2 : heure de fin, en fractions de seconde (par exemple,
15), par rapport à la chronologie de la deuxième vidéo d'entrée. Utilisez ce champ pour couper le contenu figurant à 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 dans lequel votre
tâche sera exécutée. Utilisez l'une des régions compatibles.
- Exécutez la commande suivante :
Vous devriez voir une réponse semblable à la suivante :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#
Avant d'essayer cet exemple, suivez les instructions de configuration C# du guide de démarrage rapide de l'API Transcoder à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l' API Transcoder C# API.
Pour vous authentifier auprès de l'API Transcoder, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration Go du guide de démarrage rapide de l'API Transcoder à l'aide des bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence sur l'API TranscoderGo API.
Pour vous authentifier auprès de l'API Transcoder, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de l'API Transcoder à l'aide des bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence sur l'API Transcoder Java API.
Pour vous authentifier auprès de l'API Transcoder, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Avant d'essayer cet exemple, suivez les instructions de configuration Node.js du guide de démarrage rapide de l'API Transcoder à l'aide des bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence sur l'API Node.js Transcoder.
Pour vous authentifier auprès de l'API Transcoder, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
PHP
Avant d'essayer cet exemple, suivez les instructions de configuration PHP du guide de démarrage rapide de l'API Transcoder à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l' API Transcoder PHP API.
Pour vous authentifier auprès de l'API Transcoder, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration Python du guide de démarrage rapide de l'API Transcoder à l'aide des bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence sur l'API TranscoderPython API.
Pour vous authentifier auprès de l'API Transcoder, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Ruby
Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby du guide de démarrage rapide de l'API Transcoder à l'aide des bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence sur l'API TranscoderRuby API.
Pour vous authentifier auprès de l'API Transcoder, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
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
- Afficher un bref contenu 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:0sendTimeOffset:8.1s
- ForBiggerJoyrides.mp4
startTimeOffset:3.5sendTimeOffset: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.