Intelligent Media Services (IMS) を使用して、複数字幕付きのオーディオおよびビデオファイルをトランスコーディングおよびパッケージングし、さまざまなタイプのデバイスで再生可能な複数字幕付きメディアを生成します。
トランスコーディングとパッケージングのワークフロー
IMS を使用して複数字幕付きメディアを生成するには、次の手順を実行します。
環境を準備します。IMS をアクティブ化し、OSS バケットをバインドし、コールバックを設定し、ソースファイルをアップロードします。詳細については、「前提条件」および「事前準備」をご参照ください。
ビデオおよびオーディオストリーム用のトランスコーディングテンプレートを作成します。詳細については、「トランスコーディングテンプレートの設定」をご参照ください。
マルチビットレートのトランスコーディングとパッケージングジョブを送信します。詳細については、「マルチビットレートジョブの送信」をご参照ください。
ジョブの結果をクエリし、パッケージ化された出力を検証します。詳細については、「ジョブ結果のクエリ」および「パッケージ化された出力の検証」をご参照ください。
次のフローチャートは、トランスコーディングとパッケージングのワークフローを示しています。
パッケージ化されたファイル構造の例
次の例は、パッケージ化された出力のプレイリスト構造を示しています。
#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"前提条件
IMS がアクティブ化されていること。詳細については、「IMS のアクティブ化」をご参照ください。
事前準備
IMS の基本設定
ストレージ設定 — OSS バケットを IMS にバインドします。詳細については、「ストレージアドレスの設定」をご参照ください。
コールバック設定 — ジョブのステータス通知を受信するために、HTTP コールバックまたは MNS コールバックを設定します。コールバックメソッドとコールバックイベントの基本情報については、「コールバックイベントの概要」をご参照ください。
ソースファイル — ソースとなるビデオ、オーディオ、および字幕ファイルを、IMS にバインドされている OSS バケットにアップロードします。このトピックのジョブ例では、これらのファイルを OSS URL で参照します。
トランスコーディングテンプレートの設定
設定ワークフロー
次のフローチャートは、トランスコーディングテンプレートの設定ワークフローを示しています。
サンプル要件
この例では、次の要件を使用します。
エンコーディングプロトコル — H264 または H265
ビデオ解像度 — 360P、540P、720P、または 1080P
オーディオ — HE-AAC (64 Kbps)。その他のオーディオパラメーターはデフォルト値を使用します。
字幕 — M3U8 (VTT)
設定例
この例では、4 つのビデオ品質レベルを使用します。次の表に従って、ビデオトランスコーディングテンプレートを作成します。詳細については、「トランスコーディングテンプレートの作成」をご参照ください。
このトピックのジョブ例では、HE-AAC オーディオ出力用に Audio-64Kbps という名前のオーディオトランスコーディングテンプレートも参照します。パッケージングジョブを送信する前に、このテンプレートが作成されていることを確認してください。
狭帯域 HD トランスコーディングを使用するには、表に従って対応するテンプレートを作成し、チケットを送信してください。その後、Alibaba Cloud がバックエンドで設定をアップグレードします。
次の表は、H264 および H265 エンコーディングプロトコルのテンプレートについて説明しています。H265 を使用する場合は、次のコンテナフォーマットに関する考慮事項を確認してください。
推奨オプション — fmp4 コンテナフォーマットを使用します。これは Apple の標準プロトコルであり、Safari ブラウザーで正常に動作します。
代替案 — ts コンテナフォーマットも機能しますが、Safari との互換性はありません。
コンソールの制限 — コンソールでは fmp4 コンテナフォーマットを作成できません。まず、m3u8 (ts) コンテナフォーマットでテンプレートを作成します。その後、Alibaba Cloud がバックエンドで設定をアップグレードします。
H264
トランスコーディングテンプレート | エンコーディングプロトコル | コンテナフォーマット | その他の設定 |
Video-360P | H264 | m3u8 (.ts) | 解像度:長辺 640 ピクセル (短辺はアダプティブ)。 セグメントデュレーション:5 秒。 必要に応じてその他の設定を行います。 |
Video-540P | H264 | m3u8 (.ts) | 解像度:長辺 960 ピクセル (短辺はアダプティブ)。 セグメントデュレーション:5 秒。 必要に応じてその他の設定を行います。 |
Video-720P | H264 | m3u8 (.ts) | 解像度:長辺 1280 ピクセル (短辺はアダプティブ)。 セグメントデュレーション:5 秒。 必要に応じてその他の設定を行います。 |
Video-1080P | H264 | m3u8 (.ts) | 解像度:長辺 1920 ピクセル (短辺はアダプティブ)。 セグメントデュレーション:5 秒。 必要に応じてその他の設定を行います。 |
H265
トランスコーディングテンプレート | エンコーディングプロトコル | コンテナフォーマット | その他の設定 |
Video-360P | H265 | m3u8 (.fmp4) | 解像度:長辺 640 ピクセル (短辺はアダプティブ)。 セグメントデュレーション:5 秒。 必要に応じてその他の設定を行います。 |
Video-540P | H265 | m3u8 (.fmp4) | 解像度:長辺 960 ピクセル (短辺はアダプティブ)。 セグメントデュレーション:5 秒。 必要に応じてその他の設定を行います。 |
Video-720P | H265 | m3u8 (.fmp4) | 解像度:長辺 1280 ピクセル (短辺はアダプティブ)。 セグメントデュレーション:5 秒。 必要に応じてその他の設定を行います。 |
Video-1080P | H265 | m3u8 (.fmp4) | 解像度:長辺 1920 ピクセル (短辺はアダプティブ)。 セグメントデュレーション:5 秒。 必要に応じてその他の設定を行います。 |
マルチビットレートのトランスコーディングとパッケージングジョブ
準備が完了したら、マルチビットレートのトランスコーディングとパッケージングジョブを送信し、ジョブの結果をクエリします。
マルチビットレートジョブの送信
SubmitMediaConvertJob API を呼び出して、ビデオまたはオーディオファイルのトランスコーディングジョブを IMS に送信します。
OverrideParams を使用した字幕ストリームの設定
トランスコーディングテンプレートでは字幕情報をカスタマイズできません。字幕ストリームを設定するには、ジョブの送信時に OverrideParams を使用して字幕情報を明示的に設定する必要があります。次の表は、字幕ストリームの設定について説明しています。
Subtitles
パラメーター | タイプ | 説明 |
Subtitles | Subtitle の配列 | 字幕ストリームの設定。 |
Subtitle
パラメーター | タイプ | 説明 |
Codec | String | 字幕ストリームのエンコーディングフォーマット。HLS は vtt フォーマットのみをサポートします。 |
設定の説明 (HlsGroupConfig)
ジョブ例の各出力には、HLS マニフェスト内の出力ストリームを記述する HlsGroupConfig オブジェクトが含まれています。次の表は、パラメーターについて説明しています。
パラメーター | タイプ | 説明 |
Type | string | データストリームのタイプを指定します。有効な値:Video、Audio、Subtitle、Hybrid。処理中、ストリームタイプに対応する設定のみが保持されます。Video の場合はビデオ関連の設定、Audio の場合はオーディオ関連の設定、Hybrid の場合はオーディオとビデオの両方の関連設定が保持されます。 |
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 または Subtitle の場合に有効になります。 |
AutoSelect | Boolean | ストリームを自動的に選択するかどうかを指定します。このパラメーターは、Type が Audio または Subtitle の場合に有効になります。 |
Forced | Boolean | ストリームを強制的に表示するかどうかを指定します。このパラメーターは、Type が Audio または Subtitle の場合に有効になります。 |
例:マルチビットレートのパッケージ化されたファイルのトランスコーディングと生成
次の例では、ビデオ (video)、英語のオーディオトラック (EnglishAudio)、中国語の字幕トラック (ChineseSubtitle)、および英語の字幕トラック (EnglishSubtitle) の 4 つの入力を定義しています。出力には、2 つのビデオ品質レベル (720P および 360P)、2 つのオーディオトラック、および 2 つの字幕トラックが含まれます。この例では、作成した 4 つのビデオテンプレートのうち 2 つを使用します。必要に応じて、ビデオ出力を追加または削除できます。
各字幕出力を含む各出力には、TemplateId が必要です。字幕出力の場合は、パッケージングジョブ内の任意のトランスコーディングテンプレートの ID を指定します。次の例では、<TemplateId> を Video-360P などの既存のテンプレート ID に置き換えます。
次の JSON は、SubmitMediaConvertJob リクエストの Config パラメーターに対応しています。山括弧で囲まれたプレースホルダーを実際の値に置き換えてください。
{
"Config": {
"Inputs": [
{
"Name": "video",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSSPublicEndpoint>/<Video1Chinese>"
}
},
{
"Name": "EnglishAudio",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSSPublicEndpoint>/<Audio1English>"
}
},
{
"Name": "ChineseSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSSPublicEndpoint>/<Subtitle1Chinese>"
}
},
{
"Name": "EnglishSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSSPublicEndpoint>/<Subtitle1English>"
}
}
],
"OutputGroups": [
{
"Name": "Hls",
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Url": "https://<Bucket>.<PublicEndpoint>/<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": "<TemplateId>",
"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": "<TemplateId>",
"OverrideParams": {
"Subtitles": [
{
"Codec": "vtt"
}
]
},
"HlsGroupConfig": {
"Type": "Subtitle",
"Name": "EnglishSubtitle",
"Language": "en",
"Autoselect": true,
"Default": false
}
}
]
}
]
}
}ジョブ結果のクエリ
GetMediaConvertJob API を呼び出して、トランスコーディングジョブの詳細を取得します。
コールバックイベント
パッケージングジョブが完了すると、IMS はコールバックイベントを送信します。イベントタイプ (EventType) は MediaConvertComplete です。コンソールでは、まだこのイベントを選択できません。設定するには、SetEventCallback API を呼び出します。
主要フィールドの説明
次の表は、コールバックイベントの主要フィールドについて説明しています。
パラメーター | タイプ | 必須 | 説明 |
Name | String | はい | プライマリジョブの名前。 |
JobId | String | はい | ジョブ ID。 |
Status | String | はい | ジョブのステータス。値 |
TriggerSource | String | いいえ | トリガーソース。ジョブが API 経由で送信された場合は |
FinishTime | String | いいえ | ジョブが完了した時刻。フォーマットは ISO 8601 形式の UTC 時刻 (YYYY-MM-DDTHH:mm:ssZ) です。 |
UserData | string | いいえ | ジョブの送信時に渡したカスタムデータ。 |
次の例は、コールバックイベントを示しています。
{
"FinishTime": "2025-05-09T08:03:21Z",
"JobId": "your-job-id",
"Status": "Success",
"TriggerSource": "IceWorkflow",
"UserData": "{\"ImsSrc\":\"Workflow\",\"TaskId\":\"e89a955d88ca47f0b9b79c562e5c622f\"}"
}パッケージ化された出力の検証
Status の値が Success の場合、ジョブの成功を示します。パッケージ化されたファイルが完全であることを確認するには、OSS バケット内の出力ファイルと、「パッケージ化されたファイル構造の例」に示されている構造を比較します。ビデオ、オーディオ、および字幕のプレイリストがすべて期待どおりに生成されていることを確認します。