全部產品
Search
文件中心

Intelligent Media Services:多字幕轉碼打包最佳實務

更新時間:Aug 29, 2025

本文檔指導開發人員通過阿里雲IMS實現多字幕轉碼與打包,快速產生適配多終端播放的多字幕音視頻。

轉碼打包流程

打包檔案結構樣本

#EXTM3U

# 音頻流定義(多語言)
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="中文-音頻",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="zh",URI="audio/chinese/chinese.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English-Audio",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="audio/english/english.m3u8"

# 視頻流定義(多碼率)
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=900000,CODECS="avc1.640020",RESOLUTION=720x1280,AUDIO="audio",SUBTITLES="subtitle"
video/720p/720p.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000,CODECS="avc1.640020",RESOLUTION=360x640,AUDIO="audio",SUBTITLES="subtitle"
video/360p/360p.m3u8

# 字幕流定義(多語言)
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitle",NAME="中文-字幕",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="zh",URI="subtitle/chinese/chinese.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitle",NAME="English-Subtitle",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="subtitle/english/english.m3u8"

前提條件

已開通智能媒體服務。請參見開通服務

配置準備

IMS基礎配置

  • 儲存配置:將OSS Bucket綁定至IMS服務,詳情請參見配置儲存地址

  • 回調配置:配置HTTP回調或MNS回調以接收任務狀態通知,關於回調方式和回調事件的基本資料請參見回調事件概述

轉碼模板配置

配置流程

需求樣本

編碼協議:H264/H265

視頻解析度:360P/540P/720P/1080P

音頻:HE-AAC 64Kbps(預設配置)。

字幕:M3U8(VTT)。

配置樣本

以四種視頻清晰度為例,按照下表建立轉碼模板,建立模板操作請參見建立轉碼模板

說明

如需進行窄帶高清轉碼,請參照表格建立相應模板,隨後提交工單,由阿里雲在後台進行升級配置。

H264

轉碼模板

編碼協議

封裝格式

其他配置

視頻-360P

H264

m3u8(.ts)

  • 解析度(長邊固定,短邊自適應): 640*

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-540P

H264

m3u8(.ts)

  • 解析度(長邊固定,短邊自適應): 960*

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-720P

H264

m3u8(.ts)

  • 解析度(長邊固定,短邊自適應): 1280*

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-1080P

H264

m3u8(.ts)

  • 解析度(長邊固定,短邊自適應): 1920*

  • 切片時間長度:5S

  • 其他按實際需求配置

H265

說明
  • 優先選擇:建議使用fmp4封裝格式,這是APPLE的標準協議,且對Safari瀏覽器友好。

  • 替代方案:ts封裝格式也可行,但不相容Safari。

  • 控制台限制:fmp4封裝格式在控制台中無法自主建立,建議先按m3u8(ts)封裝格式進行建立,隨後由阿里雲在後台進行配置升級。

轉碼模板

編碼協議

封裝格式

其他配置

視頻-360P

H265

m3u8(.fmp4)

  • 解析度(長邊固定,短邊自適應): 640*

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-540P

H265

m3u8(.fmp4)

  • 解析度(長邊固定,短邊自適應): 960*

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-720P

H265

m3u8(.fmp4)

  • 解析度(長邊固定,短邊自適應): 1280*

  • 切片時間長度:5S

  • 其他按實際需求配置

視頻-1080P

H265

m3u8(.fmp4)

  • 解析度(長邊固定,短邊自適應): 1920*

  • 切片時間長度:5S

  • 其他按實際需求配置

多碼率轉碼打包任務

發起多碼率任務

調用SubmitMediaConvertJob介面,提交視頻或音頻檔案的轉碼任務到智能媒體服務。

使用 OverrideParams 設定字幕流

當前無法在轉碼模板中自訂設定字幕資訊,需要在提交任務時使用OverrideParams顯示設定字幕資訊。

參數

類型

說明

Subtitles

Array of Subtitle

字幕流設定。

Subtitle

參數

類型

說明

Codec

String

字幕流編碼格式。HLS只支援vtt格式。

Config說明(HlsGroupConfig)

參數

類型

說明

Type

string

指定資料流類型:

取值:

  • video:視頻流,處理時將僅保留與視頻相關的設定。

  • audio:音頻流,處理時將僅保留與音頻相關的設定。

  • hybrid:混合流,處理時將保留與音頻和視頻相關的設定。

Bandwidth

string

設定頻寬(可選),預設使用碼率(bps)。

當Type為 video 和 hybrid 時生效。

AudioGroup

string

該路視頻流引用的音頻組。當Type為 video 生效。

SubtitleGroup

string

該路視頻流引用的字幕組。當Type為 video 和 hybrid 時生效。

Name

string

該輸出資料流在 HLS manifest 中的 NAME 屬性。當Type為 audio 或 subtitle 時,此項為必填

Group

string

該輸出資料流在 HLS Manifest 中的 GROUP_ID 屬性。該屬性在 Type 為 audio 和 subtitle 時生效。

預設與 Type 的取值相同。

Language

