Cette page explique comment ajouter des sous-titres à une sortie vidéo.
Les sous-titres (ou sous-titres codés) sont la transcription visuelle du contenu audio d'une vidéo. Fermée sont généralement dans la même langue que l'audio et incluent un arrière-plan les sons et les changements d'enceintes.
Les sous-titres sont généralement utilisés pour traduire les dialogues d'une vidéo en dans une autre langue. En général, les sous-titres n'incluent pas de bruits de fond et les changements d'enceintes.
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
Consultez les entrées et sorties compatibles pour connaître les formats de fichiers de sous-titres d'entrée acceptés. Un exemple de fichier vidéo Des exemples de fichiers de sous-titres d'entrée sont fournis afin que vous puissiez tester votre configuration.
Utilisez les informations des sections suivantes pour ajouter des sous-titres à une tâche. configuration. Dans cette page, nous partons du principe que vous connaissez JobConfig. Pour plus d'informations sur la création de jobs de transcodage, consultez 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 : suivantes:
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.Ajouter un autre
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.Ajouter un
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ésigner unstartTimeOffset
et unendTimeOffset
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é. Il est ajouté à tous des vidéos de sortie (car il n'y a qu'une seule timeline de sortie).Utilisez les
mapping
danstextStream
de configuration pour référencer 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 du job.Ajoutez un objet
Input
au tableauinputs
qui définit la clé et l'URI de la vidéo d'entrée associée.Ajouter un autre
Input
qui définit l'URI du fichier de sous-titres d'entrée.Ajoutez un
editList
à la configuration. Ce tableau permet d'ajouter les entrées au de la timeline de la vidéo de sortie.Ajouter un
EditAtom
au tableaueditList
qui référence les objets dansinputs
tableau par clé. Vous pouvez désigner unstartTimeOffset
et unendTimeOffset
pour couper la vidéo d'entrée.Ajoutez les légendes aux conteneurs de sortie en ajoutant une
textStream
à l'objetelementaryStreams
tableau.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 l'anglais et une 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 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 de un autre fichier de sous-titres dans votre bucket Cloud Storage, tel quesubtitles-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 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 de un autre fichier de sous-titres dans votre bucket Cloud Storage, tel quesubtitles-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 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 de Node.js dans le Guide de démarrage rapide de l'API Transcoder avec bibliothèques clientes. Pour en savoir plus, consultez les API Transcoder Node.js documentation de référence.
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 les API Transcoder Python documentation de référence.
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.
Lire la vidéo
Pour afficher les sous-titres sous Windows, lancez la lecture de la vidéo dans l'application Films et l'application TV. Marque 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. Veillez à 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 représentant des points de suspension en bas à droite du lecteur, puis activez-le. 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 d'entrée de sous-titres pour les sous-titres
- Exemple de fichier d'entrée de sous-titres pour les sous-titres en anglais
- Exemple de fichier d'entrée de sous-titres 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.