Transcodez un fichier MP4 avec Intelligent Media Services (IMS) pour inclure plusieurs pistes audio et attribuer une langue à chacune.
Flux de travail
Exemple de structure du fichier de sortie :
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érequis
Vous avez activé Intelligent Media Services (IMS). Pour plus d'informations, consultez Activer le service.
Préparatifs
Configuration de base d'IMS
Configuration du stockage : liez un bucket Object Storage Service (OSS) à IMS. Pour plus d'informations, consultez Configurer une adresse de stockage.
Configuration des rappels : configurez un rappel HTTP ou Message Notification Service (MNS) pour recevoir les notifications d'état des tâches. Pour en savoir plus sur les méthodes et événements de rappel, consultez Vue d'ensemble des événements de rappel.
Modèles de transcodage
Procédure
Exigences de l'exemple
Codec : H.264/H.265
Résolution vidéo : 360p/540p/720p/1080p
Audio : HE-AAC à 64 kbps (configuration par défaut).
Exemple de configuration
Créez des modèles de transcodage pour quatre résolutions vidéo comme décrit ci-dessous. Pour obtenir des instructions, consultez Créer un modèle de transcodage.
Pour utiliser le transcodage Narrowband HD™, créez un modèle correspondant basé sur les tableaux. Ensuite, soumettez un ticket pour demander une mise à niveau de la configuration backend auprès d'Alibaba Cloud.
H.264
|
Modèle de transcodage |
Codec |
Format de conteneur |
Autres paramètres |
|
Video-360P |
H.264 |
mp4 |
|
|
Video-540P |
H.264 |
mp4 |
|
|
Video-720P |
H.264 |
mp4 |
|
|
Video-1080P |
H.264 |
mp4 |
|
H.265
|
Modèle de transcodage |
Codec |
Format de conteneur |
Autres paramètres |
|
Video-360P |
H.265 |
mp4 |
|
|
Video-540P |
H.265 |
mp4 |
|
|
Video-720P |
H.265 |
mp4 |
|
|
Video-1080P |
H.265 |
mp4 |
|
Soumettre une tâche de transcodage
Appelez l'opération d'API SubmitMediaConvertJob pour soumettre une tâche de transcodage.
Paramètres audio
|
Paramètre |
Type |
Description |
|
InputRef |
String |
Nom du flux d'entrée pour cette piste audio. Cette valeur doit correspondre à un |
|
LanguageControl |
String |
Détermine comment le tag de langue est défini pour le flux de sortie. Valeurs valides :
|
|
Language |
String |
Code de langue ISO 639-2 pour la piste audio. |
|
Remove |
String |
Indique s'il faut supprimer le flux audio. |
|
Codec |
String |
Codec audio. |
|
Profile |
String |
Profil d'encodage audio. |
|
Bitrate |
String |
Débit binaire de l'audio de sortie. |
|
Samplerate |
String |
Fréquence d'échantillonnage. |
|
Channels |
String |
Nombre de canaux audio. |
|
Volume |
Object |
Paramètres de contrôle du volume. |
Scénario 1 : Conserver l'audio d'origine
Le tableau
Inputsspécifie trois sources : un fichier vidéo principal avec audio par défaut (video), un fichier audio anglais distinct (EnglishAudio) et un fichier audio japonais distinct (JapaneseAudio).Dans
OutputGroups.GroupConfig,"Type": "File"définit la sortie comme un fichier conteneur unique.Chaque piste utilise
InputRefpour spécifier son entrée source etLanguageControlpour déterminer sa logique de balisage linguistique.
{
"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"
}
]
}
}
]
}
]
}
Scénario 2 : Supprimer l'audio d'origine
Cette configuration est similaire au Scénario 1, mais elle omet la référence à la piste audio de la vidéo d'origine dans le tableau Audios. Par conséquent, le fichier de sortie ne contient que les pistes audio anglaise et japonaise.
{
"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"
}
]
}
}
]
}
]
}
Scénario 3 : Sélectionner l'audio par langue
Cet exemple utilise le paramètre AudioSelector pour sélectionner la piste audio marquée jpn à partir de l'entrée JapaneseFile. La piste audio de sortie définit LanguageControl sur InputFirst, ce qui hérite du tag de langue de l'entrée.
{
"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"
}
]
}
}
]
}
]
}
Interroger la tâche de transcodage
Appelez l'opération d'API GetMediaConvertJob pour récupérer les détails d'une tâche de transcodage.
Événement de rappel
Type d'événement : MediaConvertComplete
Cet événement n'est pas configurable dans la console. Configurez-le en appelant l'opération d'API SetEventCallback.
Paramètres de rappel clés
|
Paramètre |
Type |
Obligatoire |
Description |
|
|
Name |
String |
Oui |
Nom de la tâche parente. |
|
|
JobId |
String |
Oui |
ID de la tâche. |
|
|
Status |
String |
Oui |
État de la tâche. La valeur |
|
|
TriggerSource |
String |
Non |
Source du déclencheur. |
|
|
FinishTime |
String |
Non |
Heure de fin au format UTC : |
|
|
UserData |
String |
Non |
Données personnalisées spécifiées lors de la soumission de la tâche, transmises et renvoyées dans le rappel. |
|
Exemple
{
"FinishTime": "2025-05-09T08:03:21Z",
"JobId": "5d37357cb3a44d10ba33c52760c896cd",
"Status": "Success",
"TriggerSource": "IceWorkflow",
"UserData": "{\"ImsSrc\":\"Workflow\",\"TaskId\":\"e89a955d88ca47f0b9b79c562e5c622f\"}"
}