Cette page explique comment ajouter des sous-titres codés et des sous-titres à une vidéo de sortie.
Les sous-titres (ou sous-titres codés) sont la transcription visuelle du contenu audio d'une vidéo. Les sous-titres sont généralement dans la même langue que l'audio et incluent les sons de fond et les changements de locuteur.
Les sous-titres sont généralement utilisés pour traduire les dialogues d'une vidéo dans une autre langue. Les sous-titres n'incluent généralement pas les sons de fond ni les changements de locuteur.
Sur cette page, le terme fichier de sous-titres d'entrée désigne un fichier texte contenant des sous-titres ou des sous-titres codés. Vous fournissez ce fichier en entrée à une tâche.
Ajouter des sous-titres à une configuration de tâche
Pour connaître les formats de fichiers de sous-titres d'entrée compatibles, consultez les entrées et sorties compatibles. Un exemple de fichier vidéo et des exemples de fichiers de sous-titres d'entrée sont fournis pour vous permettre de tester votre configuration.
Utilisez les informations fournies dans les sections suivantes pour ajouter des sous-titres à une configuration de tâche. Sur cette page, nous partons du principe que vous connaissez les bases d'un JobConfig. Pour en savoir plus sur la création de tâches de transcodage, consultez la section Créer et gérer des tâches.
Ajouter des sous-titres
Pour créer une tâche qui intègre des sous-titres dans le conteneur de fichier vidéo de sortie, procédez comme suit:
Ajoutez un tableau
inputs
au début de la configuration de la tâche.Ajoutez un objet
Input
au tableauinputs
qui définit la clé et l'URI de la vidéo d'entrée associée.Ajoutez un autre objet
Input
qui inclut le chemin d'accès au fichier de sous-titres d'entrée.Ajoutez un tableau
editList
à la configuration de la tâche. Ce tableau permet d'ajouter des entrées à la chronologie de la vidéo de sortie.Ajoutez un objet
EditAtom
au tableaueditList
. Cet objetEditAtom
doit faire référence aux clés de la vidéo d'entrée et des sous-titres que vous avez ajoutés dans le tableauinputs
. Vous pouvez définir des élémentsstartTimeOffset
etendTimeOffset
pour couper la vidéo d'entrée.Ajoutez les sous-titres aux conteneurs de sortie en ajoutant un objet
textStream
au tableauelementaryStreams
. Un seul flux de texte intégré est accepté et il est ajouté à toutes les vidéos de sortie (car il n'y a qu'une seule chronologie de sortie).Utilisez le tableau
mapping
dans l'objet de configurationtextStream
pour faire référence à la clé d'objetEditAtom
.
L'exemple de configuration suivant intègre des sous-titres CEA-608 dans une vidéo.
Vous pouvez ajouter cette configuration à un modèle de tâche ou l'inclure dans une configuration de tâche ad hoc :
Ajouter des sous-titres
Pour créer une tâche qui produit des fichiers de sous-titres multilingues lus à partir d'un fichier manifeste, procédez comme suit:
Ajoutez un tableau
inputs
à la configuration de la tâche.Ajoutez un objet
Input
au tableauinputs
qui définit la clé et l'URI de la vidéo d'entrée associée.Ajoutez un autre objet
Input
qui définit l'URI du fichier de sous-titres d'entrée.Ajoutez un tableau
editList
à la configuration. Ce tableau permet d'ajouter les entrées à la chronologie de la vidéo de sortie.Ajoutez un objet
EditAtom
au tableaueditList
qui fait référence aux objets du tableauinputs
par clé. Vous pouvez définir des élémentsstartTimeOffset
etendTimeOffset
pour couper la vidéo d'entrée.Ajoutez les sous-titres aux conteneurs de sortie en ajoutant un objet
textStream
au tableauelementaryStreams
.Pour le fichier de sous-titres autonome, spécifiez le conteneur dans le tableau
muxStream
. Consultez les objets avec les cléstext-vtt-en
ettext-vtt-es
dans la configuration suivante. Pour les sous-titres intégrés, vous n'avez besoin que du flux élémentaire.
La configuration suivante génère plusieurs fichiers WebVTT, un pour les sous-titres en anglais et un pour les sous-titres en espagnol. Les sous-titres DASH dans les fichiers WebVTT sont créés au format de conteneur fMP4.
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 ci-dessous, 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.Afficher les emplacementsus-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
STORAGE_BUCKET_NAME
: nom du bucket Cloud Storage que vous avez créé.STORAGE_INPUT_VIDEO
: 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
).STORAGE_SUBTITLES_FILE1
: nom du fichier de sous-titres dans votre bucket Cloud Storage, par exemplesubtitles-en.srt
pour les sous-titres en anglais. Ce champ doit tenir compte des dossiers créés dans le bucket (par exemple,input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: nom d'un autre fichier de sous-titres dans votre bucket Cloud Storage, par exemplesubtitles-es.srt
pour les sous-titres en espagnol. Ce champ doit tenir compte des dossiers créés dans le bucket (par exemple,input/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: nom du dossier de sortie de votre bucket 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
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
LOCATION
: emplacement dans lequel votre tâche sera exécutée. Utilisez l'une des régions disponibles.Afficher les emplacementsus-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
STORAGE_BUCKET_NAME
: nom du bucket Cloud Storage que vous avez créé.STORAGE_INPUT_VIDEO
: 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
).STORAGE_SUBTITLES_FILE1
: nom du fichier de sous-titres dans votre bucket Cloud Storage, par exemplesubtitles-en.srt
pour les sous-titres en anglais. Ce champ doit tenir compte des dossiers créés dans le bucket (par exemple,input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: nom d'un autre fichier de sous-titres dans votre bucket Cloud Storage, par exemplesubtitles-es.srt
pour les sous-titres en espagnol. Ce champ doit tenir compte des dossiers créés dans le bucket (par exemple,input/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: nom du dossier de sortie de votre bucket Cloud Storage dans lequel vous souhaitez enregistrer les sorties vidéo encodées.
Enregistrez le code suivant dans un fichier nommé request.json
:
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" }, { "key": "subtitle_input_en", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_SUBTITLES_FILE1" }, { "key": "subtitle_input_es", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_SUBTITLES_FILE2" } ], "editList": [ { "key": "atom0", "inputs": [ "input0", "subtitle_input_en", "subtitle_input_es" ] } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } }, { "key": "vtt-stream-en", "textStream": { "codec": "webvtt", "languageCode": "en-US", "displayName": "English", "mapping": [ { "atomKey": "atom0", "inputKey": "subtitle_input_en" } ] } }, { "key": "vtt-stream-es", "textStream": { "codec": "webvtt", "languageCode": "es-ES", "displayName": "Spanish", "mapping": [ { "atomKey": "atom0", "inputKey": "subtitle_input_es" } ] } } ], "muxStreams": [ { "key": "sd-hls-fmp4", "container": "fmp4", "elementaryStreams": [ "video-stream0" ] }, { "key": "audio-hls-fmp4", "container": "fmp4", "elementaryStreams": [ "audio-stream0" ] }, { "key": "text-vtt-en", "container": "vtt", "elementaryStreams": [ "vtt-stream-en" ], "segmentSettings": { "segmentDuration": "6s", "individualSegments": true } }, { "key": "text-vtt-es", "container": "vtt", "elementaryStreams": [ "vtt-stream-es" ], "segmentSettings": { "segmentDuration": "6s", "individualSegments": true } } ], "manifests": [ { "fileName": "manifest.m3u8", "type": "HLS", "muxStreams": [ "sd-hls-fmp4", "audio-hls-fmp4", "text-vtt-en", "text-vtt-es" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" } } }
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud transcoder jobs create --location=LOCATION --file=request.json
Windows (PowerShell)
gcloud transcoder jobs create --location=LOCATION --file=request.json
Windows (cmd.exe)
gcloud transcoder jobs create --location=LOCATION --file=request.json
Vous devriez obtenir un résultat semblable à celui-ci :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go 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 pour Go.
Pour vous authentifier auprès de l'API Transcoder, configurez les 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 en savoir plus, consultez la documentation de référence sur l'API Transcoder pour Java.
Pour vous authentifier auprès de l'API Transcoder, configurez les 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 pour Node.js 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 pour Node.js.
Pour vous authentifier auprès de l'API Transcoder, configurez les 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 pour Python 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 pour Python.
Pour vous authentifier auprès de l'API Transcoder, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Lire la vidéo
Pour afficher les sous-titres sur Windows, lancez la vidéo dans l'application Films et TV. Veillez à sélectionner la piste de sous-titres.
Pour afficher les sous-titres sur macOS ou Linux, vous pouvez lire la vidéo dans Shaka Player. Assurez-vous d'activer les sous-titres dans le menu Sous-titres.
Pour lire le fichier multimédia généré dans Shaka Player, procédez comme suit :
- Rendez le bucket Cloud Storage que vous avez créé publiquement lisible.
- Pour activer le partage des ressources entre origines multiples (CORS) sur un bucket Cloud Storage, procédez comme suit :
- Créez un fichier JSON contenant les informations suivantes :
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
- Exécutez la commande suivante en remplaçant JSON_FILE_NAME par le nom du fichier JSON que vous avez créé à l'étape précédente :
gcloud storage buckets update gs://STORAGE_BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Créez un fichier JSON contenant les informations suivantes :
- Choisissez l'un des fichiers MP4 ou manifestes générés par la tâche de transcodage dans le bucket Cloud Storage. Cliquez sur Copier l'URL dans la colonne Accès public du fichier.
- Accédez à Shaka Player, un lecteur de diffusion en direct en ligne.
- Cliquez sur Contenu personnalisé dans la barre de navigation supérieure.
- Cliquez sur le bouton +.
Collez l'URL publique du fichier dans la zone URL du fichier manifeste.
Saisissez un nom dans la zone Nom.
Cliquez sur Enregistrer.
Cliquez sur Play (Jouer).
Sélectionnez le bouton avec trois points en bas à droite du lecteur et activez les sous-titres.
Exemple
Vous pouvez utiliser les fichiers suivants pour une tâche de test:
- Exemple de vidéo d'entrée
- Exemple de fichier de sous-titres pour les sous-titres
- Exemple de fichier de sous-titres d'entrée pour les sous-titres en anglais
- Exemple de fichier de sous-titres d'entrée pour les sous-titres en espagnol
Le fichier de sous-titres d'entrée ne doit pas contenir de lignes vides entre les lignes de texte.