このドキュメントでは、開発者が Alibaba Cloud Intelligent Media Services (IMS) を使用して、複数の字幕付きコンテンツをトランスコーディングおよびパッケージングする方法について説明します。これにより、さまざまなデバイスで再生するための複数字幕のオーディオおよびビデオファイルを迅速に生成できます。
トランスコーディングとパッケージングのフロー
パッケージ化されたファイル構造の例
#EXTM3U
# オーディオストリーム定義 (多言語)
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Chinese-Audio",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="Chinese-Subtitle",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"前提条件
Intelligent Media Services をアクティベートしていること。 詳細については、「サービスのアクティベート」をご参照ください。
準備
IMS の基本構成
ストレージ構成: OSS バケットを IMS サービスにアタッチします。 詳細については、「ストレージの場所の設定」をご参照ください。
コールバック構成: タスクステータス通知を受け入れるように HTTP または MNS コールバックを構成します。 コールバックメソッドとイベントの詳細については、「コールバックイベントの概要」をご参照ください。
トランスコーディングテンプレートの構成
構成フロー
要件の例
エンコードプロトコル: H264/H265
ビデオ解像度: 360p/540p/720p/1080p
オーディオ: HE-AAC 64 Kbps (デフォルト構成)
字幕: M3U8 (VTT)
構成例
この例では、次の表に基づいて 4 つのビデオ定義用のトランスコーディングテンプレートを作成します。 テンプレートを作成するには、「トランスコーディングテンプレートの作成」をご参照ください。
ナローバンド HD トランスコーディングを実行するには、表に基づいて対応するテンプレートを作成し、チケットを送信します。 Alibaba Cloud がバックエンドでアップグレード構成を実行します。
H264
トランスコーディングテンプレート | エンコードプロトコル | コンテナフォーマット | その他の構成 |
Video-360p | H264 | m3u8 (.ts) |
|
Video-540p | H264 | m3u8 (.ts) |
|
Video-720p | H264 | m3u8 (.ts) |
|
Video-1080p | H264 | m3u8 (.ts) |
|
H265
推奨オプション: fmp4 コンテナフォーマットを使用します。 これは Apple の標準プロトコルであり、Safari ブラウザと互換性があります。
代替案: ts コンテナフォーマットも使用可能ですが、Safari とは互換性がありません。
コンソールの制限: コンソールでは fmp4 コンテナフォーマットを作成できません。 まず、m3u8 (.ts) コンテナフォーマットでテンプレートを作成します。 その後、Alibaba Cloud がバックエンドで構成をアップグレードします。
トランスコーディングテンプレート | エンコードプロトコル | コンテナフォーマット | その他の構成 |
Video-360p | H265 | m3u8 (.fmp4) |
|
Video-540p | H265 | m3u8 (.fmp4) |
|
Video-720p | H265 | m3u8 (.fmp4) |
|
Video-1080p | H265 | m3u8 (.fmp4) |
|
マルチビットレートのトランスコーディングとパッケージングジョブ
マルチビットレートジョブの送信
SubmitMediaConvertJob 操作を呼び出して、ビデオまたはオーディオファイルのトランスコーディングジョブを IMS に送信します。
OverrideParams を使用して字幕ストリームを設定する
字幕情報はトランスコーディングテンプレートではカスタマイズできません。 ジョブを送信するときに OverrideParams を使用して明示的に設定する必要があります。
パラメーター | タイプ | 説明 |
Subtitles | Subtitle の配列 | 字幕ストリームの設定。 |
Subtitle
パラメーター | タイプ | 説明 |
Codec | String | 字幕ストリームのエンコード形式。 HTTP Live Streaming (HLS) は VTT フォーマットのみをサポートします。 |
構成の説明 (HlsGroupConfig)
パラメーター | タイプ | 説明 |
Type | string | データストリームタイプを指定します。 有効な値:
|
Bandwidth | string | 帯域幅を設定します。 このパラメーターはオプションです。 デフォルトでは、bps 単位のビットレートが使用されます。 このパラメーターは、Type が video または hybrid に設定されている場合に有効になります。 |
AudioGroup | string | このビデオ取り込みエンドポイントによって参照されるオーディオグループ。 このパラメーターは、Type が video に設定されている場合に有効になります。 |
SubtitleGroup | string | このビデオ取り込みエンドポイントによって参照される字幕グループ。 このパラメーターは、Type が video または hybrid に設定されている場合に有効になります。 |
Name | string | HLS マニフェスト内のこの出力ストリームの NAME プロパティ。 このパラメーターは、Type が audio または subtitle に設定されている場合に必須です。 |
Group | string | HLS マニフェスト内のこの出力ストリームの GROUP_ID プロパティ。 このパラメーターは、Type が audio または subtitle に設定されている場合に有効になります。 デフォルトでは、値は Type の値と同じです。 |
Language | string | HLS マニフェスト内のこの出力ストリームの 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 Public Endpoint>/<Video1_Chinese>"
}
},
{
"Name": "EnglishAudio",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS Public Endpoint>/<Audio1_English>"
}
},
{
"Name": "ChineseSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS Public Endpoint>/<Caption1_Chinese>"
}
},
{
"Name": "EnglishSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSS Public Endpoint>/<Caption1_English>"
}
}
],
"OutputGroups": [
{
"Name": "Hls",
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Url": "https://<Bucket>.<Public Endpoint>/<URI>/"
},
"ManifestName": "<m3u8filename>"
},
"Outputs": [
{
"Name": "720P",
"OutputFileName": "video/720p/720p",
"TemplateId": "Video-720p",
"HlsGroupConfig": {
"Type": "Video"
}
},
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "Video-360p",
"HlsGroupConfig": {
"Type": "Video"
}
},
{
"OutputFileName": "audio/chinese/chinese",
"TemplateId": "Audio-64Kbps",
"HlsGroupConfig": {
"Type": "Audio",
"Name": "ChineseAudio",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "ChineseSubtitle",
"OutputFileName": "subtitle/chinese/chinese",
"TemplateId": "Any template ID in the packaging job",
"OverrideParams": {
"Subtitles": [
{
"Codec": "vtt"
}
]
},
"HlsGroupConfig": {
"Type": "Subtitle",
"Name": "ChineseSubtitle",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "EnglishAudio",
"OutputFileName": "audio/english/english",
"TemplateId": "Audio-64Kbps",
"HlsGroupConfig": {
"Type": "Audio",
"Name": "EnglishAudio",
"Language": "en",
"Autoselect": "TRUE",
"Default": "FALSE"
}
},
{
"InputRef": "EnglishSubtitle",
"OutputFileName": "subtitle/english/english",
"TemplateId": "Any template ID in the packaging job",
"OverrideParams": {
"Subtitles": [
{
"Codec": "vtt"
}
]
},
"HlsGroupConfig": {
"Type": "Subtitle",
"Name": "EnglishSubtitle",
"Language": "en",
"Autoselect": "TRUE",
"Default": "FALSE"
}
}
]
}
]
}
}ジョブ結果のクエリ
GetMediaConvertJob 操作を呼び出して、トランスコーディングジョブの詳細を取得します。
コールバックイベント通知
イベントタイプ: 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\"}"
}