Auf dieser Seite wird erläutert, wie Sie mehrere Eingabevideos zu einem einzigen Ausgabevideo kombinieren. Du kannst auch die Zeitachsen der Eingabevideos kürzen.
Fügen Sie für jedes Eingabevideo ein Input
-Objekt in das Array inputs
ein.
Jedes Input
-Objekt definiert den Schlüssel und den URI für das zugehörige Eingabevideo. Sie können einem Input
-Objekt ein optionales PreprocessingConfig
-Objekt hinzufügen, um es zuzuschneiden oder mit einer Auffüllung zu versehen oder eine andere Vorverarbeitung für das Eingabevideo durchzuführen. Das Array inputs
ist nicht geordnet. Sie können Eingabevideos in beliebiger Reihenfolge hinzufügen.
Wenn Sie der Zeitachse des Ausgabevideos ein Eingabevideo hinzufügen möchten, fügen Sie dem Array editList
ein EditAtom
-Objekt hinzu. Das Array editList
ist geordnet. Die erste in diesem Array festgelegte Eingabe wird zuerst im Ausgabevideo verwendet, die zweite Eingabe wird als Nächstes verwendet usw. Ein Eingabevideo wird anhand seines Schlüssels identifiziert.
Sie können auch startTimeOffset
und endTimeOffset
angeben, um das Eingabevideo zuzuschneiden. Diese Felder sind optional. Wenn Sie diese Felder nicht angeben, wird das gesamte Eingabevideo verwendet.
Die folgende Konfiguration verkettet zwei Eingabevideos zu einem einzigen Ausgabevideo.
"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"
}
],
Sie können diese Konfiguration einer Jobvorlage hinzufügen oder sie in eine Ad-hoc-Jobkonfiguration einbinden:
REST
Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:
- 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:
us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
asia-east1
asia-south1
asia-southeast1
europe-west1
europe-west2
europe-west4
- STORAGE_BUCKET_NAME: Der Name des Cloud Storage-Buckets, den Sie erstellt haben.
- STORAGE_INPUT_VIDEO1: Der Name eines 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
). Dieses Video wird zuerst in der Zeitachse des Ausgabevideos verwendet. - START_TIME_OFFSET1: Die Startzeit in Sekunden, z. B.
0.0
, relativ zur Zeitachse des ersten Eingabevideos. Mit diesem Feld kannst du Inhalte vom Anfang des Videos aus schneiden. - END_TIME_OFFSET1: Die Endzeit in Sekunden, z. B.
8.1
, relativ zur Zeitachse des ersten Eingabevideos. Mit diesem Feld kannst du die Inhalte am Ende des Videos zuschneiden. - STORAGE_INPUT_VIDEO2: Der Name eines 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
). Dieses Video wird in der Ausgabevideozeit an zweiter Stelle verwendet. - START_TIME_OFFSET2: Die Startzeit in Sekunden, z. B.
3.5
, relativ zur Zeitachse des zweiten Eingabevideos. Mit diesem Feld kannst du den Inhalt vom Anfang des zweiten Videos aus kürzen. - END_TIME_OFFSET2: Die Endzeit in Sekunden, z. B.
15
, relativ zur Zeitachse des zweiten Eingabevideos. Mit diesem Feld kannst du die Inhalte am Ende des zweiten Videos zuschneiden. - STORAGE_OUTPUT_FOLDER: Der Name des Cloud Storage-Ordners, in dem Sie die codierten Videoausgaben speichern möchten.
JSON-Text anfordern:
{ "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/" } } }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud CLI
- Erstellen Sie eine
request.json
-Datei, in der die Jobfelder definiert werden. Ersetzen Sie den Befehlgcloud
durch die folgenden Werte:- LOCATION: Der Standort, an dem der Job ausgeführt wird. Verwenden Sie eine der unterstützten Regionen:
us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
asia-east1
asia-south1
asia-southeast1
europe-west1
europe-west2
europe-west4
- STORAGE_BUCKET_NAME: Der Name des Cloud Storage-Buckets, den Sie erstellt haben.
- STORAGE_INPUT_VIDEO1: Der Name eines 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
). Dieses Video wird zuerst in der Zeitachse des Ausgabevideos verwendet. - START_TIME_OFFSET1: Die Startzeit in Sekunden, z. B.
0.0
, relativ zur Zeitachse des ersten Eingabevideos. Mit diesem Feld kannst du Inhalte vom Anfang des Videos aus schneiden. - END_TIME_OFFSET1: Die Endzeit in Sekunden, z. B.
8.1
, relativ zur Zeitachse des ersten Eingabevideos. Mit diesem Feld kannst du die Inhalte am Ende des Videos zuschneiden. - STORAGE_INPUT_VIDEO2: Der Name eines 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
). Dieses Video wird in der Ausgabevideozeit an zweiter Stelle verwendet. - START_TIME_OFFSET2: Die Startzeit in Sekunden, z. B.
3.5
, relativ zur Zeitachse des zweiten Eingabevideos. Mit diesem Feld kannst du den Inhalt vom Anfang des zweiten Videos aus kürzen. - END_TIME_OFFSET2: Die Endzeit in Sekunden, z. B.
15
, relativ zur Zeitachse des zweiten Eingabevideos. Mit diesem Feld kannst du die Inhalte am Ende des zweiten Videos zuschneiden. - STORAGE_OUTPUT_FOLDER: Der Name des Cloud Storage-Ordners, in dem Sie die codierten Videoausgaben speichern möchten.
{ "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: Der Standort, an dem der Job ausgeführt wird. Verwenden Sie eine der unterstützten Regionen:
- Führen Sie dazu diesen Befehl aus:
gcloud transcoder jobs create --location=LOCATION --file="request.json"
Die Antwort sieht ungefähr so aus:{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
C#
Folgen Sie der Einrichtungsanleitung für C# in der Transcoder API-Kurzanleitung unter Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API C# API.
Go
Folgen Sie der Einrichtungsanleitung für Go in der Transcoder API-Kurzanleitung unter Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API Go API.
Java
Folgen Sie der Einrichtungsanleitung für Java in der Transcoder API-Kurzanleitung unter Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API Java API.
Node.js
Folgen Sie der Einrichtungsanleitung für Node.js in der Transcoder API-Kurzanleitung unter Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API Node.js API.
PHP
Folgen Sie der Einrichtungsanleitung für PHP in der Transcoder API-Kurzanleitung unter Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API PHP API.
Python
Folgen Sie der Einrichtungsanleitung für Python in der Transcoder API-Kurzanleitung unter Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API Python API.
Ruby
Folgen Sie der Einrichtungsanleitung für Ruby in der Transcoder API-Kurzanleitung unter Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Transcoder API Ruby API.
Beispiel
Sehen Sie sich die folgenden Beispielvideos an:
Beide Videos ähneln sich insofern, als sie aus drei Teilen bestehen:
- Filme oder Spiele auf einem Mobilgerät ansehen
- Inhalte auf einem großen Bildschirm ansehen
- Kurze Werbung für das Produkt anzeigen
Sie können diese beiden Videos zum Beispiel verketten, sodass im ersten Video die ersten beiden Teile des ersten Videos und im zweiten die beiden zweiten Teile zu sehen sind. Sie können diese Verkettung mit den folgenden Zeitverschiebungen erreichen:
- ForBiggerEscapes.mp4
startTimeOffset
:0s
endTimeOffset
:8.1s
- ForBiggerJoyrides.mp4
startTimeOffset
:3.5s
endTimeOffset
:15s
Verwende den vorherigen Code zusammen mit diesen beiden Videos und ihren Zeitverschiebungen, um ein aktionsreiches Ergebnisvideo zu sehen.