本文档指导开发者通过阿里云IMS实现MP4多音轨转码及音轨语言设置。
转码流程
结果文件结构示例
Duration: 00:00:31.40, start: 0.000000, bitrate: 816 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 960x540 [SAR 1:1 DAR 16:9], 663 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
Stream #0:1[0x2](zho): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 46 kb/s (default)
Stream #0:2[0x3](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 46 kb/s (default)
Stream #0:3[0x4](jpn): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 46 kb/s (default)
前提条件
已开通智能媒体服务。请参见开通服务。
配置准备
IMS基础配置
转码模板配置
配置流程
需求示例
编码协议:H264/H265
视频分辨率:360P/540P/720P/1080P
音频:HE-AAC 64Kbps(默认配置)。
配置示例
以四种视频清晰度为例,按照下表创建转码模板,创建模板操作请参见创建转码模板。
如需进行窄带高清转码,请参照表格创建相应模板,随后提交工单,由阿里云在后台进行升级配置。
H264
转码模板 | 编码协议 | 封装格式 | 其他配置 |
视频-360P | H264 | mp4 |
|
视频-540P | H264 | mp4 |
|
视频-720P | H264 | mp4 |
|
视频-1080P | H264 | mp4 |
|
H265
转码模板 | 编码协议 | 封装格式 | 其他配置 |
视频-360P | H265 | mp4 |
|
视频-540P | H265 | mp4 |
|
视频-720P | H265 | mp4 |
|
视频-1080P | H265 | mp4 |
|
发起转码任务
调用SubmitMediaConvertJob接口,提交视频或音频文件的转码任务到智能媒体服务。
参数说明(Audios)
参数 | 类型 | 说明 |
InputRef | String | 转码过程中所使用的流信息,其值为 Input 或 AudioSelector 中的name。 |
LanguageControl | String | 语言选择策略:该策略用于确定输出流的语言tag,其取值如下:
|
Language | String | 指定的语言代码。需要遵循ISO 639-2标准。 |
Remove | String | 是否删除音频流。 |
Codec | String | 音频编解码格式。 |
Profile | String | 音频编码级别。 |
Bitrate | String | 输出文件的音频码率。 |
Samplerate | String | 采样率。 |
Channels | String | 声道数。 |
Volume | Object | 音量控制。 |
场景1:保留原视频音频
在 input 中分别指定了包含默认语言的视频和英文、日语两种语言音频的文件地址作为输入。
在 OutputGroups.GroupConfig 中指定 Type 为 File,表示这个 Group 是单文件封装的输出。
在 OutputGroups.Outputs.OverrideParams 中指定 Audios 参数,表示输出文件包含多个音频轨道。其中,每个音轨通过 InputRef 参数指定来源的输入文件,通过 LanguageControl 参数来指定语言标签逻辑。
{
"Inputs": [
{
"Name": "video",
"InputFile": {"Type": "OSS", "Media": "https://<Bucket>.<外网Endpoint>/<视频1中文>"}
},
{
"Name": "EnglishAudio",
"InputFile": {"Type": "OSS", "Media": "https://<Bucket>.<外网Endpoint>/<视频1英文>"}
},
{
"Name": "JapaneseAudio",
"InputFile": {"Type": "OSS", "Media": "https://<Bucket>.<外网Endpoint>/<视频1日语>"}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "File",
"OutputFileBase": {
"Type": "OSS",
"Media": "https://<Bucket>.<外网Endpoint>/<URI>/"
}
},
"Outputs": [
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "视频-360P",
"OverrideParams": {
"Audios": [
{
"InputRef": "video",
"LanguageControl": "InputFirst"
}, {
"InputRef": "EnglishAudio",
"LanguageControl": "Configured",
"Language": "eng"
}, {
"InputRef": "JapaneseAudio",
"LanguageControl": "Configured",
"Language": "jpn"
}
]
}
}
]
}
]
}
场景2:不保留原视频音频
相较于场景1,在 Audios 中去除了对来源为video文件音轨的配置。
{
"Inputs": [
{
"Name": "video",
"InputFile": {"Type": "OSS", "Media": "https://<Bucket>.<外网Endpoint>/<视频1中文>"}
},
{
"Name": "EnglishAudio",
"InputFile": {"Type": "OSS", "Media": "https://<Bucket>.<外网Endpoint>/<视频1英文>"}
},
{
"Name": "JapaneseAudio",
"InputFile": {"Type": "OSS", "Media": "https://<Bucket>.<外网Endpoint>/<视频1日语>"}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "File",
"OutputFileBase": {
"Type": "OSS",
"Media": "https://<Bucket>.<外网Endpoint>/<URI>/"
}
},
"Outputs": [
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "视频-360P",
"OverrideParams": {
"Audios": [
{
"InputRef": "EnglishAudio",
"LanguageControl": "Configured",
"Language": "eng"
}, {
"InputRef": "JapaneseAudio",
"LanguageControl": "Configured",
"Language": "jpn"
}
]
}
}
]
}
]
}
场景3: 通过语言筛选输入音频
{
"Inputs": [
{
"Name": "video",
"InputFile": {"Type": "OSS", "Media": "https://<Bucket>.<外网Endpoint>/<视频1中文>"}
},
{
"Name": "EnglishAudio",
"InputFile": {"Type": "OSS", "Media": "https://<Bucket>.<外网Endpoint>/<视频1英文>"}
},
{
"Name": "JapaneseFile",
"InputFile": {"Type": "OSS", "Media": "https://<Bucket>.<外网Endpoint>/<视频1日语>"},
"AudioSelector": [{
"Name": "JapaneseFile",
"Rule": "tag",
"TagConfig": {"language": "jpn"}
}]
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "File",
"OutputFileBase": {
"Type": "OSS",
"Media": "https://<Bucket>.<外网Endpoint>/<URI>/"
}
},
"Outputs": [
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "视频-360P",
"OverrideParams": {
"Audios": [
{
"InputRef": "video",
"LanguageControl": "InputFirst"
}, {
"InputRef": "EnglishAudio",
"LanguageControl": "Configured",
"Language": "eng"
}, {
"InputRef": "JapaneseAudio",
"LanguageControl": "InputFirst"
}
]
}
}
]
}
]
}
查询转码结果
调用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": "5d37357cb3a44d10ba33c52760c896cd",
"Status": "Success",
"TriggerSource": "IceWorkflow",
"UserData": "{\"ImsSrc\":\"Workflow\",\"TaskId\":\"e89a955d88ca47f0b9b79c562e5c622f\"}"
}