Halaman ini menjelaskan cara menambahkan subtitel yang dibuat secara otomatis ke output menggunakan Transcoder API. Fitur ini memungkinkan Anda membuat subtitel dari trek audio, meskipun bahasanya tidak diketahui, dan menerjemahkan subtitel ke berbagai bahasa.
Anda mengonfigurasi fitur ini dengan memberikan metadata tambahan tentang aset input menggunakan kolom attributes
dalam setiap item di array inputs
dalam konfigurasi tugas. Kolom ini membantu Transcoder API memahami bahasa yang ada di trek audio Anda dan cara memprosesnya.
Sebelum memulai
Halaman ini mengasumsikan bahwa Anda telah menyelesaikan langkah-langkah di bagian Sebelum memulai.
Batasan
Fitur ini memiliki batasan sebagai berikut:
Lokasi yang didukung
Fitur ini didukung di us-central1
dan europe-west4
.
Format output
Output untuk subtitel yang dibuat secara otomatis harus dalam format WebVTT (webvtt
).
Mengedit penyambungan daftar
Fitur ini tidak mendukung penggunaan editList
untuk menggabungkan beberapa klip video.
Contoh Konfigurasi
Contoh berikut menunjukkan cara mengonfigurasi subtitel otomatis untuk berbagai kasus penggunaan.
Pemetaan yang Disediakan Pengguna
Metode ini memberikan kontrol langsung dengan menentukan secara tepat jalur input mana yang akan digunakan untuk membuat subtitel.
Memetakan trek input secara eksplisit ke aliran subtitle output
Contoh ini menunjukkan cara menggunakan kolom mapping
dalam setiap textStream
untuk mengontrol secara tepat trek audio input mana yang digunakan untuk membuat subtitel dalam bahasa Inggris dan Prancis.
{
"config": {
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": [
"en-US"
]
},
{
"inputTrack": 2,
"languages": [
"fr-FR"
]
}
]
}
}
],
"editList": [
{
"key": "atom0",
"inputs": [
"input0"
]
}
],
"elementaryStreams": [
{
"key": "video-stream0",
"videoStream": {
"h264": {
"frameRate": 30,
"widthPixels": 1280,
"heightPixels": 720,
"bitrateBps": 3200000,
"frameRateConversionStrategy": "DOWNSAMPLE"
}
}
},
{
"key": "audio-stream0",
"audioStream": {
"codec": "aac",
"bitrateBps": 64000,
"sampleRateHertz": 48000,
"channelCount": 2,
"channelLayout": [
"fl",
"fr"
]
}
},
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English",
"mapping": [
{
"atomKey": "atom0",
"inputKey": "input0",
"inputTrack": 1
}
]
}
},
{
"key": "vtt-stream-french",
"textStream": {
"codec": "webvtt",
"languageCode": "fr-FR",
"displayName": "French",
"mapping": [
{
"atomKey": "atom0",
"inputKey": "input0",
"inputTrack": 2
}
]
}
}
],
"muxStreams": [
{
"container": "fmp4",
"elementaryStreams": [
"video-stream0"
],
"fileName": "video-only.m4s",
"key": "hd-video-only",
"segmentSettings": {
"segmentDuration": "6s"
}
},
{
"container": "fmp4",
"elementaryStreams": [
"audio-stream0"
],
"fileName": "audio-only.m4s",
"key": "audio-only",
"segmentSettings": {
"segmentDuration": "6s"
}
},
{
"key": "text-vtt-english",
"container": "vtt",
"elementaryStreams": [
"vtt-stream-english"
],
"segmentSettings": {
"individualSegments": true,
"segmentDuration": "6s"
}
},
{
"key": "text-vtt-french",
"container": "vtt",
"elementaryStreams": [
"vtt-stream-french"
],
"segmentSettings": {
"individualSegments": true,
"segmentDuration": "6s"
}
}
],
"manifests": [
{
"fileName": "manifest.m3u8",
"muxStreams": [
"hd-video-only",
"audio-only",
"text-vtt-english",
"text-vtt-french"
],
"type": "HLS"
}
],
"output": {
"uri": "gs://your-bucket/output/"
}
}
}
Aliran vtt-stream-english
dihasilkan dari trek 1 input0
karena pemetaan eksplisit. Aliran vtt-stream-french
dihasilkan dari trek 2 input0
.
Pemetaan Default oleh Transcoder API
Contoh ini mengandalkan API untuk menyimpulkan trek audio mana yang akan digunakan berdasarkan attributes
yang diberikan dalam inputs
. Bagian konfigurasi lainnya (muxStreams
, manifests
, output
) diasumsikan serupa dengan contoh lengkap.
Satu trek audio dengan bahasa yang diketahui
Jika video input Anda memiliki satu trek audio (misalnya, trek 1) dan Anda tahu bahwa trek tersebut dalam bahasa Inggris (en-US
), Anda dapat membuat subtitel bahasa Inggris. Anda juga dapat meminta subtitel dalam bahasa lain, seperti Prancis (fr-FR
), dan API akan menerjemahkan transkripsi bahasa Inggris.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": [
"en-US"
]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
},
{
"key": "vtt-stream-french",
"textStream": {
"codec": "webvtt",
"languageCode": "fr-FR",
"displayName": "French"
}
}
]
}
Aliran subtitel bahasa Inggris (vtt-stream-english
) dibuat langsung dari trek audio 1 yang ditentukan, karena kode bahasanya cocok. Aliran subtitel bahasa Prancis (vtt-stream-french
) dibuat dengan terlebih dahulu mentranskripsikan audio bahasa Inggris dari trek 1, lalu menerjemahkan teks yang dihasilkan ke dalam bahasa Prancis.
Beberapa trek audio dengan bahasa yang diketahui
Jika file input Anda berisi beberapa trek audio dengan bahasa yang berbeda (misalnya, Prancis di trek 1, Inggris di trek 2), Anda dapat menentukan bahasa untuk setiap trek.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": ["fr-FR"]
},
{
"inputTrack": 2,
"languages": ["en-US"]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
},
{
"key": "vtt-stream-french",
"textStream": {
"codec": "webvtt",
"languageCode": "fr-FR",
"displayName": "French"
}
}
]
}
Dalam konfigurasi ini, subtitel vtt-stream-english
dihasilkan dari trek audio 2, dan subtitel vtt-stream-french
dihasilkan dari trek audio 1, berdasarkan kode bahasa yang diberikan di attributes
.
Bahasa output tidak cocok dengan trek audio input mana pun
Jika bahasa subtitle yang diminta tidak cocok dengan bahasa trek yang ditentukan, API akan menggunakan trek audio pertama yang tersedia untuk transkripsi dan terjemahan.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": ["fr-FR"]
},
{
"inputTrack": 2,
"languages": ["en-US"]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-hindi",
"textStream": {
"codec": "webvtt",
"languageCode": "hi-IN",
"displayName": "Hindi"
}
}
]
}
Karena tidak ada trek audio Hindi yang ditentukan, subtitel vtt-stream-hindi
dibuat dengan mentranskripsikan trek audio pertama (trek 1, Prancis), lalu menerjemahkan transkripsi tersebut ke dalam bahasa Hindi.
Satu trek audio dengan campuran bahasa
Jika satu trek audio berisi beberapa bahasa, cantumkan semuanya dalam array languages
.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": ["en-US", "fr-FR"]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
},
{
"key": "vtt-stream-french",
"textStream": {
"codec": "webvtt",
"languageCode": "fr-FR",
"displayName": "French"
}
},
{
"key": "vtt-stream-hindi",
"textStream": {
"codec": "webvtt",
"languageCode": "hi-IN",
"displayName": "Hindi"
}
}
]
}
Ketiga aliran VTT (Inggris, Prancis, dan Hindi) dibuat dari trek audio 1. API akan mentranskripsikan audio campuran bahasa dan menyediakan setiap aliran output dalam satu bahasa yang ditentukan oleh kolom languageCode
.
API mentranskripsikan audio, yang berpotensi mendeteksi beberapa bahasa dalam trek 1. Untuk setiap output textStream
, subtitle akan dibuat hanya dalam bahasa yang ditentukan oleh kolom languageCode
di streaming tersebut.
Deteksi bahasa pada trek audio tertentu
Gunakan detectLanguages": true
jika bahasa trek tertentu tidak diketahui.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"detectLanguages": true
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
}
]
}
API ini pertama-tama mendeteksi bahasa yang ada di trek audio 1. Kemudian, subtitel bahasa Inggris akan dibuat, termasuk terjemahan jika bahasa yang terdeteksi bukan bahasa Inggris.
Deteksi bahasa di trek audio default
Jika bahasa dan nomor trek tidak diketahui, API akan menggunakan trek audio pertama yang tersedia secara default.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"detectLanguages": true
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
}
]
}
API menganalisis trek audio pertama untuk mendeteksi bahasa, lalu membuat subtitel dalam bahasa Inggris, menerjemahkan jika perlu.
Menentukan bahasa untuk trek audio default
Jika Anda mengetahui bahasanya, tetapi tidak mengetahui nomor trek tertentu, API akan mengasumsikan bahwa trek audio pertama yang tersedia cocok dengan bahasa yang diberikan.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"languages": ["en-US"]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
}
]
}
Subtitel bahasa Inggris (vtt-stream-english
) dibuat dari trek audio pertama input, dengan asumsi bahwa trek ini dalam bahasa Inggris.
FAQ
Apa yang terjadi jika saya menentukan languages
dan detectLanguages
dalam trackDefinition
yang sama?
Anda hanya dapat menentukan salah satu dari kolom languages
atau kolom detectLanguages
dalam satu trackDefinition
. Menyediakan keduanya dalam definisi yang sama adalah konfigurasi yang tidak valid dan akan menghasilkan error.
Bagaimana cara API memilih trek audio yang akan digunakan jika beberapa trackDefinitions
cocok dengan bahasa textStream
?
Jika Anda memiliki beberapa trackDefinitions
dalam array inputs.attributes.trackDefinitions
yang berpotensi cocok dengan languageCode
dari textStream
yang diminta, API akan menggunakan trek audio dari trackDefinition
yang cocok pertama dalam urutan array. Hal ini hanya berlaku jika Anda tidak menggunakan kolom mapping
eksplisit dalam textStream
.