Todos os produtos
Search
Central de documentação

Object Storage Service:Mesclagem de áudio

Última atualização: Jul 03, 2026

Você pode mesclar vários arquivos de áudio em um único arquivo e convertê-lo para o formato desejado. Este tópico descreve os parâmetros e fornece exemplos de mesclagem de áudio.

Casos de uso

  • Criação e produção musical: músicos e produtores frequentemente mesclam faixas instrumentais e vocais gravadas separadamente para criar uma música completa.

  • Produção de audiolivros e conteúdo de voz: na produção de audiolivros, o áudio narrado costuma ser mesclado por capítulo para garantir a continuidade da história.

  • Pós-produção de cinema e televisão: editores de áudio mesclam diálogos, narrações, efeitos sonoros ambientes e música de fundo para sincronizar com as imagens.

  • Criação de conteúdo para redes sociais: usuários de plataformas de vídeos curtos frequentemente combinam efeitos sonoros, locuções e música de fundo para tornar o conteúdo mais expressivo.

Observações de uso

  • A mesclagem de áudio suporta apenas processamento assíncrono (com o método x-oss-async-process).

  • Antes de mesclar áudios, vincule um projeto IMM. Para obter instruções sobre como vincular um projeto no console ou por API, consulte início rápido e Vincular um bucket do OSS.

  • Usar a taxa de amostragem ou o número de canais de áudio padrão pode causar falha na mesclagem devido a problemas de compatibilidade com o formato de contêiner de áudio de destino.

  • É possível mesclar até 11 arquivos de áudio por vez.

Parâmetros

Ação: audio/concat

As tabelas a seguir descrevem os parâmetros.

Parâmetros de mesclagem

A sequência dos parâmetros pre e sur na string de solicitação determina a ordem de mesclagem para audio/concat:

  • /pre: arquivo de áudio a ser adicionado no início.

  • /sur: arquivo de áudio a ser adicionado ao final.

Parâmetro

Tipo

Obrigatório

Descrição

ss

int

Não

Tempo inicial do clipe de áudio a mesclar, em milissegundos. Valores válidos:

  • 0 (padrão): a mesclagem começa do início do clipe.

  • Valor maior que 0: a mesclagem começa no milissegundo ss.

t

int

Não

Duração do clipe de áudio adicionado no início ou no final a mesclar, em milissegundos. Valores válidos:

  • 0 (padrão): a mesclagem continua até o final do clipe.

  • Valor maior que 0: a mesclagem dura t milissegundos.

o

string

Sim

Objeto do OSS no bucket atual. O nome do objeto deve estar codificado em Base64 seguro para URL.

Parâmetros de transcodificação

Parâmetro

Tipo

Obrigatório

Descrição

ss

int

Não

Tempo inicial para transcodificar o arquivo de áudio principal, em milissegundos. Valores válidos:

  • 0 (padrão): a transcodificação começa do início do áudio.

  • Valor maior que 0: a transcodificação começa no milissegundo ss.

t

int

Não

Duração da transcodificação do arquivo de áudio principal, em milissegundos. Valores válidos:

  • 0 (padrão): a transcodificação continua até o final do áudio.

  • Valor maior que 0: a transcodificação dura t milissegundos.

f

string

Sim

Formato de contêiner de áudio:

  • mp3

  • aac

  • flac

  • oga

  • ac3

  • opus

  • amr

ar

int

Não

Taxa de amostragem de áudio. Por padrão, corresponde à taxa do arquivo de áudio de source especificado por align. Valores válidos:

  • 8000

  • 11025

  • 12000

  • 16000

  • 22050

  • 24000

  • 32000

  • 44100

  • 48000

  • 64000

  • 88200

  • 96000

Nota

As taxas de amostragem suportadas variam conforme o formato. mp3 suporta até 48 kHz; opus suporta 8 kHz, 12 kHz, 16 kHz, 24 kHz e 48 kHz; ac3 suporta 32 kHz, 44,1 kHz e 48 kHz; amr suporta apenas 8 kHz e 16 kHz.

ac

int

Não

Número de canais de áudio. Por padrão, corresponde à contagem de canais do arquivo de áudio de source especificado pelo parâmetro align. Valores válidos: 1 a 8.

Nota

O número de canais suportados varia conforme o formato. mp3 suporta mono e estéreo; ac3 suporta até 6 canais (5.1); amr suporta apenas mono.

aq

int

Não

Qualidade de compressão de áudio. Valores válidos: 0 a 100.

Nota

Este parâmetro é mutuamente exclusivo com ab. Se nenhum dos dois for definido, o codificador usará sua taxa de bits padrão.

ab

int

Não

Taxa de bits de áudio, em bit/s (bps). Valores válidos: 1000 a 10000000.

abopt

string

Não

Opção de taxa de bits de áudio. Valores válidos:

  • 0 (padrão): sempre usa a taxa de bits de áudio de destino.

  • 1: se a taxa de bits de um arquivo de source for menor que o valor de ab, a menor taxa de bits entre os arquivos de source será usada.

  • 2: se a taxa de bits de um arquivo de source for menor que o valor de ab, a operação falhará.

Nota

Use este parâmetro junto com o parâmetro ab.

align

int

Não

Índice do arquivo de áudio principal na lista de mesclagem. Os parâmetros padrão de transcodificação são obtidos deste arquivo. O valor padrão é 0, que indica o primeiro arquivo de áudio na lista de mesclagem.

adepth

int

Não

Profundidade de bits de amostragem de áudio. Valores válidos: 16 e 24.

Nota

Este parâmetro só tem efeito quando f está definido como flac.

Nota

A mesclagem de áudio também utiliza os parâmetros sys/saveas e notify. Para mais informações, consulte salvar como e Notificação de mensagem.

REST API

Mesclar áudio para AAC

  • Arquivos de áudio: pre1.mp3, pre2.wav, example.oga, sur1.aac, sur2.wma

  • Duração e ordem da mesclagem:

    Nome do áudio

    Ordem

    Duração

    pre1.mp3

    1

    Áudio inteiro

    pre2.wav

    2

    Primeiros 2 segundos

    example.oga

    3

    Áudio inteiro

    sur1.aac

    4

    4s a 10s

    sur2.wma

    5

    10s até o final

  • Notificação de conclusão da transcodificação: envio de uma mensagem do Message Service (MNS).

  • Especificações do áudio de saída

    • Formato de áudio: aac

    • Perfil de áudio: taxa de amostragem de 44,1 kHz, mono

    • Taxa de bits de áudio: 96 kbps

    • Caminho de armazenamento de objetos

      • Arquivo AAC: oss://outbucket/outobj.aac

Exemplo de solicitação

// 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

SDKs do OSS

Você pode mesclar áudios usando processamento assíncrono com o OSS SDK for Java, Python ou Go.

Pré-requisitos

  1. Certifique-se de que as variáveis de ambiente OSS_ACCESS_KEY_ID e OSS_ACCESS_KEY_SECRET estejam definidas.

  2. Especifique o nome do bucket, por exemplo, examplebucket.

  3. Especifique o nome do arquivo de áudio de saída, por exemplo, dest.aac.

  4. Especifique os nomes dos arquivos de áudio de source a mesclar, por exemplo, src1.mp3 e src2.mp3.

Java

É necessário o OSS SDK for Java 3.17.4 ou posterior.

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

É necessário o OSS SDK for Python 2.18.4 ou posterior.

# -*- 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

É necessário o OSS SDK for Go 3.0.2 ou posterior.

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)
}