string

該輸出資料流在 HLS manifest 中的 LANGUAGE 屬性,當Type為 audio 和 subtitle 時生效,需遵循 RFC 5646 標準。

Default

boolean

是否設為預設流。當Type為 audio 時生效。

AutoSelect

boolean

是否自動選擇流。當Type為 audio 時生效。

Forced

boolean

是否強制顯示。當Type為 audio 時生效。

情境1:轉碼並產生多碼率打包檔案

{
    "Config": {
        "Inputs": [
            {
                "Name": "video",
                "InputFile": {
                    "Type": "OSS",
                    "Url": "https://<Bucket>.<OSS外網Endpoint>/<視頻1中文>"
                }
            },
            {
                "Name": "EnglishAudio",
                "InputFile": {
                    "Type": "OSS",
                    "Url": "https://<Bucket>.<OSS外網Endpoint>/<音頻頻1英文>"
                }
            },
            {
                "Name": "ChineseSubtitle",
                "InputFile": {
                    "Type": "OSS",
                    "Url": "https://<Bucket>.<OSS外網Endpoint>/<字幕1中文>"
                }
            },
            {
                "Name": "EnglishSubtitle",
                "InputFile": {
                    "Type": "OSS",
                    "Url": "https://<Bucket>.<OSS外網Endpoint>/<字幕1英文>"
                }
            }
        ],
        "OutputGroups": [
            {
                "Name": "Hls",
                "GroupConfig": {
                    "Type": "Hls",
                    "OutputFileBase": {
                        "Type": "OSS",
                        "Url": "https://<Bucket>.<外網Endpoint>/<URI>/"
                    },
                    "ManifestName": "<m3u8filename>"
                },
                "Outputs": [
                    {
                        "Name": "720P",
                        "OutputFileName": "video/720p/720p",
                        "TemplateId": "視頻-720P",
                        "HlsGroupConfig": {
                            "Type": "Video"
                        }
                    },
                    {
                        "Name": "360P",
                        "OutputFileName": "video/360p/360p",
                        "TemplateId": "視頻-360P",
                        "HlsGroupConfig": {
                            "Type": "Video"
                        }
                    },
                    {
                        "OutputFileName": "audio/chinese/chinese",
                        "TemplateId": "音頻-64Kbps",
                        "HlsGroupConfig": {
                            "Type": "Audio",
                            "Name": "ChineseAudio",
                            "Language": "zh",
                            "Autoselect": "TRUE",
                            "Default": "TRUE"
                        }
                    },
                    {
                        "InputRef": "ChineseSubtitle",
                        "OutputFileName": "subtitle/chinese/chinese",
                        "TemplateId": "打包任務中任意模板ID",
                        "OverrideParams": {
                            "Subtitles": [
                                {
                                    "Codec": "vtt"
                                }
                            ]
                        },
                        "HlsGroupConfig": {
                            "Type": "Subtitle",
                            "Name": "ChineseSubtitle",
                            "Language": "zh",
                            "Autoselect": "TRUE",
                            "Default": "TRUE"
                        }
                    },
                    {
                        "InputRef": "EnglishAudio",
                        "OutputFileName": "audio/english/english",
                        "TemplateId": "音頻-64Kbps",
                        "HlsGroupConfig": {
                            "Type": "Audio",
                            "Name": "EnglishAudio",
                            "Language": "en",
                            "Autoselect": "TRUE",
                            "Default": "FALSE"
                        }
                    },
                    {
                        "InputRef": "EnglishSubtitle",
                        "OutputFileName": "subtitle/english/english",
                        "TemplateId": "打包任務中任意模板ID",
                        "OverrideParams": {
                            "Subtitles": [
                                {
                                    "Codec": "vtt"
                                }
                            ]
                        },
                        "HlsGroupConfig": {
                            "Type": "Subtitle",
                            "Name": "EnglishSubtitle",
                            "Language": "en",
                            "Autoselect": "TRUE",
                            "Default": "FALSE"
                        }
                    }
                ]
            }
        ]
    }
}

查詢任務結果

調用GetMediaConvertJob介面擷取轉碼任務詳情。

回調事件通知

事件類型:EventType:MediaConvertComplete

配置方式:控制台尚未開發該事件的選擇功能,使用者可通過SetEventCallback介面進行配置。

關鍵字段說明

參數名稱

類型

必選

描述

Name

String

主任務名稱。

JobId

String

任務id。

Status

String

任務結果中,"Success"表示成功。如果在子任務中有任一任務成功,則整體結果視為成功。

TriggerSource

String

觸發來源,API指的是API的提交操作。

FinishTime

String

完成時間,格式應與EventTime相同。

UserData

string

提交任務時傳入的自訂資料。

樣本

{
	"FinishTime": "2025-05-09T08:03:21Z",
	"JobId": "your-job-id",
	"Status": "Success",
	"TriggerSource": "IceWorkflow",
	"UserData": "{\"ImsSrc\":\"Workflow\",\"TaskId\":\"e89a955d88ca47f0b9b79c562e5c622f\"}"
}