Auf dieser Seite wird erläutert, wie Sie einem ausgegebenen Video Untertitel hinzufügen.
Untertitel (oder einfach Untertitel) sind die visuelle Darstellung der Audiospur eines Videos. Untertitel sind in der Regel in derselben Sprache wie der Ton und enthalten Hintergrundgeräusche und Sprecherwechsel.
Untertitel werden in der Regel verwendet, um Dialoge in Videos in einer anderen Sprache. Untertitel enthalten normalerweise keine Hintergrundgeräusche und Sprecherwechsel.
Auf dieser Seite bezieht sich der Begriff Eingabeuntertiteldatei auf eine Textdatei, die oder Untertitel. Sie stellen diese Datei als Eingabe für einen Job bereit.
Jobkonfigurationen Untertitel hinzufügen
Informationen zu den unterstützten Eingabeformaten für Untertiteldateien findest du unter Unterstützte Eingabe- und Ausgabeformate. Eine Beispielvideodatei und Beispieldateien für Eingabeuntertitel werden dir zum Testen deiner Konfiguration zur Verfügung gestellt.
In den folgenden Abschnitten erfährst du, wie du einer Jobkonfiguration Untertitel hinzufügen kannst. Auf dieser Seite wird davon ausgegangen, dass Sie mit einer einfachen JobConfig vertraut sind. Weitere Informationen zum Erstellen von Transcodierungsjobs finden Sie unter Jobs erstellen und verwalten
Untertitel hinzufügen
Um einen Job zu erstellen, der Untertitel in den Container der Videodatei für die Ausgabe einbettet, führen Sie die Folgendes:
Fügen Sie am Anfang der Jobkonfiguration ein
inputs
-Array hinzu.Füge dem Array
inputs
einInput
-Objekt hinzu, das den Schlüssel und den URI für das zugehörige Eingabevideo definiert.Füge ein weiteres
Input
-Objekt hinzu, das den Pfad zur Eingabedatei mit den Untertiteln enthält.Fügen Sie der Jobkonfiguration ein
editList
-Array hinzu. Mit diesem Array werden der Zeitleiste für die Videoausgabe.EditAtom
hinzufügen -Objekt zum ArrayeditList
hinzu. DiesesEditAtom
-Objekt muss auf die Schlüssel für das Eingabevideo und die Untertitel verweisen, die du iminputs
-Array hinzugefügt hast. Sie könnenstartTimeOffset
undendTimeOffset
festlegen, um das Eingabevideo zu kürzen.Fügen Sie die Untertitel zu den Ausgabecontainern hinzu, indem Sie einen
textStream
das ObjektelementaryStreams
Array. Es wird nur ein eingebetteter Textstream unterstützt, der allen Ausgabevideos hinzugefügt wird (da es nur eine Ausgabezeitleiste gibt).Verwenden Sie die Methode
mapping
im FeldtextStream
Konfigurationsobjekts auf dasEditAtom
Objekt .
Mit der folgenden Beispielkonfiguration werden CEA-608-Untertitel in ein Video eingebettet.
Sie können diese Konfiguration einer Jobvorlage hinzufügen oder sie in eine Ad-hoc-Jobkonfiguration einbinden:
Untertitel hinzufügen
So erstellst du einen Job, der mehrsprachige Untertiteldateien erstellt, die über ein Manifest wiedergegeben werden:
Fügen Sie der Jobkonfiguration ein
inputs
-Array hinzu.Füge dem Array
inputs
einInput
-Objekt hinzu, das den Schlüssel und den URI für das zugehörige Eingabevideo definiert.Weiteren
Input
hinzufügen -Objekt, das den URI für die Eingabeuntertiteldatei definiert.Hinzufügen eines
editList
-Array mit der Konfiguration hinzu. Mit diesem Array werden die Eingaben der Video-Zeitleiste des Ausgabevideos hinzugefügt.EditAtom
hinzufügen -Objekt zum ArrayeditList
, das auf die Objekte iminputs
verweist. nach Schlüssel sortiert. Sie könnenstartTimeOffset
undendTimeOffset
für das Eingabevideo zuschneiden.Fügen Sie die Untertitel zu den Ausgabecontainern hinzu, indem Sie einen
textStream
das ObjektelementaryStreams
Array.Gib für die eigenständige Untertiteldatei den Container in der
muxStream
-Array; sehen Sie im Folgenden die Objekte mit den Schlüsselntext-vtt-en
undtext-vtt-es
. Konfiguration. Für eingebettete Untertitel benötigst du nur die Elementarstream.
Mit der folgenden Konfiguration werden mehrere WebVTT-Dateien generiert, eine für Englisch und einen für spanische Untertitel. DASH-Untertitel in WebVTT-Dateien werden im fMP4-Containerformat erstellt.
Sie können diese Konfiguration einer Jobvorlage hinzufügen oder sie in eine Ad-hoc-Jobkonfiguration einbinden:
REST
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_ID
: Ihre Google Cloud-Projekt-ID, die unter IAM-Einstellungen aufgeführt ist.LOCATION
: Der Standort, an dem der Job ausgeführt werden soll. Verwenden Sie in einer der unterstützten RegionenStandorte anzeigenus-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
: Der Name des Cloud Storage-Buckets, den Sie erstellt haben.STORAGE_INPUT_VIDEO
: Der Name des Videos in Ihrem Cloud Storage-Bucket, den Sie transcodieren, z. B.my-vid.mp4
. In diesem Feld sollten alle Ordner berücksichtigt werden, die Sie im Bucket erstellt haben (z. B.input/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: Der Name der Untertiteldatei in deinem Cloud Storage-Bucket, z. B.subtitles-en.srt
für englischsprachige Untertitel. In diesem Feld sollten alle Ordner berücksichtigt werden, die Sie im Bucket erstellt haben (z. B.input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: Der Name einer anderen Untertiteldatei in deinem Cloud Storage-Bucket, z. B.subtitles-es.srt
für Untertitel auf Spanisch. In diesem Feld sollten alle Ordner berücksichtigt werden, die Sie im Bucket erstellt haben (z. B.input/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: Der Name des Ausgabeordners in deinem Cloud Storage-Bucket, in dem die codierten Videoausgaben gespeichert werden sollen.
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
LOCATION
: Der Standort, an dem der Job ausgeführt werden soll. Verwenden Sie in einer der unterstützten RegionenStandorte anzeigenus-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
: Der Name des Cloud Storage-Buckets, den Sie erstellt haben.STORAGE_INPUT_VIDEO
: Der Name des Videos in Ihrem Cloud Storage-Bucket, den Sie transcodieren, z. B.my-vid.mp4
. In diesem Feld sollten alle Ordner berücksichtigt werden, die Sie im Bucket erstellt haben (z. B.input/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: Der Name der Untertiteldatei in deinem Cloud Storage-Bucket, z. B.subtitles-en.srt
für englischsprachige Untertitel. In diesem Feld sollten alle Ordner berücksichtigt werden, die Sie im Bucket erstellt haben (z. B.input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: Der Name einer anderen Untertiteldatei in deinem Cloud Storage-Bucket, z. B.subtitles-es.srt
für Untertitel auf Spanisch. In diesem Feld sollten alle Ordner berücksichtigt werden, die Sie im Bucket erstellt haben (z. B.input/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: Der Name des im Cloud Storage-Bucket, in dem Sie die codierten Videoausgaben speichern möchten.
Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen 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/" } } }
Führen Sie folgenden Befehl aus:
Linux, macOS oder 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
Sie sollten eine Antwort ähnlich der folgenden erhalten:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
Go
Folgen Sie der Einrichtungsanleitung für Go in der Transcoder API-Kurzanleitung: Clientbibliotheken verwenden, bevor Sie dieses Beispiel anwenden. Weitere Informationen finden Sie in der Transcoder API Go API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei der Transcoder API zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Java
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Java in der Transcoder API-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API Java API.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei der Transcoder API zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Node.js in der Transcoder API-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API Node.js API.
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei der Transcoder API zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Folgen Sie der Einrichtungsanleitung für Python in der Transcoder API-Kurzanleitung: Clientbibliotheken verwenden, bevor Sie dieses Beispiel anwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API Python API.
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei der Transcoder API zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Spielen Sie Ihr Video ab.
Wenn du dir die Untertitel unter Windows ansehen möchtest, spiele das Video in der Play Filme & Serien App ab. Achte darauf, den Untertitel-Track auszuwählen.
Unter macOS oder Linux kannst du die Untertitel im Shaka Player ansehen. Aktiviere Untertitel im Menü Untertitel.
Führen Sie die folgenden Schritte aus, um die generierte Mediadatei in Shaka Player abzuspielen:
- Machen Sie den von Ihnen erstellten Cloud Storage-Bucket öffentlich.
- So aktivieren Sie Cross-Origin Resource Sharing (CORS) für einen Cloud Storage-Bucket:
- Erstellen Sie eine JSON-Datei, die Folgendes enthält:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
- Führen Sie den folgenden Befehl aus, nachdem Sie JSON_FILE_NAME durch den Namen der im vorherigen Schritt erstellten JSON-Datei ersetzt haben:
gcloud storage buckets update gs://STORAGE_BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Erstellen Sie eine JSON-Datei, die Folgendes enthält:
- Wählen Sie eine der MP4- oder Manifestdateien aus, die vom Transcodierungsjob im Cloud Storage-Bucket generiert wurden. Klicken Sie in der Spalte Öffentlicher Zugriff der Datei auf URL kopieren.
- Rufen Sie Shaka Player, ein Online-Livestream-Player, auf.
- Klicken Sie in der Navigationsleiste oben auf Benutzerdefinierte Inhalte.
- Klicken Sie auf die Schaltfläche +.
Fügen Sie die öffentliche URL der Datei in das Feld URL manifestieren ein.
Geben Sie einen Namen in das Feld Name ein.
Klicken Sie auf Speichern.
Klicken Sie auf Wiedergabe.
Klicke unten rechts im Player auf die Auslassungspunkte und aktiviere Bildunterschriften.
Beispiel
Sie können die folgenden Dateien für einen Testjob verwenden:
- Beispiel für Eingabevideo
- Beispieldatei für Untertitel
- Beispieleingabedatei für englische Untertitel
- Beispieleingabedatei für spanische Untertitel
Die eingegebene Untertiteldatei darf keine Leerzeilen zwischen den Textzeilen enthalten.