Fusionnez plusieurs fichiers audio en un seul et convertissez-le au format souhaité. Cette rubrique décrit les paramètres et fournit des exemples de fusion audio.
Cas d'utilisation
Création et production musicale : les musiciens et producteurs fusionnent souvent les pistes instrumentales et vocales enregistrées séparément pour créer une chanson complète.
Création de livres audio et de contenu vocal : dans la production de livres audio, les narrations sont souvent fusionnées par chapitre afin d'assurer la continuité du récit.
Post-production cinématographique et télévisuelle : lors de la post-production, les monteurs audio fusionnent les dialogues, la narration, les effets sonores d'ambiance et la musique de fond pour les synchroniser avec l'image.
Création de contenu pour les réseaux sociaux : les utilisateurs des plateformes de vidéos courtes fusionnent souvent des effets sonores, des voix off et de la musique de fond pour rendre leur contenu plus expressif.
Remarques sur l'utilisation
La fusion audio prend uniquement en charge le traitement asynchrone (via la méthode x-oss-async-process).
Avant de fusionner des fichiers audio, liez un projet IMM. Pour savoir comment lier un projet dans la console ou via une API, consultez les rubriques Démarrage rapide et Lier un compartiment OSS.
L'accès anonyme est refusé.
Vous devez disposer des autorisations nécessaires pour utiliser cette fonctionnalité. Pour plus d'informations, consultez la rubrique Autorisations.
L'utilisation du taux d'échantillonnage ou du nombre de canaux audio par défaut peut entraîner l'échec de la fusion en raison de problèmes de compatibilité avec le format de conteneur audio cible.
Vous pouvez fusionner jusqu'à 11 fichiers audio simultanément.
Paramètres
Action : audio/concat
Les tableaux suivants décrivent les paramètres.
Paramètres de fusion
L'ordre des paramètres pre et sur dans la chaîne de requête détermine l'ordre de fusion pour audio/concat :
/pre: le fichier audio à ajouter au début./sur: le fichier audio à ajouter à la fin.
|
Paramètre |
Type |
Obligatoire |
Description |
|
ss |
int |
Non |
Heure de début de l'extrait audio à fusionner, en millisecondes. Valeurs valides :
|
|
t |
int |
Non |
Durée de l'extrait audio ajouté au début ou à la fin à fusionner, en millisecondes. Valeurs valides :
|
|
o |
string |
Oui |
Un objet OSS dans le compartiment actuel. Le nom de l'objet doit être encodé en Base64 URL-safe. |
Paramètres de transcodage
|
Paramètre |
Type |
Obligatoire |
Description |
|
ss |
int |
Non |
Heure de début du transcodage du fichier audio principal, en millisecondes. Valeurs valides :
|
|
t |
int |
Non |
Durée du transcodage du fichier audio principal, en millisecondes. Valeurs valides :
|
|
f |
string |
Oui |
Format de conteneur audio :
|
|
ar |
int |
Non |
Taux d'échantillonnage audio. Par défaut, il correspond au taux du fichier audio source spécifié par align. Valeurs valides :
Remarque
Les taux d'échantillonnage pris en charge varient selon le format. mp3 prend en charge 48 kHz et moins ; 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 |
Nombre de canaux audio. Par défaut, il correspond au nombre de canaux du fichier audio source spécifié par le paramètre align. Valeurs valides : 1 à 8. Remarque
Le nombre de canaux pris en charge varie selon le format. mp3 prend en charge mono et stéréo ; ac3 prend en charge jusqu'à 6 canaux (5,1) ; amr prend uniquement en charge mono. |
|
aq |
int |
Non |
Qualité de compression audio. Valeurs valides : 0 à 100. Remarque
Ce paramètre est mutuellement exclusif avec ab. Si aucun n'est défini, l'encodeur utilise son débit binaire par défaut. |
|
ab |
int |
Non |
Débit binaire audio, en bit/s (bps). Valeurs valides : 1000 à 10000000. |
|
abopt |
string |
Non |
Option de débit binaire audio. Valeurs valides :
Remarque
Ce paramètre doit être utilisé conjointement avec le paramètre ab. |
|
align |
int |
Non |
Index du fichier audio principal dans la liste de fusion. Les paramètres de transcodage par défaut proviennent de ce fichier. La valeur par défaut est 0, ce qui indique le premier fichier audio de la liste de fusion. |
|
adepth |
int |
Non |
Profondeur d'échantillonnage audio. Valeurs valides : 16 et 24. Remarque
Ce paramètre prend effet uniquement lorsque f est défini sur flac. |
La fusion audio utilise également les paramètres sys/saveas et notify. Pour plus d'informations, consultez les rubriques Enregistrer sous et Notification de message.
API REST
Fusionner l'audio au format AAC
Fichiers audio : pre1.mp3, pre2.wav, example.oga, sur1.aac, sur2.wma
-
Durée et ordre de fusion :
Nom de l'audio
Ordre
Durée
pre1.mp3
1
Audio entier
pre2.wav
2
2 premières secondes
example.oga
3
Audio entier
sur1.aac
4
De 4 s à 10 s
sur2.wma
5
De 10 s à la fin
Notification de fin de transcodage : envoi d'un message Message Service (MNS).
-
Spécifications de l'audio de sortie
Format audio : aac
Profil audio : taux d'échantillonnage de 44,1 kHz, mono
Débit binaire audio : 96 kbps
-
Chemin de stockage de l'objet
Fichier AAC : oss://outbucket/outobj.aac
Exemple de requête
// Perform audio merging on the example.oga object.
POST /example.oga?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/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_cHJlMS5tcDMK/pre,o_cHJlMi53YXYK,t_2000/sur,o_c3VyMS5hYWMK,ss_4000,t_10000/sur,o_c3VyMi53bWEK,ss_10000|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqLnthdXRvZXh0fQo/notify,topic_QXVkaW9Db252ZXJ0
SDK OSS
Effectuez une fusion audio en utilisant le traitement asynchrone avec le SDK OSS pour Java, Python ou Go.
Prérequis
Assurez-vous que les variables d'environnement
OSS_ACCESS_KEY_IDetOSS_ACCESS_KEY_SECRETsont configurées.Spécifiez le nom du compartiment, par exemple
examplebucket.Spécifiez le nom du fichier audio de sortie, par exemple
dest.aac.Spécifiez les noms des fichiers audio source à fusionner, par exemple
src1.mp3etsrc2.mp3.
Java
Le SDK OSS pour Java version 3.17.4 ou ultérieure est requis.
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.nio.charset.StandardCharsets;
import java.util.Base64;
public class Demo {
public static void main(String[] args) throws ClientException {
// Set endpoint to the endpoint of the region where the bucket is located.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the Alibaba Cloud region ID, for example, cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before running this sample code, make sure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the bucket name.
String bucketName = "examplebucket";
// Specify the name of the output audio file.
String targetAudio = "dest.aac";
// Specify the names of the audio files to be merged.
String audio1 = "src1.mp3";
String audio2 = "src2.mp3";
// Create an OSSClient instance.
// When you are finished, shut down the OSSClient 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 style string for audio processing and the audio merging parameters.
String audio1Encoded = Base64.getUrlEncoder().encodeToString(audio1.getBytes(StandardCharsets.UTF_8)).replace("=", "");
String audio2Encoded = Base64.getUrlEncoder().encodeToString(audio2.getBytes(StandardCharsets.UTF_8)).replace("=", "");
String style = String.format("audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_%s/pre,o_%s,t_0", audio1Encoded, audio2Encoded);
// Build the asynchronous processing instruction.
String bucketEncoded = Base64.getUrlEncoder().encodeToString(bucketName.getBytes(StandardCharsets.UTF_8)).replace("=", "");
String targetEncoded = Base64.getUrlEncoder().encodeToString(targetAudio.getBytes(StandardCharsets.UTF_8)).replace("=", "");
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, audio1, 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
Le SDK OSS pour Python version 2.18.4 ou ultérieure est requis.
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Obtain access credentials from environment variables. Before running this sample code, make sure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Set endpoint to the endpoint of the region where the bucket is located. For example, for China (Hangzhou), set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the Alibaba Cloud region ID, for example, cn-hangzhou.
region = 'cn-hangzhou'
# Specify the bucket name, for example, examplebucket.
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Specify the name of the output audio file.
target_audio = 'dest.aac'
# Specify the names of the audio files to merge.
audio1 = 'src1.mp3'
audio2 = 'src2.mp3'
# Build the style string for audio processing and the audio merging parameters.
audio1_encoded = base64.urlsafe_b64encode(audio1.encode()).decode().rstrip('=')
audio2_encoded = base64.urlsafe_b64encode(audio2.encode()).decode().rstrip('=')
style = f"audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_{audio1_encoded}/pre,o_{audio2_encoded},t_0"
# Build the asynchronous processing instruction.
bucket_encoded = base64.urlsafe_b64encode(bucket.bucket_name.encode()).decode().rstrip('=')
target_encoded = base64.urlsafe_b64encode(target_audio.encode()).decode().rstrip('=')
process = f"{style}|sys/saveas,b_{bucket_encoded},o_{target_encoded}/notify,topic_QXVkaW9Db252ZXJ0"
print(process)
# Execute the asynchronous processing task.
try:
result = bucket.async_process_object(audio1, 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
Le SDK OSS pour Go version 3.0.2 ou ultérieure est requis.
package main
import (
"encoding/base64"
"fmt"
"log"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain access credentials from environment variables. Before running this sample code, make sure the OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, and OSS_SESSION_TOKEN environment variables are set.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Set endpoint to the endpoint of the region where your bucket is located. For example, for China (Hangzhou), set it to https://oss-cn-hangzhou.aliyuncs.com.
// Set region to the Alibaba Cloud 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 names of the audio files to be merged.
audio1 := "src1.mp3"
audio2 := "src2.mp3"
// Specify the name of the output audio file.
targetAudio := "dest.aac"
// Build the style string for audio processing and the audio merging parameters.
audio1Encoded := base64.URLEncoding.EncodeToString([]byte(audio1))
audio2Encoded := base64.URLEncoding.EncodeToString([]byte(audio2))
style := fmt.Sprintf("audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_%s/pre,o_%s,t_0", audio1Encoded, audio2Encoded)
// Build the asynchronous processing instruction.
bucketEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
targetEncoded := base64.URLEncoding.EncodeToString([]byte(targetAudio))
process := fmt.Sprintf("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded)
// Execute the asynchronous processing task.
result, err := bucket.AsyncProcessObject(audio1, 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)
}