本頁說明如何在輸出影片中加入隱藏式輔助字幕和一般字幕。
隱藏式輔助字幕 (或簡稱字幕) 是以文字呈現影片的語音內容。隱藏式輔助字幕通常與音訊語言相同,並包含背景音效和說話者變化。
字幕通常用於將影片對白翻譯成其他語言。字幕通常不會顯示背景音效和說話者變更。
本頁面使用「輸入字幕檔」一詞,指內含隱藏式輔助字幕或字幕的文字檔。您會將這個檔案提供給工作做為輸入內容。
在工作設定中新增字幕
如要瞭解支援的輸入字幕檔案格式,請參閱支援的輸入和輸出。我們提供範例影片檔和範例輸入字幕檔,供您測試設定。
請使用下列各節中的資訊,在工作設定中新增說明文字和字幕。本頁面假設您熟悉基本的 JobConfig。如要進一步瞭解如何建立轉碼工作,請參閱建立及管理工作。
新增字幕
如要建立工作,將字幕嵌入輸出影片檔案容器,請執行下列操作:
在工作設定開頭新增
inputs
陣列。將
Input
物件新增至inputs
陣列,定義相關聯輸入影片的鍵和 URI。新增另一個
Input
物件,其中包含輸入字幕檔的路徑。在工作設定中新增
editList
陣列。這個陣列用於將輸入內容新增至輸出影片時間軸。將
EditAtom
物件新增至editList
陣列。這個EditAtom
物件必須參照您在inputs
陣列中新增的輸入影片和字幕金鑰。您可以指定startTimeOffset
和endTimeOffset
,藉此剪輯輸入影片。將
textStream
物件新增至elementaryStreams
陣列,即可將說明文字新增至輸出容器。系統僅支援一個內嵌文字串流,並會將其新增至所有輸出影片 (因為只有一個輸出時間軸)。在
textStream
設定物件中使用mapping
陣列,參照EditAtom
物件鍵。
以下範例設定會在影片中嵌入 CEA-608 隱藏式輔助字幕。
REST
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:IAM 設定中列出的 Google Cloud 專案 ID。LOCATION
:工作執行的位置。使用支援的地區。顯示地區us-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
me-west1
me-central1
me-central2
STORAGE_BUCKET_NAME
:您建立的 Cloud Storage bucket 名稱。STORAGE_INPUT_VIDEO
:Cloud Storage 值區中要轉碼的影片名稱,例如my-vid.mp4
。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/my-vid.mp4
)。STORAGE_CAPTIONS_FILE
:Cloud Storage 值區中字幕檔案的名稱,例如captions.srt
。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/captions.srt
)。STORAGE_OUTPUT_FOLDER
:Cloud Storage bucket 中輸出資料夾的名稱,您要將編碼後的影片輸出內容儲存至該資料夾。
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud
使用下列任何指令資料之前,請先替換以下項目:
LOCATION
:工作執行的位置。使用支援的地區。顯示地區us-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
me-west1
me-central1
me-central2
STORAGE_BUCKET_NAME
:您建立的 Cloud Storage bucket 名稱。STORAGE_INPUT_VIDEO
:Cloud Storage 值區中要轉碼的影片名稱,例如my-vid.mp4
。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/my-vid.mp4
)。STORAGE_CAPTIONS_FILE
:Cloud Storage 值區中字幕檔案的名稱,例如captions.srt
。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/captions.srt
)。STORAGE_OUTPUT_FOLDER
:Cloud Storage bucket 中輸出資料夾的名稱,您要將編碼後的影片輸出內容儲存至該資料夾。
將下列內容儲存到名為 request.json
的檔案:
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" }, { "key": "caption_input0", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_CAPTIONS_FILE" } ], "editList": [ { "key": "atom0", "inputs": [ "input0", "caption_input0" ] } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } }, { "key": "cea-stream0", "textStream": { "codec": "cea608", "mapping": [ { "atomKey": "atom0", "inputKey": "caption_input0", "inputTrack": 0 } ], "languageCode": "en-US", "displayName": "English" } } ], "muxStreams": [ { "key": "sd-hls", "container": "ts", "elementaryStreams": [ "video-stream0", "audio-stream0" ] }, { "key": "sd-dash", "container": "fmp4", "elementaryStreams": [ "video-stream0" ] }, { "key": "audio-dash", "container": "fmp4", "elementaryStreams": [ "audio-stream0" ] } ], "manifests": [ { "fileName": "manifest.m3u8", "type": "HLS", "muxStreams": [ "sd-hls" ] }, { "fileName": "manifest.mpd", "type": "DASH", "muxStreams": [ "sd-dash", "audio-dash" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" } } }
執行下列指令:
Linux、macOS 或 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
您應該會收到類似以下的回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
Go
在試用這個範例之前,請先按照Go使用用戶端程式庫的 Transcoder API 快速入門中的設定說明操作。詳情請參閱 Transcoder API Go API 參考說明文件。
如要向 Transcoder API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Java
在試用這個範例之前,請先按照Java使用用戶端程式庫的 Transcoder API 快速入門中的設定說明操作。詳情請參閱 Transcoder API Java API 參考說明文件。
如要向 Transcoder API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
在試用這個範例之前,請先按照Node.js使用用戶端程式庫的 Transcoder API 快速入門中的設定說明操作。詳情請參閱 Transcoder API Node.js API 參考說明文件。
如要向 Transcoder API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
在試用這個範例之前,請先按照Python使用用戶端程式庫的 Transcoder API 快速入門中的設定說明操作。詳情請參閱 Transcoder API Python API 參考說明文件。
如要向 Transcoder API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
新增字幕
如要建立工作,產生可從資訊清單播放的多語言字幕檔案,請按照下列步驟操作:
在工作設定中新增
inputs
陣列。將
Input
物件新增至inputs
陣列,定義相關聯輸入影片的鍵和 URI。新增另一個
Input
物件,定義輸入說明文字檔案的 URI。在設定中新增
editList
陣列。這個陣列用於將輸入內容新增至輸出影片時間軸。將
EditAtom
物件新增至editList
陣列,該陣列會依鍵參照inputs
陣列中的物件。您可以指定startTimeOffset
和endTimeOffset
,藉此剪輯輸入影片。將
textStream
物件新增至elementaryStreams
陣列,即可將說明文字新增至輸出容器。如果是獨立字幕檔,請在
muxStream
陣列中指定容器;請參閱下列設定中含有text-vtt-en
和text-vtt-es
鍵的物件。如要使用內嵌字幕,只需要基本串流即可。
下列設定會產生多個 WebVTT 檔案,分別是英文和西班牙文字幕。WebVTT 檔案中的 DASH 字幕是以 fMP4 容器格式建立。
REST
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:IAM 設定中列出的 Google Cloud 專案 ID。LOCATION
:工作執行的位置。使用支援的地區。顯示地區us-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
me-west1
me-central1
me-central2
STORAGE_BUCKET_NAME
:您建立的 Cloud Storage bucket 名稱。STORAGE_INPUT_VIDEO
:Cloud Storage 值區中要轉碼的影片名稱,例如my-vid.mp4
。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/my-vid.mp4
)。STORAGE_SUBTITLES_FILE1
:Cloud Storage 值區中的字幕檔案名稱,例如subtitles-en.srt
代表英文字幕。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/subtitles-en.srt
)。STORAGE_SUBTITLES_FILE2
:Cloud Storage 值區中其他字幕檔案的名稱,例如subtitles-es.srt
,代表西班牙文的字幕。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/subtitles-es.srt
)。STORAGE_OUTPUT_FOLDER
:Cloud Storage bucket 中輸出資料夾的名稱,您要將編碼後的影片輸出內容儲存至該資料夾。
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud
使用下列任何指令資料之前,請先替換以下項目:
LOCATION
:工作執行的位置。使用支援的地區。顯示地區us-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
me-west1
me-central1
me-central2
STORAGE_BUCKET_NAME
:您建立的 Cloud Storage bucket 名稱。STORAGE_INPUT_VIDEO
:Cloud Storage 值區中要轉碼的影片名稱,例如my-vid.mp4
。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/my-vid.mp4
)。STORAGE_SUBTITLES_FILE1
:Cloud Storage 值區中的字幕檔案名稱,例如subtitles-en.srt
代表英文字幕。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/subtitles-en.srt
)。STORAGE_SUBTITLES_FILE2
:Cloud Storage 值區中其他字幕檔案的名稱,例如subtitles-es.srt
,代表西班牙文的字幕。這個欄位應考量您在 bucket 中建立的任何資料夾 (例如input/subtitles-es.srt
)。STORAGE_OUTPUT_FOLDER
:Cloud Storage bucket 中輸出資料夾的名稱,您要將編碼後的影片輸出內容儲存至該資料夾。
將下列內容儲存到名為 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/" } } }
執行下列指令:
Linux、macOS 或 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
您應該會收到類似以下的回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
Go
在試用這個範例之前,請先按照Go使用用戶端程式庫的 Transcoder API 快速入門中的設定說明操作。詳情請參閱 Transcoder API Go API 參考說明文件。
如要向 Transcoder API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Java
在試用這個範例之前,請先按照Java使用用戶端程式庫的 Transcoder API 快速入門中的設定說明操作。詳情請參閱 Transcoder API Java API 參考說明文件。
如要向 Transcoder API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
在試用這個範例之前,請先按照Node.js使用用戶端程式庫的 Transcoder API 快速入門中的設定說明操作。詳情請參閱 Transcoder API Node.js API 參考說明文件。
如要向 Transcoder API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
在試用這個範例之前,請先按照Python使用用戶端程式庫的 Transcoder API 快速入門中的設定說明操作。詳情請參閱 Transcoder API Python API 參考說明文件。
如要向 Transcoder API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
播放影片
如要在 Windows 上查看隱藏式輔助字幕或字幕,請在「電影與電視」應用程式中播放影片,並選取字幕軌。
如要在 macOS 或 Linux 上查看字幕,請在 Shaka Player 中播放影片。請務必從「字幕」選單啟用隱藏式輔助字幕或字幕。
如要在 Shaka Player 中播放產生的媒體檔案,請完成下列步驟:
- 將您建立的 Cloud Storage bucket 設為可公開讀取。
- 如要在 Cloud Storage bucket 上啟用跨源資源共享 (CORS),請按照下列步驟操作:
- 建立包含下列內容的 JSON 檔案:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
- 執行下列指令,並將 JSON_FILE_NAME 替換為您在上一個步驟中建立的 JSON 檔案名稱:
gcloud storage buckets update gs://STORAGE_BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- 建立包含下列內容的 JSON 檔案:
- 從 Cloud Storage 值區中,挑選轉碼作業產生的其中一個 MP4 或資訊清單檔案。在該檔案的「Public access」(公開存取權) 資料欄中,按一下「Copy URL」(複製網址)。
- 前往 Shaka Player (這是一個線上即時串流播放器)。
- 按一下頂端導覽列中的「Custom Content」(自訂內容)。
- 按一下「+」按鈕。
將檔案的公開網址貼到「Manifest URL」(資訊清單網址) 方塊中。
在「Name」(名稱) 方塊中輸入名稱。
按一下「Save」(儲存)。
按一下「Play」(播放)。
選取播放器右下方的省略號按鈕,然後啟用字幕。
範例
您可以使用下列檔案進行測試工作:
輸入的說明文字檔案不得在文字行之間包含空白行。