Le transcodage audio convertit des fichiers audio vers les formats de votre choix. Cette rubrique décrit les paramètres du transcodage audio et fournit des exemples.
Cas d'utilisation
Convertir les formats de fichiers musicaux pour garantir la compatibilité avec divers appareils de lecture.
Optimiser l'espace de stockage en transcodant de grands fichiers audio sans perte vers des formats avec perte hautement compressés, tels que MP3.
S'adapter à diverses conditions réseau pour les services de streaming en ligne en transcodant l'audio en plusieurs débits binaires afin d'assurer une lecture fluide sur les connexions à faible bande passante.
Préparer les ressources audio pour la production et la post-production vidéo en les transcodant pour répondre aux exigences du projet ou aux normes de distribution.
Notes d'utilisation
Le transcodage audio prend uniquement en charge le traitement asynchrone, invoqué à l'aide de la méthode
x-oss-async-process.Avant d'utiliser le transcodage audio, vous devez associer un projet Intelligent Media Management (IMM) à un compartiment OSS. Pour plus d'informations, consultez Démarrage rapide et AttachOSSBucket.
L'accès anonyme sera refusé.
Vous devez disposer des autorisations requises pour utiliser la fonctionnalité. Pour plus d'informations, consultez autorisations.
Le transcodage peut échouer si le taux d'échantillonnage par défaut ou le nombre de canaux audio est incompatible avec le format de conteneur cible.
Pour le transcodage audio, vous pouvez définir la profondeur de bits d'échantillonnage uniquement pour le format
flac. Pour le transcodage vidéo, vous pouvez définir la profondeur de bits à l'aide du paramètrepixfmtde l'action OSSx-oss-process. Pour plus d'informations, consultez Transcodage vidéo.
Paramètres
Action : audio/convert
Le tableau suivant décrit les paramètres.
|
Paramètre |
Type |
Obligatoire |
Description |
|
ss |
int |
Non |
L'heure de début du transcodage, en millisecondes. Valeurs valides :
|
|
t |
int |
Non |
La durée du transcodage, en millisecondes. Valeurs valides :
|
|
f |
string |
Oui |
Le format de conteneur de sortie. Valeurs valides :
|
|
ar |
int |
Non |
Le taux d'échantillonnage audio de sortie. Par défaut, le taux d'échantillonnage de l'audio source est utilisé. Valeurs valides :
Remarque
Les taux d'échantillonnage pris en charge varient selon le format. MP3 prend en charge des taux d'échantillonnage allant jusqu'à 48 kHz. Opus prend en charge 8 kHz, 12 kHz, 16 kHz, 24 kHz et 48 kHz. AC3 prend en charge 32 kHz, 44,1 kHz et 48 kHz. AMR prend uniquement en charge 8 kHz et 16 kHz. |
|
ac |
int |
Non |
Le nombre de canaux audio de sortie. Par défaut, le nombre de canaux de l'audio source est utilisé. Plage de valeurs : 1 à 8. Remarque
Le nombre de canaux audio pris en charge varie selon le format. MP3 prend uniquement en charge le mono et le stéréo. AC3 prend en charge jusqu'à 6 canaux (5,1). AMR prend uniquement en charge le mono. |
|
aq |
int |
Non |
La qualité audio. Ce paramètre est mutuellement exclusif avec le paramètre ab. Plage de valeurs : 0 à 100. |
|
ab |
int |
Non |
Le débit binaire audio, en bits par seconde (bps). Ce paramètre est mutuellement exclusif avec le paramètre aq. Plage de valeurs : 1 000 à 10 000 000. |
|
abopt |
string |
Non |
L'option de débit binaire audio. Valeurs valides :
|
|
adepth |
int |
Non |
La profondeur de bits d'échantillonnage de l'audio de sortie. Valeurs valides : 16 et 24. Remarque
Ce paramètre n'est valide que lorsque f est défini sur flac. |
Les paramètres sys/saveas et notify sont également utilisés pour le transcodage audio. Pour plus d'informations, consultez sys/saveas et Notifications.
Utiliser l'API REST
Convertir MP3 en AAC
Configuration de la tâche
Format de conteneur : mp3 vers aac
Fichier source : example.mp3
Durée du transcodage : 60 000 millisecondes, à partir de la 10 000e milliseconde.
Paramètres audio : Conserver le taux d'échantillonnage et le nombre de canaux audio d'origine, et définir le débit binaire audio sur 96 Kbps.
Notification de fin : Envoyer un message via MNS.
Exemple de requête
// Transcode the audio file named example.mp3.
POST /example.mp3?x-oss-async-process HTTP/1.1
Host: video-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
x-oss-async-process=audio/convert,ss_10000,t_60000,f_aac,ab_96000|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQo/notify,topic_QXVkaW9Db252ZXJ0
Convertir WAV en Opus
Configuration de la tâche
Format de conteneur : wav vers opus
Durée du transcodage : L'intégralité du fichier audio.
Paramètres audio : Taux d'échantillonnage de 48 kHz, deux canaux et débit binaire audio de 96 Kbps.
Chemin de sortie : oss://outbucket/outobject.opus
Notification de fin : Envoyer un message via MNS.
Exemple de requête
// Transcode the audio file named example.wav.
POST /example.wav?x-oss-async-process HTTP/1.1
Host: video-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
x-oss-async-process=audio/convert,f_opus,ab_96000,ar_48000,ac_2|sys/saveas,b_b3V0YnVja2V0, o_b3V0b2JqLnthdXRvZXh0fQo/notify,topic_QXVkaW9Db252ZXJ0
Utiliser les SDK
Vous pouvez utiliser les SDK Java, Python et Go pour effectuer un transcodage audio asynchrone.
Java
Nécessite le SDK pour Java version 3.17.4 ou ultérieure.
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.AsyncProcessObjectRequest;
import com.aliyun.oss.model.AsyncProcessObjectResult;
import com.aliyuncs.exceptions.ClientException;
import java.util.Base64;
public class Demo {
public static void main(String[] args) throws ClientException {
// yourEndpoint: The endpoint of the region where your bucket is located.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// The region ID for the endpoint, for example, cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the bucket name.
String bucketName = "examplebucket";
// Specify the transcoded audio file.
String targetKey = "dest.aac";
// Specify the source audio file.
String sourceKey = "src.mp3";
// Create an OSSClient instance.
// When the OSSClient instance is no longer used, call the shutdown method to release resources.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Build the audio processing style string and audio transcoding parameters.
String style = String.format("audio/convert,ss_10000,t_60000,f_aac,ab_96000");
// Build the asynchronous processing instruction.
String bucketEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(bucketName.getBytes());
String targetEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(targetKey.getBytes());
String process = String.format("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded);
// Create an AsyncProcessObjectRequest object.
AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, process);
// Execute the asynchronous processing task.
AsyncProcessObjectResult response = ossClient.asyncProcessObject(request);
System.out.println("EventId: " + response.getEventId());
System.out.println("RequestId: " + response.getRequestId());
System.out.println("TaskId: " + response.getTaskId());
} finally {
// Shut down the OSSClient.
ossClient.shutdown();
}
}
}
Python
Nécessite le SDK pour Python version 2.18.4 ou ultérieure.
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Obtain access credentials from environment variables. Before you run this sample code, make sure that the environment variables are configured.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# The endpoint of the region where the bucket is located. For example, for China (Hangzhou), use https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the bucket name, for example, examplebucket.
bucket = oss2.Bucket(auth, endpoint, 'examplebucket')
# Specify the name of the source audio file.
source_key = 'src.mp3'
# Specify the name of the transcoded audio file.
target_key = 'dest.aac'
# Build the audio processing style string and audio transcoding parameters.
audio_style = 'audio/convert,ss_10000,t_60000,f_aac,ab_96000'
# Build the processing instruction, including the save path and the Base64-encoded bucket name and target object name.
bucket_name_encoded = base64.urlsafe_b64encode('examplebucket'.encode()).decode().rstrip('=')
target_key_encoded = base64.urlsafe_b64encode(target_key.encode()).decode().rstrip('=')
process = f"{audio_style}|sys/saveas,b_{bucket_name_encoded},o_{target_key_encoded}/notify,topic_QXVkaW9Db252ZXJ0"
try:
# Execute the asynchronous processing task.
result = bucket.async_process_object(source_key, process)
print(f"EventId: {result.event_id}")
print(f"RequestId: {result.request_id}")
print(f"TaskId: {result.task_id}")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
main()
Go
Nécessite le SDK pour Go version 3.0.2 ou ultérieure.
package main
import (
"encoding/base64"
"fmt"
"log"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain temporary access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, and OSS_SESSION_TOKEN environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// yourEndpoint: The endpoint of the region where your bucket is located. For example, for China (Hangzhou), use https://oss-cn-hangzhou.aliyuncs.com. Set this parameter based on the actual region.
// yourRegion: The region ID, for example, cn-hangzhou.
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the bucket name, for example, examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the source audio file.
sourceKey := "src.mp3"
// Specify the name of the transcoded audio file.
targetKey := "dest.aac"
// Build the audio processing style string and audio transcoding parameters.
audioStyle := "audio/convert,ss_10000,t_60000,f_aac,ab_96000"
// Build the processing instruction, including the save path and the Base64-encoded bucket name and target object name.
bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", audioStyle, bucketNameEncoded, targetKeyEncoded)
// Execute the asynchronous processing task.
result, err := bucket.AsyncProcessObject(sourceKey, process)
if err != nil {
log.Fatalf("Failed to async process object: %s", err)
}
fmt.Printf("EventId: %s\n", result.EventId)
fmt.Printf("RequestId: %s\n", result.RequestId)
fmt.Printf("TaskId: %s\n", result.TaskId)
}