MP4多音轨转码及设置音轨语言

本文档指导开发者通过阿里云IMS实现MP4多音轨转码及音轨语言设置。

转码流程

image

结果文件结构示例

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基础配置

  • 存储配置:将OSS Bucket绑定至IMS服务,详情请参见配置存储地址

  • 回调配置:配置HTTP回调或MNS回调以接收任务状态通知,关于回调方式和回调事件的基本信息请参见回调事件概述

转码模板配置

配置流程

image

需求示例

编码协议:H264/H265

视频分辨率:360P/540P/720P/1080P

音频:HE-AAC 64Kbps(默认配置)。

配置示例

以四种视频清晰度为例,按照下表创建转码模板,创建模板操作请参见创建转码模板

说明

如需进行窄带高清转码,请参照表格创建相应模板,随后提交工单,由阿里云在后台进行升级配置。

H264

转码模板

编码协议

封装格式

其他配置

视频-360P

H264

mp4

  • 分辨率(长边固定,短边自适应):640*

  • 其他按实际需求配置

视频-540P

H264

mp4

  • 分辨率(长边固定,短边自适应):960*

  • 其他按实际需求配置

视频-720P

H264

mp4

  • 分辨率(长边固定,短边自适应):1280*

  • 其他按实际需求配置

视频-1080P

H264

mp4

  • 分辨率(长边固定,短边自适应):1920*

  • 其他按实际需求配置

H265

转码模板

编码协议

封装格式

其他配置

视频-360P

H265

mp4

  • 分辨率(长边固定,短边自适应):640*

  • 其他按实际需求配置

视频-540P

H265

mp4

  • 分辨率(长边固定,短边自适应):960*

  • 其他按实际需求配置

视频-720P

H265

mp4

  • 分辨率(长边固定,短边自适应):1280*

  • 其他按实际需求配置

视频-1080P

H265

mp4

  • 分辨率(长边固定,短边自适应):1920*

  • 其他按实际需求配置

发起转码任务

调用SubmitMediaConvertJob接口,提交视频或音频文件的转码任务到智能媒体服务。

参数说明(Audios

参数

类型

说明

InputRef

String

转码过程中所使用的流信息,其值为 Input 或 AudioSelector 中的name。

LanguageControl

String

语言选择策略:该策略用于确定输出流的语言tag,其取值如下:

  • InputFirst:优先使用输入流中的语言tag;若输入流中不存在,则采用以下配置。

  • Configured:使用下方Language参数配置的语言tag。

  • None:不添加语言tag。默认选项。

Language

String

指定的语言代码。需要遵循ISO 639-2标准。

Remove

String

是否删除音频流。

Codec

String

音频编解码格式。

Profile

String

音频编码级别。

Bitrate

String

输出文件的音频码率。

Samplerate

String

采样率。

Channels

String

声道数。

Volume

Object

音量控制。

场景1:保留原视频音频

说明
  1. 在 input 中分别指定了包含默认语言的视频和英文、日语两种语言音频的文件地址作为输入。

  2. 在 OutputGroups.GroupConfig 中指定 Type 为 File,表示这个 Group 是单文件封装的输出。

  3. 在 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\"}"
}