Auf dieser Seite wird beschrieben, wie du einem Ausgabevideo Untertitel hinzufügen kannst.
Untertitel (oder einfach Captions) sind die visuelle Darstellung des Audioinhalts in einem Video. Untertitel sind in der Regel in derselben Sprache wie der Ton und enthalten Hintergrundgeräusche und Sprecherwechsel.
Untertitel werden in der Regel verwendet, um den Dialog eines Videos in eine andere Sprache zu übersetzen. Untertitel enthalten in der Regel keine Hintergrundgeräusche und keine Sprecherwechsel.
Auf dieser Seite wird der Begriff Untertiteldatei für eine Textdatei verwendet, die Untertitel enthält. Sie geben diese Datei als Eingabe für einen Job an.
Jobkonfigurationen Untertitel hinzufügen
Informationen zu den unterstützten Eingabeformaten für Untertiteldateien findest du unter Unterstützte Eingabe- und Ausgabeformate. Zum Testen der Konfiguration stehen eine Beispielvideodatei und Beispieldateien für Untertitel zur Verfügung.
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 findest du unter Jobs erstellen und verwalten.
Untertitel hinzufügen
So erstellst du einen Job, bei dem Untertitel in den Container der Ausgabevideodatei eingebettet werden:
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 Eingaben zur Zeitleiste des Ausgabevideos hinzugefügt.Fügen Sie dem
editList
-Array einEditAtom
-Objekt 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üge den Ausgabecontainern die Untertitel hinzu, indem du dem
elementaryStreams
-Array eintextStream
-Objekt hinzufügst. Es wird nur ein eingebetteter Textstream unterstützt, der allen Ausgabevideos hinzugefügt wird, da es nur eine Ausgabezeitleiste gibt.Verwenden Sie das
mapping
-Array im KonfigurationsobjekttextStream
, um auf den ObjektschlüsselEditAtom
zu verweisen.
In 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.Füge ein weiteres
Input
-Objekt hinzu, das den URI für die Eingabedatei mit Untertiteln definiert.Fügen Sie der Konfiguration ein
editList
-Array hinzu. Mit diesem Array werden die Eingaben der Video-Zeitleiste des Ausgabevideos hinzugefügt.Fügen Sie dem
editList
-Array einEditAtom
-Objekt hinzu, das per Schlüssel auf die Objekte iminputs
-Array verweist. Sie könnenstartTimeOffset
undendTimeOffset
festlegen, um das Eingabevideo zu kürzen.Füge den Ausgabecontainern die Untertitel hinzu, indem du dem
elementaryStreams
-Array eintextStream
-Objekt hinzufügst.Geben Sie für die eigenständige Untertiteldatei den Container im Array
muxStream
an. Siehe Objekte mit den Schlüsselntext-vtt-en
undtext-vtt-es
in der folgenden Konfiguration. Für eingebettete Untertitel ist nur der Elementarstream erforderlich.
Bei der folgenden Konfiguration werden mehrere WebVTT-Dateien generiert, eine für englische und eine 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 eine der unterstützten Regionen.Standorte 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 eine der unterstützten Regionen.Standorte 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.
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 Referenzdokumentation zur Transcoder API Go 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.
Java
Folgen Sie der Einrichtungsanleitung für Java in der Transcoder API-Kurzanleitung: Clientbibliotheken verwenden, bevor Sie dieses Beispiel anwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API Java 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.
Node.js
Folgen Sie der Einrichtungsanleitung für Node.js in der Transcoder API-Kurzanleitung: Clientbibliotheken verwenden, bevor Sie dieses Beispiel anwenden. 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.
Wähle im Player rechts unten das Dreipunkt-Menü aus und aktiviere die Untertitel.
Beispiel
Sie können die folgenden Dateien für einen Testjob verwenden:
- Beispielvideo für die Eingabe
- Beispieldatei für Untertitel
- Beispiel für eine Eingabedatei mit Untertiteln auf Englisch
- Beispieldatei für Untertitel auf Spanisch
Die Eingabedatei für Untertitel darf keine Leerzeilen zwischen Textzeilen enthalten.