Transcodifique um arquivo MP4 com o Intelligent Media Services (IMS) para incluir várias faixas de áudio e atribuir um idioma a cada faixa.
Fluxo de trabalho
Exemplo da estrutura do arquivo de saída:
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)
Pré-requisitos
O Intelligent Media Services (IMS) deve estar ativado. Para mais informações, consulte Ativar o serviço.
Preparações
Configuração básica do IMS
Configuração de armazenamento: vincule um bucket do Object Storage Service (OSS) ao IMS. Para mais informações, consulte Configurar um endereço de armazenamento.
Configuração de callback: configure um callback HTTP ou do Message Notification Service (MNS) para receber notificações sobre o status dos jobs. Para mais detalhes sobre métodos e eventos de callback, consulte Visão geral dos eventos de callback.
Modelos de transcodificação
Procedimento
Requisitos do exemplo
Codec: H.264/H.265
Resolução de vídeo: 360p/540p/720p/1080p
Áudio: HE-AAC a 64 kbps (configuração padrão).
Exemplo de configuração
Crie modelos de transcodificação para quatro resoluções de vídeo conforme descrito abaixo. Para instruções, consulte Criar um modelo de transcodificação.
Para utilizar a transcodificação Narrowband HD™, crie um modelo correspondente com base nas tabelas. Em seguida, envie um ticket para solicitar à Alibaba Cloud uma atualização de configuração no backend.
H.264
|
Modelo de transcodificação |
Codec |
Formato de contêiner |
Outros parâmetros |
|
Video-360P |
H.264 |
mp4 |
|
|
Video-540P |
H.264 |
mp4 |
|
|
Video-720P |
H.264 |
mp4 |
|
|
Video-1080P |
H.264 |
mp4 |
|
H.265
|
Modelo de transcodificação |
Codec |
Formato de contêiner |
Outros parâmetros |
|
Video-360P |
H.265 |
mp4 |
|
|
Video-540P |
H.265 |
mp4 |
|
|
Video-720P |
H.265 |
mp4 |
|
|
Video-1080P |
H.265 |
mp4 |
|
Enviar um job de transcodificação
Chame a operação de API SubmitMediaConvertJob para enviar um job de transcodificação.
Parâmetros de áudio
|
Parâmetro |
Tipo |
Descrição |
|
InputRef |
String |
Nome do stream de entrada para esta faixa de áudio. Deve corresponder a um |
|
LanguageControl |
String |
Controla como a tag de idioma é definida para o stream de saída. Valores válidos:
|
|
Language |
String |
Código de idioma ISO 639-2 para a faixa de áudio. |
|
Remove |
String |
Indica se o stream de áudio deve ser removido. |
|
Codec |
String |
Codec de áudio utilizado. |
|
Profile |
String |
Perfil de codificação de áudio. |
|
Bitrate |
String |
Taxa de bits do áudio de saída. |
|
Samplerate |
String |
Taxa de amostragem do áudio. |
|
Channels |
String |
Número de canais de áudio. |
|
Volume |
Object |
Configurações de controle de volume. |
Cenário 1: Manter o áudio original
O array
Inputsespecifica três sources: um arquivo de vídeo principal com áudio padrão (video), um arquivo de áudio separado em inglês (EnglishAudio) e um arquivo de áudio separado em japonês (JapaneseAudio).Em
OutputGroups.GroupConfig,"Type": "File"define a saída como um único arquivo de contêiner.Cada faixa utiliza
InputRefpara indicar sua source de entrada eLanguageControlpara determinar a lógica de marcação de idioma.
{
"Inputs": [
{
"Name": "video",
"InputFile": {"Type": "OSS", "Media": "https://<your-bucket>.<public-endpoint>/<video-with-default-audio.mp4>"}
},
{
"Name": "EnglishAudio",
"InputFile": {"Type": "OSS", "Media": "https://<your-bucket>.<public-endpoint>/<english-audio.mp4>"}
},
{
"Name": "JapaneseAudio",
"InputFile": {"Type": "OSS", "Media": "https://<your-bucket>.<public-endpoint>/<japanese-audio.mp4>"}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "File",
"OutputFileBase": {
"Type": "OSS",
"Media": "https://<your-bucket>.<public-endpoint>/<output-path>/"
}
},
"Outputs": [
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "Video-360P",
"OverrideParams": {
"Audios": [
{
"InputRef": "video",
"LanguageControl": "InputFirst"
}, {
"InputRef": "EnglishAudio",
"LanguageControl": "Configured",
"Language": "eng"
}, {
"InputRef": "JapaneseAudio",
"LanguageControl": "Configured",
"Language": "jpn"
}
]
}
}
]
}
]
}
Cenário 2: Remover o áudio original
Esta configuração assemelha-se ao Cenário 1, mas omite a referência à faixa de áudio do vídeo original no array Audios. Consequentemente, o arquivo de saída contém apenas as faixas de áudio em inglês e japonês.
{
"Inputs": [
{
"Name": "video",
"InputFile": {"Type": "OSS", "Media": "https://<your-bucket>.<public-endpoint>/<video-with-default-audio.mp4>"}
},
{
"Name": "EnglishAudio",
"InputFile": {"Type": "OSS", "Media": "https://<your-bucket>.<public-endpoint>/<english-audio.mp4>"}
},
{
"Name": "JapaneseAudio",
"InputFile": {"Type": "OSS", "Media": "https://<your-bucket>.<public-endpoint>/<japanese-audio.mp4>"}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "File",
"OutputFileBase": {
"Type": "OSS",
"Media": "https://<your-bucket>.<public-endpoint>/<output-path>/"
}
},
"Outputs": [
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "Video-360P",
"OverrideParams": {
"Audios": [
{
"InputRef": "EnglishAudio",
"LanguageControl": "Configured",
"Language": "eng"
}, {
"InputRef": "JapaneseAudio",
"LanguageControl": "Configured",
"Language": "jpn"
}
]
}
}
]
}
]
}
Cenário 3: Selecionar áudio por idioma
Este exemplo utiliza o parâmetro AudioSelector para selecionar a faixa de áudio marcada como jpn da entrada JapaneseFile. A faixa de áudio de saída define LanguageControl como InputFirst, herdando assim a tag de idioma da entrada.
{
"Inputs": [
{
"Name": "video",
"InputFile": {"Type": "OSS", "Media": "https://<your-bucket>.<public-endpoint>/<video-with-default-audio.mp4>"}
},
{
"Name": "EnglishAudio",
"InputFile": {"Type": "OSS", "Media": "https://<your-bucket>.<public-endpoint>/<english-audio.mp4>"}
},
{
"Name": "JapaneseFile",
"InputFile": {"Type": "OSS", "Media": "https://<your-bucket>.<public-endpoint>/<multilingual-file.mp4>"},
"AudioSelector": [{
"Name": "JapaneseAudio",
"Rule": "tag",
"TagConfig": {"language": "jpn"}
}]
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "File",
"OutputFileBase": {
"Type": "OSS",
"Media": "https://<your-bucket>.<public-endpoint>/<output-path>/"
}
},
"Outputs": [
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "Video-360P",
"OverrideParams": {
"Audios": [
{
"InputRef": "video",
"LanguageControl": "InputFirst"
}, {
"InputRef": "EnglishAudio",
"LanguageControl": "Configured",
"Language": "eng"
}, {
"InputRef": "JapaneseAudio",
"LanguageControl": "InputFirst"
}
]
}
}
]
}
]
}
Consultar o job de transcodificação
Chame a operação de API GetMediaConvertJob para recuperar os detalhes de um job de transcodificação.
Evento de callback
Tipo de evento: MediaConvertComplete
Este evento não é configurável pelo console. Para configurá-lo, chame a operação de API SetEventCallback.
Principais parâmetros de callback
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
|
Name |
String |
Sim |
Nome do job pai. |
|
|
JobId |
String |
Sim |
ID do job. |
|
|
Status |
String |
Sim |
Status do job. O valor |
|
|
TriggerSource |
String |
Não |
Origem do gatilho. |
|
|
FinishTime |
String |
Não |
Horário de conclusão no formato UTC: |
|
|
UserData |
String |
Não |
Dados personalizados especificados no envio do job, repassados e retornados no callback. |
|
Exemplo
{
"FinishTime": "2025-05-09T08:03:21Z",
"JobId": "5d37357cb3a44d10ba33c52760c896cd",
"Status": "Success",
"TriggerSource": "IceWorkflow",
"UserData": "{\"ImsSrc\":\"Workflow\",\"TaskId\":\"e89a955d88ca47f0b9b79c562e5c622f\"}"
}