本頁說明如何使用 Transcoder API,在輸出內容中加入自動生成的字幕。這項功能可根據音軌生成字幕,即使不知道音軌語言也沒問題,還能將字幕翻譯成各種語言。
如要設定這項功能,請在工作設定的 inputs
陣列中,使用每個項目的 attributes
欄位提供輸入資產的其他中繼資料。這個欄位可協助 Transcoder API 瞭解音軌中的語言,以及如何處理這些語言。
事前準備
本頁假設您已完成「事前準備」中的步驟。
限制
這項功能含有以下限制:
支援的地區
這項功能支援 us-central1
和 europe-west4
。
輸出格式
自動生成的字幕必須以 WebVTT (webvtt
) 格式輸出。
編輯清單縫合
這項功能不支援使用 editList
拼接多個影片片段。
設定範例
以下範例說明如何針對各種用途設定自動字幕。
使用者提供的對應
這個方法可直接控制要使用哪個輸入軌生成字幕。
將輸入軌明確對應至輸出字幕串流
本範例說明如何使用每個 textStream
中的 mapping
欄位,精確控管用於生成英法文子標題的輸入音軌。
{
"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/"
}
}
}
由於明確的對應關係,vtt-stream-english
串流是從 input0
的音軌 1 生成。vtt-stream-french
串流是從 input0
的第 2 個音軌產生。
Transcoder API 的預設對應
這些範例會根據 inputs
中提供的 attributes
,透過 API 推斷要使用的音軌。設定的其他部分 (muxStreams
、manifests
、output
) 應與完整範例類似。
單一音軌,且語言已知
如果輸入影片只有一個音軌 (例如音軌 1),且你知道音軌是英文 (en-US
),就可以生成英文字幕。你也可以要求提供其他語言的字幕,例如法文 (fr-FR
),API 會翻譯英文轉錄稿。
{
"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"
}
}
]
}
由於語言代碼相符,系統會直接從定義的音軌 1 生成英文字幕串流 (vtt-stream-english
)。法文字幕串流 (vtt-stream-french
) 的製作方式是先轉錄音軌 1 的英文音訊,然後將轉錄結果翻譯成法文。
已知語言的多個音軌
如果輸入檔案包含多個不同語言的音軌 (例如例如,音軌 1 為法文,音軌 2 為英文,這時你就可以為每個音軌指定語言。
{
"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"
}
}
]
}
在這個設定中,系統會根據 attributes
中提供的語言代碼,從音軌 2 生成 vtt-stream-english
字幕,並從音軌 1 生成 vtt-stream-french
字幕。
輸出語言與任何輸入音軌不符
如果要求的字幕語言與任何已定義的音軌語言不符,API 會使用第一個可用的音軌進行轉錄和翻譯。
{
"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"
}
}
]
}
由於未定義北印度語音軌,系統會先轉錄第一個音軌 (音軌 1,法文),然後將轉錄內容翻譯成北印度語,藉此生成 vtt-stream-hindi
字幕。
混合語言的單一音軌
如果單一音軌包含多種語言,請在 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"
}
}
]
}
這三種 VTT 串流 (英文、法文和印地文) 都是從音軌 1 生成。API 會轉錄混合語言的音訊,並以 languageCode
欄位指定的單一語言提供每個輸出串流。
API 會轉錄音訊,並可能在第 1 軌中偵測到多種語言。針對每個輸出 textStream
,系統只會以該串流 languageCode
欄位指定的語言生成字幕。
偵測特定音軌的語言
如果特定曲目的語言不明,請使用 detectLanguages": true
。
{
"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 會先偵測音軌 1 中的語言。接著生成英文字幕,如果偵測到的語言不是英文,還會提供翻譯。
偵測預設音軌的語言
如果語言和音軌編號都不明,API 預設會使用第一個可用的音軌。
{
"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 會分析第一個音軌來偵測語言,然後生成英文字幕,並視需要翻譯。
指定預設音軌的語言
如果您知道語言,但不知道特定音軌編號,API 會假設第一個可用的音軌符合提供的語言。
{
"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"
}
}
]
}
系統會根據輸入內容的第一個音軌生成英文字幕 (vtt-stream-english
),並假設該音軌為英文。
常見問題
如果我在同一個 trackDefinition
中同時指定 languages
和 detectLanguages
,會發生什麼情況?
在單一 trackDefinition
中,您只能指定 languages
欄位或 detectLanguages
欄位。在同一個定義中提供這兩者是無效的設定,會導致錯誤。
如果有多個 trackDefinitions
符合 textStream
的語言,API 會選擇使用哪個音軌?
如果 inputs.attributes.trackDefinitions
陣列中有多個 trackDefinitions
可能與所要求 textStream
的 languageCode
相符,API 會使用陣列順序中第一個相符 trackDefinition
的音軌。只有在 textStream
中未使用明確的 mapping
欄位時,才適用這項規則。